Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTgui.h
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTgui.h	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTgui.h	(revision 761)
@@ -0,0 +1,1109 @@
+//--------------------------------------------------------------------------------------
+// File: DXUTgui.h
+//
+// Desc: 
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//--------------------------------------------------------------------------------------
+#pragma once
+#ifndef DXUT_GUI_H
+#define DXUT_GUI_H
+
+#include <usp10.h>
+#include <dimm.h>
+
+
+//--------------------------------------------------------------------------------------
+// Defines and macros 
+//--------------------------------------------------------------------------------------
+#define EVENT_BUTTON_CLICKED                0x0101
+#define EVENT_COMBOBOX_SELECTION_CHANGED    0x0201
+#define EVENT_RADIOBUTTON_CHANGED           0x0301
+#define EVENT_CHECKBOX_CHANGED              0x0401
+#define EVENT_SLIDER_VALUE_CHANGED          0x0501
+#define EVENT_EDITBOX_STRING                0x0601
+// EVENT_EDITBOX_CHANGE is sent when the listbox content changes
+// due to user input.
+#define EVENT_EDITBOX_CHANGE                0x0602
+#define EVENT_LISTBOX_ITEM_DBLCLK           0x0701
+// EVENT_LISTBOX_SELECTION is fired off when the selection changes in
+// a single selection list box.
+#define EVENT_LISTBOX_SELECTION             0x0702
+#define EVENT_LISTBOX_SELECTION_END         0x0703
+
+
+//--------------------------------------------------------------------------------------
+// Forward declarations
+//--------------------------------------------------------------------------------------
+class CDXUTDialogResourceManager;
+class CDXUTControl;
+class CDXUTButton;
+class CDXUTStatic;
+class CDXUTCheckBox;
+class CDXUTRadioButton;
+class CDXUTComboBox;
+class CDXUTSlider;
+class CDXUTEditBox;
+class CDXUTIMEEditBox;
+class CDXUTListBox;
+class CDXUTScrollBar;
+class CDXUTElement;
+struct DXUTElementHolder;
+struct DXUTTextureNode;
+struct DXUTFontNode;
+typedef VOID (CALLBACK *PCALLBACKDXUTGUIEVENT) ( UINT nEvent, int nControlID, CDXUTControl* pControl, void* pUserContext );
+
+
+//--------------------------------------------------------------------------------------
+// Enums for pre-defined control types
+//--------------------------------------------------------------------------------------
+enum DXUT_CONTROL_TYPE 
+{ 
+    DXUT_CONTROL_BUTTON, 
+    DXUT_CONTROL_STATIC, 
+    DXUT_CONTROL_CHECKBOX,
+    DXUT_CONTROL_RADIOBUTTON,
+    DXUT_CONTROL_COMBOBOX,
+    DXUT_CONTROL_SLIDER,
+    DXUT_CONTROL_EDITBOX,
+    DXUT_CONTROL_IMEEDITBOX,
+    DXUT_CONTROL_LISTBOX,
+    DXUT_CONTROL_SCROLLBAR,
+};
+
+enum DXUT_CONTROL_STATE
+{
+    DXUT_STATE_NORMAL = 0,
+    DXUT_STATE_DISABLED,
+    DXUT_STATE_HIDDEN,
+    DXUT_STATE_FOCUS,
+    DXUT_STATE_MOUSEOVER,
+    DXUT_STATE_PRESSED,
+};
+
+#define MAX_CONTROL_STATES 6
+
+struct DXUTBlendColor
+{
+    void Init( D3DCOLOR defaultColor, D3DCOLOR disabledColor = D3DCOLOR_ARGB(200, 128, 128, 128), D3DCOLOR hiddenColor = 0 );
+    void Blend( UINT iState, float fElapsedTime, float fRate = 0.7f );
+    
+    D3DCOLOR  States[ MAX_CONTROL_STATES ]; // Modulate colors for all possible control states
+    D3DXCOLOR Current;
+};
+
+
+//-----------------------------------------------------------------------------
+// Contains all the display tweakables for a sub-control
+//-----------------------------------------------------------------------------
+class CDXUTElement
+{
+public:
+    void SetTexture( UINT iTexture, RECT* prcTexture, D3DCOLOR defaultTextureColor = D3DCOLOR_ARGB(255, 255, 255, 255) );
+    void SetFont( UINT iFont, D3DCOLOR defaultFontColor = D3DCOLOR_ARGB(255, 255, 255, 255), DWORD dwTextFormat = DT_CENTER | DT_VCENTER );
+    
+    void Refresh();
+    
+    UINT iTexture;          // Index of the texture for this Element 
+    UINT iFont;             // Index of the font for this Element
+    DWORD dwTextFormat;     // The format argument to DrawText 
+
+    RECT rcTexture;         // Bounding rect of this element on the composite texture
+    
+    DXUTBlendColor TextureColor;
+    DXUTBlendColor FontColor;
+};
+
+
+//-----------------------------------------------------------------------------
+// All controls must be assigned to a dialog, which handles
+// input and rendering for the controls.
+//-----------------------------------------------------------------------------
+class CDXUTDialog
+{
+    friend class CDXUTDialogResourceManager;
+
+public:
+    CDXUTDialog();
+    ~CDXUTDialog();
+
+    // Need to call this now
+    void Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog = true );
+    void Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog, LPCWSTR pszControlTextureFilename );
+    void Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog, LPCWSTR szControlTextureResourceName, HMODULE hControlTextureResourceModule );
+
+    // Windows message handler
+    bool MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
+
+    // Control creation
+    HRESULT AddStatic( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bIsDefault=false, CDXUTStatic** ppCreated=NULL );
+    HRESULT AddButton( int ID, LPCWSTR strText, int x, int y, int width, int height, UINT nHotkey=0, bool bIsDefault=false, CDXUTButton** ppCreated=NULL );
+    HRESULT AddCheckBox( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bChecked=false, UINT nHotkey=0, bool bIsDefault=false, CDXUTCheckBox** ppCreated=NULL );
+    HRESULT AddRadioButton( int ID, UINT nButtonGroup, LPCWSTR strText, int x, int y, int width, int height, bool bChecked=false, UINT nHotkey=0, bool bIsDefault=false, CDXUTRadioButton** ppCreated=NULL );
+    HRESULT AddComboBox( int ID, int x, int y, int width, int height, UINT nHotKey=0, bool bIsDefault=false, CDXUTComboBox** ppCreated=NULL );
+    HRESULT AddSlider( int ID, int x, int y, int width, int height, int min=0, int max=100, int value=50, bool bIsDefault=false, CDXUTSlider** ppCreated=NULL );
+    HRESULT AddEditBox( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bIsDefault=false, CDXUTEditBox** ppCreated=NULL );
+    HRESULT AddIMEEditBox( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bIsDefault=false, CDXUTIMEEditBox** ppCreated=NULL );
+    HRESULT AddListBox( int ID, int x, int y, int width, int height, DWORD dwStyle=0, CDXUTListBox** ppCreated=NULL );
+    HRESULT AddControl( CDXUTControl* pControl );
+    HRESULT InitControl( CDXUTControl* pControl );
+
+    // Control retrieval
+    CDXUTStatic*      GetStatic( int ID ) { return (CDXUTStatic*) GetControl( ID, DXUT_CONTROL_STATIC ); }
+    CDXUTButton*      GetButton( int ID ) { return (CDXUTButton*) GetControl( ID, DXUT_CONTROL_BUTTON ); }
+    CDXUTCheckBox*    GetCheckBox( int ID ) { return (CDXUTCheckBox*) GetControl( ID, DXUT_CONTROL_CHECKBOX ); }
+    CDXUTRadioButton* GetRadioButton( int ID ) { return (CDXUTRadioButton*) GetControl( ID, DXUT_CONTROL_RADIOBUTTON ); }
+    CDXUTComboBox*    GetComboBox( int ID ) { return (CDXUTComboBox*) GetControl( ID, DXUT_CONTROL_COMBOBOX ); }
+    CDXUTSlider*      GetSlider( int ID ) { return (CDXUTSlider*) GetControl( ID, DXUT_CONTROL_SLIDER ); }
+    CDXUTEditBox*     GetEditBox( int ID ) { return (CDXUTEditBox*) GetControl( ID, DXUT_CONTROL_EDITBOX ); }
+    CDXUTIMEEditBox*  GetIMEEditBox( int ID ) { return (CDXUTIMEEditBox*) GetControl( ID, DXUT_CONTROL_IMEEDITBOX ); }
+    CDXUTListBox*     GetListBox( int ID ) { return (CDXUTListBox*) GetControl( ID, DXUT_CONTROL_LISTBOX ); }
+
+    CDXUTControl* GetControl( int ID );
+    CDXUTControl* GetControl( int ID, UINT nControlType );
+    CDXUTControl* GetControlAtPoint( POINT pt );
+
+    bool GetControlEnabled( int ID );
+    void SetControlEnabled( int ID, bool bEnabled );
+
+    void ClearRadioButtonGroup( UINT nGroup );
+    void ClearComboBox( int ID );
+
+    // Access the default display Elements used when adding new controls
+    HRESULT       SetDefaultElement( UINT nControlType, UINT iElement, CDXUTElement* pElement );
+    CDXUTElement* GetDefaultElement( UINT nControlType, UINT iElement );
+
+    // Methods called by controls
+    void SendEvent( UINT nEvent, bool bTriggeredByUser, CDXUTControl* pControl );
+    void RequestFocus( CDXUTControl* pControl );
+
+    // Render helpers
+    HRESULT DrawRect( RECT* pRect, D3DCOLOR color );
+    HRESULT DrawPolyLine( POINT* apPoints, UINT nNumPoints, D3DCOLOR color );
+    HRESULT DrawSprite( CDXUTElement* pElement, RECT* prcDest );
+    HRESULT CalcTextRect( LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, int nCount = -1 );
+    HRESULT DrawText( LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, bool bShadow = false, int nCount = -1 );
+
+    // Attributes
+    bool GetVisible() { return m_bVisible; }
+    void SetVisible( bool bVisible ) { m_bVisible = bVisible; }
+    bool GetMinimized() { return m_bMinimized; }
+    void SetMinimized( bool bMinimized ) { m_bMinimized = bMinimized; }
+    void SetBackgroundColors( D3DCOLOR colorAllCorners ) { SetBackgroundColors( colorAllCorners, colorAllCorners, colorAllCorners, colorAllCorners ); }
+    void SetBackgroundColors( D3DCOLOR colorTopLeft, D3DCOLOR colorTopRight, D3DCOLOR colorBottomLeft, D3DCOLOR colorBottomRight );
+    void EnableCaption( bool bEnable ) { m_bCaption = bEnable; }
+    int GetCaptionHeight() const { return m_nCaptionHeight; }
+    void SetCaptionHeight( int nHeight ) { m_nCaptionHeight = nHeight; }
+    void SetCaptionText( const WCHAR *pwszText ) { StringCchCopy( m_wszCaption, sizeof(m_wszCaption)/sizeof(m_wszCaption[0]), pwszText); }
+    void GetLocation( POINT &Pt ) const { Pt.x = m_x; Pt.y = m_y; }
+    void SetLocation( int x, int y ) { m_x = x; m_y = y; }
+    void SetSize( int width, int height ) { m_width = width; m_height = height;  }
+    int GetWidth() { return m_width; }
+    int GetHeight() { return m_height; }
+
+    static void SetRefreshTime( float fTime ){ s_fTimeRefresh = fTime; }
+
+    static CDXUTControl* GetNextControl( CDXUTControl* pControl );
+    static CDXUTControl* GetPrevControl( CDXUTControl* pControl );
+
+    void RemoveControl( int ID );
+    void RemoveAllControls();
+
+    // Sets the callback used to notify the app of control events
+    void SetCallback( PCALLBACKDXUTGUIEVENT pCallback, void* pUserContext = NULL );
+    void EnableNonUserEvents( bool bEnable ) { m_bNonUserEvents = bEnable; }
+    void EnableKeyboardInput( bool bEnable ) { m_bKeyboardInput = bEnable; }
+    void EnableMouseInput( bool bEnable ) { m_bMouseInput = bEnable; }
+    bool IsKeyboardInputEnabled() const { return m_bKeyboardInput; }
+
+    // Device state notification
+    void Refresh();
+    HRESULT OnRender( float fElapsedTime );
+
+    // Shared resource access. Indexed fonts and textures are shared among
+    // all the controls.
+    HRESULT       SetFont( UINT index, LPCWSTR strFaceName, LONG height, LONG weight );
+    DXUTFontNode* GetFont( UINT index );
+
+    HRESULT          SetTexture( UINT index, LPCWSTR strFilename );
+    HRESULT          SetTexture( UINT index, LPCWSTR strResourceName, HMODULE hResourceModule );
+    DXUTTextureNode* GetTexture( UINT index );
+
+    CDXUTDialogResourceManager* GetManager() { return m_pManager; }
+
+    static void ClearFocus();
+    void FocusDefaultControl();
+
+    bool m_bNonUserEvents;
+    bool m_bKeyboardInput;
+    bool m_bMouseInput;
+
+
+
+private:
+    int m_nDefaultControlID;
+
+    static double s_fTimeRefresh;
+    double m_fTimeLastRefresh;
+
+    // Initialize default Elements
+    void InitDefaultElements();
+
+    // Windows message handlers
+    void OnMouseMove( POINT pt );
+    void OnMouseUp( POINT pt );
+
+    void SetNextDialog( CDXUTDialog* pNextDialog );
+
+    // Control events
+    bool OnCycleFocus( bool bForward );
+
+    static CDXUTControl* s_pControlFocus;        // The control which has focus
+    static CDXUTControl* s_pControlPressed;      // The control currently pressed
+
+    CDXUTControl* m_pControlMouseOver;           // The control which is hovered over
+
+    bool m_bVisible;
+    bool m_bCaption;
+    bool m_bMinimized;
+    bool m_bDrag;
+    WCHAR m_wszCaption[256];
+
+    int m_x;
+    int m_y;
+    int m_width;
+    int m_height;
+    int m_nCaptionHeight;
+
+    D3DCOLOR m_colorTopLeft;
+    D3DCOLOR m_colorTopRight;
+    D3DCOLOR m_colorBottomLeft;
+    D3DCOLOR m_colorBottomRight;
+
+    CDXUTDialogResourceManager* m_pManager;
+    PCALLBACKDXUTGUIEVENT m_pCallbackEvent;
+    void* m_pCallbackEventUserContext;
+
+    CGrowableArray< int > m_Textures;   // Index into m_TextureCache;
+    CGrowableArray< int > m_Fonts;      // Index into m_FontCache;
+
+    CGrowableArray< CDXUTControl* > m_Controls;
+    CGrowableArray< DXUTElementHolder* > m_DefaultElements;
+
+    CDXUTElement m_CapElement;  // Element for the caption
+
+    CDXUTDialog* m_pNextDialog;
+    CDXUTDialog* m_pPrevDialog;
+};
+
+
+//--------------------------------------------------------------------------------------
+// Structs for shared resources
+//--------------------------------------------------------------------------------------
+struct DXUTTextureNode
+{
+    bool bFileSource;  // True if this texture is loaded from a file. False if from resource.
+    HMODULE hResourceModule;
+    int nResourceID;   // Resource ID. If 0, string-based ID is used and stored in strFilename.
+    WCHAR strFilename[MAX_PATH];
+    IDirect3DTexture9* pTexture;
+    DWORD dwWidth;
+    DWORD dwHeight;
+};
+
+struct DXUTFontNode
+{
+    WCHAR strFace[MAX_PATH];
+    ID3DXFont* pFont;
+    LONG  nHeight;
+    LONG  nWeight;
+};
+
+
+//-----------------------------------------------------------------------------
+// Manages shared resources of dialogs
+//-----------------------------------------------------------------------------
+class CDXUTDialogResourceManager
+{
+public:
+    CDXUTDialogResourceManager();
+    ~CDXUTDialogResourceManager();
+
+    HRESULT     OnCreateDevice( LPDIRECT3DDEVICE9 pd3dDevice );
+    HRESULT     OnResetDevice();
+    void        OnLostDevice();
+    void        OnDestroyDevice();
+    bool        MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
+    
+    int AddFont( LPCWSTR strFaceName, LONG height, LONG weight );
+    int AddTexture( LPCWSTR strFilename );
+    int AddTexture( LPCWSTR strResourceName, HMODULE hResourceModule );
+
+    DXUTFontNode*     GetFontNode( int iIndex )     { return m_FontCache.GetAt( iIndex ); };
+    DXUTTextureNode*  GetTextureNode( int iIndex )  { return m_TextureCache.GetAt( iIndex ); };
+    IDirect3DDevice9* GetD3DDevice()                { return m_pd3dDevice; }
+
+    bool RegisterDialog( CDXUTDialog *pDialog );
+    void UnregisterDialog( CDXUTDialog *pDialog );
+    void EnableKeyboardInputForAllDialogs();
+
+    // Shared between all dialogs
+    IDirect3DStateBlock9* m_pStateBlock;
+    ID3DXSprite*          m_pSprite;          // Sprite used for drawing
+
+    CGrowableArray< CDXUTDialog* > m_Dialogs;            // Dialogs registered
+
+protected:
+    CGrowableArray< DXUTTextureNode* > m_TextureCache;   // Shared textures
+    CGrowableArray< DXUTFontNode* > m_FontCache;         // Shared fonts
+
+    IDirect3DDevice9* m_pd3dDevice;
+
+    // Resource creation helpers
+    HRESULT CreateFont( UINT index );
+    HRESULT CreateTexture( UINT index );
+};
+
+
+//-----------------------------------------------------------------------------
+// Base class for controls
+//-----------------------------------------------------------------------------
+class CDXUTControl
+{
+public:
+    CDXUTControl( CDXUTDialog *pDialog = NULL );
+    virtual ~CDXUTControl();
+
+    virtual HRESULT OnInit() { return S_OK; }
+    virtual void Refresh();
+    virtual void Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime ) { };
+
+    // Windows message handler
+    virtual bool MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam ) { return false; }
+
+    virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ) { return false; }
+    virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ) { return false; }
+
+    virtual bool CanHaveFocus() { return false; }
+    virtual void OnFocusIn() { m_bHasFocus = true; }
+    virtual void OnFocusOut() { m_bHasFocus = false; }
+    virtual void OnMouseEnter() { m_bMouseOver = true; }
+    virtual void OnMouseLeave() { m_bMouseOver = false; }
+    virtual void OnHotkey() {}
+
+    virtual BOOL ContainsPoint( POINT pt ) { return PtInRect( &m_rcBoundingBox, pt ); }
+
+    virtual void SetEnabled( bool bEnabled ) { m_bEnabled = bEnabled; }
+    virtual bool GetEnabled() { return m_bEnabled; }
+    virtual void SetVisible( bool bVisible ) { m_bVisible = bVisible; }
+    virtual bool GetVisible() { return m_bVisible; }
+
+    UINT GetType() const { return m_Type; }
+
+    int  GetID() const { return m_ID; }
+    void SetID( int ID ) { m_ID = ID; }
+
+    void SetLocation( int x, int y ) { m_x = x; m_y = y; UpdateRects(); }
+    void SetSize( int width, int height ) { m_width = width; m_height = height; UpdateRects(); }
+
+    void SetHotkey( UINT nHotkey ) { m_nHotkey = nHotkey; }
+    UINT GetHotkey() { return m_nHotkey; }
+
+    void SetUserData( void *pUserData ) { m_pUserData = pUserData; }
+    void *GetUserData() const { return m_pUserData; }
+
+    virtual void SetTextColor( D3DCOLOR Color );
+    CDXUTElement* GetElement( UINT iElement ) { return m_Elements.GetAt( iElement ); }
+    HRESULT SetElement( UINT iElement, CDXUTElement* pElement);
+
+    bool m_bVisible;                // Shown/hidden flag
+    bool m_bMouseOver;              // Mouse pointer is above control
+    bool m_bHasFocus;               // Control has input focus
+    bool m_bIsDefault;              // Is the default control
+
+    // Size, scale, and positioning members
+    int m_x, m_y;
+    int m_width, m_height;
+
+    // These members are set by the container
+    CDXUTDialog* m_pDialog;    // Parent container
+    UINT m_Index;              // Index within the control list
+    
+    CGrowableArray< CDXUTElement* > m_Elements;  // All display elements
+
+protected:
+    virtual void UpdateRects();
+
+    int  m_ID;                 // ID number
+    DXUT_CONTROL_TYPE m_Type;  // Control type, set once in constructor  
+    UINT m_nHotkey;            // Virtual key code for this control's hotkey
+    void *m_pUserData;         // Data associated with this control that is set by user.
+    
+    bool m_bEnabled;           // Enabled/disabled flag
+    
+    RECT m_rcBoundingBox;      // Rectangle defining the active region of the control
+};
+
+
+//-----------------------------------------------------------------------------
+// Contains all the display information for a given control type
+//-----------------------------------------------------------------------------
+struct DXUTElementHolder
+{
+    UINT nControlType;
+    UINT iElement;
+
+    CDXUTElement Element;
+};
+
+
+//-----------------------------------------------------------------------------
+// Static control
+//-----------------------------------------------------------------------------
+class CDXUTStatic : public CDXUTControl
+{
+public:
+    CDXUTStatic( CDXUTDialog *pDialog = NULL );
+
+    virtual void Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime );
+    virtual BOOL ContainsPoint( POINT pt ) { return false; }
+
+    HRESULT GetTextCopy( LPWSTR strDest, UINT bufferCount );
+    LPCWSTR GetText() { return m_strText; }
+    HRESULT SetText( LPCWSTR strText );
+
+
+protected:
+    WCHAR m_strText[MAX_PATH];      // Window text  
+};
+
+
+//-----------------------------------------------------------------------------
+// Button control
+//-----------------------------------------------------------------------------
+class CDXUTButton : public CDXUTStatic
+{
+public:
+    CDXUTButton( CDXUTDialog *pDialog = NULL );
+
+    virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam );
+    virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam );
+    virtual void OnHotkey() { if( m_pDialog->IsKeyboardInputEnabled() ) m_pDialog->RequestFocus( this ); m_pDialog->SendEvent( EVENT_BUTTON_CLICKED, true, this ); }
+    
+    virtual BOOL ContainsPoint( POINT pt ) { return PtInRect( &m_rcBoundingBox, pt ); }
+    virtual bool CanHaveFocus() { return (m_bVisible && m_bEnabled); }
+
+    virtual void Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime );
+
+protected:
+    bool m_bPressed;
+};
+
+
+//-----------------------------------------------------------------------------
+// CheckBox control
+//-----------------------------------------------------------------------------
+class CDXUTCheckBox : public CDXUTButton
+{
+public:
+    CDXUTCheckBox( CDXUTDialog *pDialog = NULL );
+
+    virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam );
+    virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam );
+    virtual void OnHotkey() { if( m_pDialog->IsKeyboardInputEnabled() ) m_pDialog->RequestFocus( this ); SetCheckedInternal( !m_bChecked, true ); }
+
+    virtual BOOL ContainsPoint( POINT pt ); 
+    virtual void UpdateRects(); 
+
+    virtual void Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime );
+
+    bool GetChecked() { return m_bChecked; }
+    void SetChecked( bool bChecked ) { SetCheckedInternal( bChecked, false ); }
+    
+protected:
+    virtual void SetCheckedInternal( bool bChecked, bool bFromInput );
+
+    bool m_bChecked;
+    RECT m_rcButton;
+    RECT m_rcText;
+};
+
+
+//-----------------------------------------------------------------------------
+// RadioButton control
+//-----------------------------------------------------------------------------
+class CDXUTRadioButton : public CDXUTCheckBox
+{
+public:
+    CDXUTRadioButton( CDXUTDialog *pDialog = NULL );
+
+    virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam );
+    virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam );
+    virtual void OnHotkey() { if( m_pDialog->IsKeyboardInputEnabled() ) m_pDialog->RequestFocus( this ); SetCheckedInternal( true, true, true ); }
+    
+    void SetChecked( bool bChecked, bool bClearGroup=true ) { SetCheckedInternal( bChecked, bClearGroup, false ); }
+    void SetButtonGroup( UINT nButtonGroup ) { m_nButtonGroup = nButtonGroup; }
+    UINT GetButtonGroup() { return m_nButtonGroup; }
+    
+protected:
+    virtual void SetCheckedInternal( bool bChecked, bool bClearGroup, bool bFromInput );
+    UINT m_nButtonGroup;
+};
+
+
+//-----------------------------------------------------------------------------
+// Scrollbar control
+//-----------------------------------------------------------------------------
+class CDXUTScrollBar : public CDXUTControl
+{
+public:
+    CDXUTScrollBar( CDXUTDialog *pDialog = NULL );
+    virtual ~CDXUTScrollBar();
+
+    virtual bool    HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam );
+    virtual bool    HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam );
+    virtual bool    MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam );
+
+    virtual void    Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime );
+    virtual void    UpdateRects();
+
+    void SetTrackRange( int nStart, int nEnd );
+    int GetTrackPos() { return m_nPosition; }
+    void SetTrackPos( int nPosition ) { m_nPosition = nPosition; Cap(); UpdateThumbRect(); }
+    int GetPageSize() { return m_nPageSize; }
+    void SetPageSize( int nPageSize ) { m_nPageSize = nPageSize; Cap(); UpdateThumbRect(); }
+
+    void Scroll( int nDelta );    // Scroll by nDelta items (plus or minus)
+    void ShowItem( int nIndex );  // Ensure that item nIndex is displayed, scroll if necessary
+
+protected:
+    // ARROWSTATE indicates the state of the arrow buttons.
+    // CLEAR            No arrow is down.
+    // CLICKED_UP       Up arrow is clicked.
+    // CLICKED_DOWN     Down arrow is clicked.
+    // HELD_UP          Up arrow is held down for sustained period.
+    // HELD_DOWN        Down arrow is held down for sustained period.
+    enum ARROWSTATE { CLEAR, CLICKED_UP, CLICKED_DOWN, HELD_UP, HELD_DOWN };
+
+    void UpdateThumbRect();
+    void Cap();  // Clips position at boundaries. Ensures it stays within legal range.
+
+    bool m_bShowThumb;
+    bool m_bDrag;
+    RECT m_rcUpButton;
+    RECT m_rcDownButton;
+    RECT m_rcTrack;
+    RECT m_rcThumb;
+    int m_nPosition;  // Position of the first displayed item
+    int m_nPageSize;  // How many items are displayable in one page
+    int m_nStart;     // First item
+    int m_nEnd;       // The index after the last item
+    POINT m_LastMouse;// Last mouse position
+    ARROWSTATE m_Arrow; // State of the arrows
+    double m_dArrowTS;  // Timestamp of last arrow event.
+};
+
+
+//-----------------------------------------------------------------------------
+// ListBox control
+//-----------------------------------------------------------------------------
+struct DXUTListBoxItem
+{
+    WCHAR strText[256];
+    void*  pData;
+
+    RECT  rcActive;
+    bool  bSelected;
+};
+
+class CDXUTListBox : public CDXUTControl
+{
+public:
+    CDXUTListBox( CDXUTDialog *pDialog = NULL );
+    virtual ~CDXUTListBox();
+
+    virtual HRESULT OnInit() { return m_pDialog->InitControl( &m_ScrollBar ); }
+    virtual bool    CanHaveFocus() { return (m_bVisible && m_bEnabled); }
+    virtual bool    HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam );
+    virtual bool    HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam );
+    virtual bool    MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam );
+
+    virtual void    Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime );
+    virtual void    UpdateRects();
+
+    DWORD GetStyle() const { return m_dwStyle; }
+    int GetSize() const { return m_Items.GetSize(); }
+    void SetStyle( DWORD dwStyle ) { m_dwStyle = dwStyle; }
+    int  GetScrollBarWidth() const { return m_nSBWidth; }
+    void SetScrollBarWidth( int nWidth ) { m_nSBWidth = nWidth; UpdateRects(); }
+    void SetBorder( int nBorder, int nMargin ) { m_nBorder = nBorder; m_nMargin = nMargin; }
+    HRESULT AddItem( const WCHAR *wszText, void *pData );
+    HRESULT InsertItem( int nIndex, const WCHAR *wszText, void *pData );
+    void RemoveItem( int nIndex );
+    void RemoveItemByText( WCHAR *wszText );
+    void RemoveItemByData( void *pData );
+    void RemoveAllItems();
+
+    DXUTListBoxItem *GetItem( int nIndex );
+    int GetSelectedIndex( int nPreviousSelected = -1 );
+    DXUTListBoxItem *GetSelectedItem( int nPreviousSelected = -1 ) { return GetItem( GetSelectedIndex( nPreviousSelected ) ); }
+    void SelectItem( int nNewIndex );
+
+    enum STYLE { MULTISELECTION = 1 };
+
+protected:
+    RECT m_rcText;      // Text rendering bound
+    RECT m_rcSelection; // Selection box bound
+    CDXUTScrollBar m_ScrollBar;
+    int m_nSBWidth;
+    int m_nBorder;
+    int m_nMargin;
+    int m_nTextHeight;  // Height of a single line of text
+    DWORD m_dwStyle;    // List box style
+    int m_nSelected;    // Index of the selected item for single selection list box
+    int m_nSelStart;    // Index of the item where selection starts (for handling multi-selection)
+    bool m_bDrag;       // Whether the user is dragging the mouse to select
+
+    CGrowableArray< DXUTListBoxItem* > m_Items;
+};
+
+
+//-----------------------------------------------------------------------------
+// ComboBox control
+//-----------------------------------------------------------------------------
+struct DXUTComboBoxItem
+{
+    WCHAR strText[256];
+    void*  pData;
+
+    RECT  rcActive;
+    bool  bVisible;
+};
+
+
+class CDXUTComboBox : public CDXUTButton
+{
+public:
+    CDXUTComboBox( CDXUTDialog *pDialog = NULL );
+    virtual ~CDXUTComboBox();
+    
+    virtual void SetTextColor( D3DCOLOR Color );
+    virtual HRESULT OnInit() { return m_pDialog->InitControl( &m_ScrollBar ); }
+
+    virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam );
+    virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam );
+    virtual void OnHotkey();
+
+    virtual bool CanHaveFocus() { return (m_bVisible && m_bEnabled); }
+    virtual void OnFocusOut();
+    virtual void Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime );
+
+    virtual void UpdateRects(); 
+
+    HRESULT AddItem( const WCHAR* strText, void* pData );
+    void    RemoveAllItems();
+    void    RemoveItem( UINT index );
+    bool    ContainsItem( const WCHAR* strText, UINT iStart=0 );
+    int     FindItem( const WCHAR* strText, UINT iStart=0 );
+    void*   GetItemData( const WCHAR* strText );
+    void*   GetItemData( int nIndex );
+    void    SetDropHeight( UINT nHeight ) { m_nDropHeight = nHeight; UpdateRects(); }
+    int     GetScrollBarWidth() const { return m_nSBWidth; }
+    void    SetScrollBarWidth( int nWidth ) { m_nSBWidth = nWidth; UpdateRects(); }
+
+    void*   GetSelectedData();
+    DXUTComboBoxItem* GetSelectedItem();
+
+    UINT    GetNumItems() { return m_Items.GetSize(); }
+    DXUTComboBoxItem* GetItem( UINT index ) { return m_Items.GetAt( index ); }
+
+    HRESULT SetSelectedByIndex( UINT index );
+    HRESULT SetSelectedByText( const WCHAR* strText );
+    HRESULT SetSelectedByData( void* pData );  
+
+protected:
+    int     m_iSelected;
+    int     m_iFocused;
+    int     m_nDropHeight;
+    CDXUTScrollBar m_ScrollBar;
+    int     m_nSBWidth;
+
+    bool    m_bOpened;
+
+    RECT m_rcText;
+    RECT m_rcButton;
+    RECT m_rcDropdown;
+    RECT m_rcDropdownText;
+
+    
+    CGrowableArray< DXUTComboBoxItem* > m_Items;
+};
+
+
+//-----------------------------------------------------------------------------
+// Slider control
+//-----------------------------------------------------------------------------
+class CDXUTSlider : public CDXUTControl
+{
+public:
+    CDXUTSlider( CDXUTDialog *pDialog = NULL );
+
+    virtual BOOL ContainsPoint( POINT pt ); 
+    virtual bool CanHaveFocus() { return (m_bVisible && m_bEnabled); }
+    virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam );
+    virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam );
+    
+    virtual void UpdateRects(); 
+
+    virtual void Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime );
+
+    void SetValue( int nValue ) { SetValueInternal( nValue, false ); }
+    int  GetValue() const { return m_nValue; };
+
+    void GetRange( int &nMin, int &nMax ) const { nMin = m_nMin; nMax = m_nMax; }
+    void SetRange( int nMin, int nMax );
+
+protected:
+    void SetValueInternal( int nValue, bool bFromInput );
+    int  ValueFromPos( int x ); 
+
+    int m_nValue;
+
+    int m_nMin;
+    int m_nMax;
+
+    int m_nDragX;      // Mouse position at start of drag
+    int m_nDragOffset; // Drag offset from the center of the button
+    int m_nButtonX;
+
+    bool m_bPressed;
+    RECT m_rcButton;
+};
+
+
+//-----------------------------------------------------------------------------
+// CUniBuffer class for the edit control
+//-----------------------------------------------------------------------------
+class CUniBuffer
+{
+public:
+    CUniBuffer( int nInitialSize = 1 );
+    ~CUniBuffer();
+
+    static void Initialize();
+    static void Uninitialize();
+
+    int  GetBufferSize() { return m_nBufferSize; }
+    bool SetBufferSize( int nSize );
+    int  GetTextSize()  { return lstrlenW( m_pwszBuffer ); }
+    const WCHAR* GetBuffer() { return m_pwszBuffer; }
+    const WCHAR& operator[]( int n ) const { return m_pwszBuffer[n]; }
+    WCHAR& operator[]( int n );
+    DXUTFontNode* GetFontNode() { return m_pFontNode; }
+    void SetFontNode( DXUTFontNode *pFontNode ) { m_pFontNode = pFontNode; }
+    void Clear();
+
+    bool InsertChar( int nIndex, WCHAR wChar ); // Inserts the char at specified index. If nIndex == -1, insert to the end.
+    bool RemoveChar( int nIndex );  // Removes the char at specified index. If nIndex == -1, remove the last char.
+    bool InsertString( int nIndex, const WCHAR *pStr, int nCount = -1 );  // Inserts the first nCount characters of the string pStr at specified index.  If nCount == -1, the entire string is inserted. If nIndex == -1, insert to the end.
+    bool SetText( LPCWSTR wszText );
+
+    // Uniscribe
+    HRESULT CPtoX( int nCP, BOOL bTrail, int *pX );
+    HRESULT XtoCP( int nX, int *pCP, int *pnTrail );
+    void GetPriorItemPos( int nCP, int *pPrior );
+    void GetNextItemPos( int nCP, int *pPrior );
+
+private:
+    HRESULT Analyse();      // Uniscribe -- Analyse() analyses the string in the buffer
+
+    WCHAR* m_pwszBuffer;    // Buffer to hold text
+    int    m_nBufferSize;   // Size of the buffer allocated, in characters
+
+    // Uniscribe-specific
+    DXUTFontNode* m_pFontNode;          // Font node for the font that this buffer uses
+    bool m_bAnalyseRequired;            // True if the string has changed since last analysis.
+    SCRIPT_STRING_ANALYSIS m_Analysis;  // Analysis for the current string
+
+private:
+    // Empty implementation of the Uniscribe API
+    static HRESULT WINAPI Dummy_ScriptApplyDigitSubstitution( const SCRIPT_DIGITSUBSTITUTE*, SCRIPT_CONTROL*, SCRIPT_STATE* ) { return E_NOTIMPL; }
+    static HRESULT WINAPI Dummy_ScriptStringAnalyse( HDC, const void *, int, int, int, DWORD, int, SCRIPT_CONTROL*, SCRIPT_STATE*, const int*, SCRIPT_TABDEF*, const BYTE*, SCRIPT_STRING_ANALYSIS* ) { return E_NOTIMPL; }
+    static HRESULT WINAPI Dummy_ScriptStringCPtoX( SCRIPT_STRING_ANALYSIS, int, BOOL, int* ) { return E_NOTIMPL; }
+    static HRESULT WINAPI Dummy_ScriptStringXtoCP( SCRIPT_STRING_ANALYSIS, int, int*, int* ) { return E_NOTIMPL; }
+    static HRESULT WINAPI Dummy_ScriptStringFree( SCRIPT_STRING_ANALYSIS* ) { return E_NOTIMPL; }
+    static const SCRIPT_LOGATTR* WINAPI Dummy_ScriptString_pLogAttr( SCRIPT_STRING_ANALYSIS ) { return NULL; }
+    static const int* WINAPI Dummy_ScriptString_pcOutChars( SCRIPT_STRING_ANALYSIS ) { return NULL; }
+
+    // Function pointers
+    static HRESULT (WINAPI *_ScriptApplyDigitSubstitution)( const SCRIPT_DIGITSUBSTITUTE*, SCRIPT_CONTROL*, SCRIPT_STATE* );
+    static HRESULT (WINAPI *_ScriptStringAnalyse)( HDC, const void *, int, int, int, DWORD, int, SCRIPT_CONTROL*, SCRIPT_STATE*, const int*, SCRIPT_TABDEF*, const BYTE*, SCRIPT_STRING_ANALYSIS* );
+    static HRESULT (WINAPI *_ScriptStringCPtoX)( SCRIPT_STRING_ANALYSIS, int, BOOL, int* );
+    static HRESULT (WINAPI *_ScriptStringXtoCP)( SCRIPT_STRING_ANALYSIS, int, int*, int* );
+    static HRESULT (WINAPI *_ScriptStringFree)( SCRIPT_STRING_ANALYSIS* );
+    static const SCRIPT_LOGATTR* (WINAPI *_ScriptString_pLogAttr)( SCRIPT_STRING_ANALYSIS );
+    static const int* (WINAPI *_ScriptString_pcOutChars)( SCRIPT_STRING_ANALYSIS );
+
+    static HINSTANCE s_hDll;  // Uniscribe DLL handle
+
+};
+
+//-----------------------------------------------------------------------------
+// EditBox control
+//-----------------------------------------------------------------------------
+class CDXUTEditBox : public CDXUTControl
+{
+public:
+    CDXUTEditBox( CDXUTDialog *pDialog = NULL );
+    virtual ~CDXUTEditBox();
+
+    virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam );
+    virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam );
+    virtual bool MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam );
+    virtual void UpdateRects();
+    virtual bool CanHaveFocus() { return (m_bVisible && m_bEnabled); }
+    virtual void Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime );
+    virtual void OnFocusIn();
+
+    void SetText( LPCWSTR wszText, bool bSelected = false );
+    LPCWSTR GetText() { return m_Buffer.GetBuffer(); }
+    int GetTextLength() { return m_Buffer.GetTextSize(); }  // Returns text length in chars excluding NULL.
+    HRESULT GetTextCopy( LPWSTR strDest, UINT bufferCount );
+    void ClearText();
+    virtual void SetTextColor( D3DCOLOR Color ) { m_TextColor = Color; }  // Text color
+    void SetSelectedTextColor( D3DCOLOR Color ) { m_SelTextColor = Color; }  // Selected text color
+    void SetSelectedBackColor( D3DCOLOR Color ) { m_SelBkColor = Color; }  // Selected background color
+    void SetCaretColor( D3DCOLOR Color ) { m_CaretColor = Color; }  // Caret color
+    void SetBorderWidth( int nBorder ) { m_nBorder = nBorder; UpdateRects(); }  // Border of the window
+    void SetSpacing( int nSpacing ) { m_nSpacing = nSpacing; UpdateRects(); }
+    void ParseFloatArray( float *pNumbers, int nCount );
+    void SetTextFloatArray( const float *pNumbers, int nCount );
+
+protected:
+    void PlaceCaret( int nCP );
+    void DeleteSelectionText();
+    void ResetCaretBlink();
+    void CopyToClipboard();
+    void PasteFromClipboard();
+
+    CUniBuffer m_Buffer;     // Buffer to hold text
+    int      m_nBorder;      // Border of the window
+    int      m_nSpacing;     // Spacing between the text and the edge of border
+    RECT     m_rcText;       // Bounding rectangle for the text
+    RECT     m_rcRender[9];  // Convenient rectangles for rendering elements
+    double   m_dfBlink;      // Caret blink time in milliseconds
+    double   m_dfLastBlink;  // Last timestamp of caret blink
+    bool     m_bCaretOn;     // Flag to indicate whether caret is currently visible
+    int      m_nCaret;       // Caret position, in characters
+    bool     m_bInsertMode;  // If true, control is in insert mode. Else, overwrite mode.
+    int      m_nSelStart;    // Starting position of the selection. The caret marks the end.
+    int      m_nFirstVisible;// First visible character in the edit control
+    D3DCOLOR m_TextColor;    // Text color
+    D3DCOLOR m_SelTextColor; // Selected text color
+    D3DCOLOR m_SelBkColor;   // Selected background color
+    D3DCOLOR m_CaretColor;   // Caret color
+
+    // Mouse-specific
+    bool m_bMouseDrag;       // True to indicate drag in progress
+
+    // Static
+    static bool s_bHideCaret;   // If true, we don't render the caret.
+};
+
+
+//-----------------------------------------------------------------------------
+// IME-enabled EditBox control
+//-----------------------------------------------------------------------------
+#define MAX_CANDLIST 10
+#define MAX_COMPSTRING_SIZE 256
+
+class CDXUTIMEEditBox : public CDXUTEditBox
+{
+protected:
+    // Empty implementation of the IMM32 API
+    static INPUTCONTEXT* WINAPI Dummy_ImmLockIMC( HIMC ) { return NULL; }
+    static BOOL WINAPI Dummy_ImmUnlockIMC( HIMC ) { return FALSE; }
+    static LPVOID WINAPI Dummy_ImmLockIMCC( HIMCC ) { return NULL; }
+    static BOOL WINAPI Dummy_ImmUnlockIMCC( HIMCC ) { return FALSE; }
+    static BOOL WINAPI Dummy_ImmDisableTextFrameService( DWORD ) { return TRUE; }
+    static LONG WINAPI Dummy_ImmGetCompositionStringW( HIMC, DWORD, LPVOID, DWORD ) { return IMM_ERROR_GENERAL; }
+    static DWORD WINAPI Dummy_ImmGetCandidateListW( HIMC, DWORD, LPCANDIDATELIST, DWORD ) { return 0; }
+    static HIMC WINAPI Dummy_ImmGetContext( HWND ) { return NULL; }
+    static BOOL WINAPI Dummy_ImmReleaseContext( HWND, HIMC ) { return FALSE; }
+    static HIMC WINAPI Dummy_ImmAssociateContext( HWND, HIMC ) { return NULL; }
+    static BOOL WINAPI Dummy_ImmGetOpenStatus( HIMC ) { return 0; }
+    static BOOL WINAPI Dummy_ImmSetOpenStatus( HIMC, BOOL ) { return 0; }
+    static BOOL WINAPI Dummy_ImmGetConversionStatus( HIMC, LPDWORD, LPDWORD ) { return 0; }
+    static HWND WINAPI Dummy_ImmGetDefaultIMEWnd( HWND ) { return NULL; }
+    static UINT WINAPI Dummy_ImmGetIMEFileNameA( HKL, LPSTR, UINT ) { return 0; }
+    static UINT WINAPI Dummy_ImmGetVirtualKey( HWND ) { return 0; }
+    static BOOL WINAPI Dummy_ImmNotifyIME( HIMC, DWORD, DWORD, DWORD ) { return FALSE; }
+    static BOOL WINAPI Dummy_ImmSetConversionStatus( HIMC, DWORD, DWORD ) { return FALSE; }
+    static BOOL WINAPI Dummy_ImmSimulateHotKey( HWND, DWORD ) { return FALSE; }
+    static BOOL WINAPI Dummy_ImmIsIME( HKL ) { return FALSE; }
+
+    // Traditional Chinese IME
+    static UINT WINAPI Dummy_GetReadingString( HIMC, UINT, LPWSTR, PINT, BOOL*, PUINT ) { return 0; }
+    static BOOL WINAPI Dummy_ShowReadingWindow( HIMC, BOOL ) { return FALSE; }
+
+    // Verion library imports
+    static BOOL APIENTRY Dummy_VerQueryValueA( const LPVOID, LPSTR, LPVOID *, PUINT ) { return 0; }
+    static BOOL APIENTRY Dummy_GetFileVersionInfoA( LPSTR, DWORD, DWORD, LPVOID ) { return 0; }
+    static DWORD APIENTRY Dummy_GetFileVersionInfoSizeA( LPSTR, LPDWORD ) { return 0; }
+
+    // Function pointers: IMM32
+    static INPUTCONTEXT* (WINAPI * _ImmLockIMC)( HIMC );
+    static BOOL (WINAPI * _ImmUnlockIMC)( HIMC );
+    static LPVOID (WINAPI * _ImmLockIMCC)( HIMCC );
+    static BOOL (WINAPI * _ImmUnlockIMCC)( HIMCC );
+    static BOOL (WINAPI * _ImmDisableTextFrameService)( DWORD );
+    static LONG (WINAPI * _ImmGetCompositionStringW)( HIMC, DWORD, LPVOID, DWORD );
+    static DWORD (WINAPI * _ImmGetCandidateListW)( HIMC, DWORD, LPCANDIDATELIST, DWORD );
+    static HIMC (WINAPI * _ImmGetContext)( HWND );
+    static BOOL (WINAPI * _ImmReleaseContext)( HWND, HIMC );
+    static HIMC (WINAPI * _ImmAssociateContext)( HWND, HIMC );
+    static BOOL (WINAPI * _ImmGetOpenStatus)( HIMC );
+    static BOOL (WINAPI * _ImmSetOpenStatus)( HIMC, BOOL );
+    static BOOL (WINAPI * _ImmGetConversionStatus)( HIMC, LPDWORD, LPDWORD );
+    static HWND (WINAPI * _ImmGetDefaultIMEWnd)( HWND );
+    static UINT (WINAPI * _ImmGetIMEFileNameA)( HKL, LPSTR, UINT );
+    static UINT (WINAPI * _ImmGetVirtualKey)( HWND );
+    static BOOL (WINAPI * _ImmNotifyIME)( HIMC, DWORD, DWORD, DWORD );
+    static BOOL (WINAPI * _ImmSetConversionStatus)( HIMC, DWORD, DWORD );
+    static BOOL (WINAPI * _ImmSimulateHotKey)( HWND, DWORD );
+    static BOOL (WINAPI * _ImmIsIME)( HKL );
+
+    // Function pointers: Traditional Chinese IME
+    static UINT (WINAPI * _GetReadingString)( HIMC, UINT, LPWSTR, PINT, BOOL*, PUINT );
+    static BOOL (WINAPI * _ShowReadingWindow)( HIMC, BOOL );
+
+    // Function pointers: Verion library imports
+    static BOOL (APIENTRY * _VerQueryValueA)( const LPVOID, LPSTR, LPVOID *, PUINT );
+    static BOOL (APIENTRY * _GetFileVersionInfoA)( LPSTR, DWORD, DWORD, LPVOID );
+    static DWORD (APIENTRY * _GetFileVersionInfoSizeA)( LPSTR, LPDWORD );
+
+public:
+    CDXUTIMEEditBox( CDXUTDialog *pDialog = NULL );
+    virtual ~CDXUTIMEEditBox();
+
+    static void Initialize();
+    static void Uninitialize();
+
+    static  HRESULT StaticOnCreateDevice();
+    static  bool StaticMsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam );
+
+    static  void EnableImeSystem( bool bEnable );
+
+    virtual void Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime );
+    virtual bool MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam );
+    virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam );
+    virtual void UpdateRects();
+    virtual void OnFocusIn();
+    virtual void OnFocusOut();
+
+    void PumpMessage();
+
+    virtual void RenderCandidateReadingWindow( IDirect3DDevice9* pd3dDevice, float fElapsedTime, bool bReading );
+    virtual void RenderComposition( IDirect3DDevice9* pd3dDevice, float fElapsedTime );
+    virtual void RenderIndicator( IDirect3DDevice9* pd3dDevice, float fElapsedTime );
+
+protected:
+    static WORD GetLanguage() { return LOWORD( s_hklCurrent ); }
+    static WORD GetPrimaryLanguage() { return PRIMARYLANGID( LOWORD( s_hklCurrent ) ); }
+    static WORD GetSubLanguage() { return SUBLANGID( LOWORD( s_hklCurrent ) ); }
+    static void SendKey( BYTE nVirtKey );
+    static DWORD GetImeId( UINT uIndex = 0 );
+    static void CheckInputLocale();
+    static void CheckToggleState();
+    static void SetupImeApi();
+    static void ResetCompositionString();
+    void TruncateCompString( bool bUseBackSpace = true, int iNewStrLen = 0 );
+    void FinalizeString( bool bSend );
+    static void GetReadingWindowOrientation( DWORD dwId );
+    static void GetPrivateReadingString();
+
+    void SendCompString();
+
+protected:
+    enum { INDICATOR_NON_IME, INDICATOR_CHS, INDICATOR_CHT, INDICATOR_KOREAN, INDICATOR_JAPANESE };
+    enum IMESTATE { IMEUI_STATE_OFF, IMEUI_STATE_ON, IMEUI_STATE_ENGLISH };
+
+    struct CCandList
+    {
+        WCHAR awszCandidate[MAX_CANDLIST][256];
+        CUniBuffer HoriCand; // Candidate list string (for horizontal candidate window)
+        int   nFirstSelected; // First character position of the selected string in HoriCand
+        int   nHoriSelectedLen; // Length of the selected string in HoriCand
+        DWORD dwCount;       // Number of valid entries in the candidate list
+        DWORD dwSelection;   // Currently selected candidate entry relative to page top
+        DWORD dwPageSize;
+        int   nReadingError; // Index of the error character
+        bool  bShowWindow;   // Whether the candidate list window is visible
+        RECT  rcCandidate;   // Candidate rectangle computed and filled each time before rendered
+    };
+
+    struct CInputLocale
+    {
+        HKL   m_hKL;            // Keyboard layout
+        WCHAR m_wszLangAbb[3];  // Language abbreviation
+        WCHAR m_wszLang[64];    // Localized language name
+    };
+
+    // Application-wide data
+    static HINSTANCE s_hDllImm32;         // IMM32 DLL handle
+    static HINSTANCE s_hDllVer;           // Version DLL handle
+    static HIMC      s_hImcDef;           // Default input context
+
+    static HKL     s_hklCurrent;          // Current keyboard layout of the process
+    static bool    s_bVerticalCand;       // Indicates that the candidates are listed vertically
+    static LPWSTR  s_wszCurrIndicator;    // Points to an indicator string that corresponds to current input locale
+    static WCHAR   s_aszIndicator[5][3];  // String to draw to indicate current input locale
+    static bool    s_bInsertOnType;       // Insert the character as soon as a key is pressed (Korean behavior)
+    static HINSTANCE s_hDllIme;           // Instance handle of the current IME module
+    static IMESTATE  s_ImeState;          // IME global state
+    static bool    s_bEnableImeSystem;    // Whether the IME system is active
+    static POINT   s_ptCompString;        // Composition string position. Updated every frame.
+    static int     s_nCompCaret;          // Caret position of the composition string
+    static int     s_nFirstTargetConv;    // Index of the first target converted char in comp string.  If none, -1.
+    static CUniBuffer s_CompString;       // Buffer to hold the composition string (we fix its length)
+    static BYTE    s_abCompStringAttr[MAX_COMPSTRING_SIZE];
+    static DWORD   s_adwCompStringClause[MAX_COMPSTRING_SIZE];
+    static WCHAR   s_wszReadingString[32];// Used only with horizontal reading window (why?)
+    static CCandList s_CandList;          // Data relevant to the candidate list
+    static bool    s_bShowReadingWindow;  // Indicates whether reading window is visible
+    static bool    s_bHorizontalReading;  // Indicates whether the reading window is vertical or horizontal
+    static bool    s_bChineseIME;
+    static CGrowableArray< CInputLocale > s_Locale; // Array of loaded keyboard layout on system
+
+    // Color of various IME elements
+    D3DCOLOR       m_ReadingColor;        // Reading string color
+    D3DCOLOR       m_ReadingWinColor;     // Reading window color
+    D3DCOLOR       m_ReadingSelColor;     // Selected character in reading string
+    D3DCOLOR       m_ReadingSelBkColor;   // Background color for selected char in reading str
+    D3DCOLOR       m_CandidateColor;      // Candidate string color
+    D3DCOLOR       m_CandidateWinColor;   // Candidate window color
+    D3DCOLOR       m_CandidateSelColor;   // Selected candidate string color
+    D3DCOLOR       m_CandidateSelBkColor; // Selected candidate background color
+    D3DCOLOR       m_CompColor;           // Composition string color
+    D3DCOLOR       m_CompWinColor;        // Composition string window color
+    D3DCOLOR       m_CompCaretColor;      // Composition string caret color
+    D3DCOLOR       m_CompTargetColor;     // Composition string target converted color
+    D3DCOLOR       m_CompTargetBkColor;   // Composition string target converted background
+    D3DCOLOR       m_CompTargetNonColor;  // Composition string target non-converted color
+    D3DCOLOR       m_CompTargetNonBkColor;// Composition string target non-converted background
+    D3DCOLOR       m_IndicatorImeColor;   // Indicator text color for IME
+    D3DCOLOR       m_IndicatorEngColor;   // Indicator text color for English
+    D3DCOLOR       m_IndicatorBkColor;    // Indicator text background color
+
+    // Edit-control-specific data
+    int            m_nIndicatorWidth;     // Width of the indicator symbol
+    RECT           m_rcIndicator;         // Rectangle for drawing the indicator button
+
+#if defined(DEBUG) || defined(_DEBUG)
+    static bool    m_bIMEStaticMsgProcCalled;
+#endif
+};
+
+
+
+#endif // DXUT_GUI_H
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTRes.cpp
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTRes.cpp	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTRes.cpp	(revision 761)
@@ -0,0 +1,8299 @@
+//----------------------------------------------------------------------------
+// File: DXUTRes.cpp
+//
+// Copyright (c) Microsoft Corp. All rights reserved.
+//-----------------------------------------------------------------------------
+#include "dxstdafx.h"
+
+static const DWORD g_DXUTGUITextureSrcData[] =
+{
+	0x20534444, 0x0000007c, 0x00001007, 0x00000100, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000020, 0x00000041, 0x00000000, 0x00000020, 0x000000ff, 
+	0x0000ff00, 0x00ff0000, 0xff000000, 0x00001002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000400, 0x11000400, 0x11000400, 0x11000400, 
+	0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, 0x11000400, 
+	0x11000000, 0x00000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000400, 0x22000400, 0x22000400, 0x22000400, 
+	0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, 0x22000400, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x22000000, 0x33000000, 0x44000000, 
+	0x44000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x66000000, 0x66000000, 
+	0x66000400, 0x66000400, 0x66000400, 0x66000400, 0x66000000, 0x66000000, 0x661e1e1e, 0x771e1e1e, 
+	0x771e1c1e, 0x771e1c1e, 0x771e1c1e, 0x771e1c1e, 0x771e1e1e, 0x771e1e1e, 0x771e1e1e, 0x771e1e1e, 
+	0x771e1c1e, 0x881e1c1e, 0x881e1c1e, 0x881e1c1e, 0x88373937, 0x88373937, 0x881b1c1b, 0x881b1c1b, 
+	0x881e201e, 0x881e201e, 0x881e201e, 0x881e201e, 0x88313631, 0x88313631, 0x88313631, 0x88191b19, 
+	0x881b1f1b, 0x881b1f1b, 0x881b1f1b, 0x881b1f1b, 0x881b1e1b, 0x881b1e1b, 0x881b1e1b, 0x88373737, 
+	0x88313331, 0x88313331, 0x88313331, 0x88313331, 0x881b1f1b, 0x881b1f1b, 0x881b1f1b, 0x881b1f1b, 
+	0x881b1f1b, 0x881b1f1b, 0x881b1f1b, 0x881b1f1b, 0x88191e19, 0x88191e19, 0x88191e19, 0x77191e19, 
+	0x77191a19, 0x77191a19, 0x77191a19, 0x77191a19, 0x77191719, 0x77191719, 0x77191719, 0x66191719, 
+	0x66161616, 0x66161616, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 
+	0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x44000000, 0x44000000, 
+	0x44000000, 0x33000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000400, 0x22000400, 0x22000400, 0x333c413c, 0x443c3d3f, 0x443c3d3f, 0x443c3d3f, 0x553c3d3f, 
+	0x66454145, 0x77454145, 0x77454145, 0x88817d81, 0x99797779, 0x99797779, 0x99797779, 0x99797779, 
+	0x99797979, 0xaa797979, 0xaa797979, 0xaa797979, 0xbb7e7c7e, 0xcc7e7c7e, 0xbb7e7c7e, 0xbb7e7c7e, 
+	0xbb7e7f7e, 0xbb7e7f7e, 0xcc7e7f7e, 0xcc7e7f7e, 0xcc7e7f7e, 0xcc7e7f7e, 0xcc7e7f7e, 0xcc7e7f7e, 
+	0xbb7e7c7e, 0xcc7c7b7d, 0xcc7a7879, 0xbb707071, 0xbb686869, 0xbb5d6060, 0xbb565858, 0xbb4d4f4c, 
+	0xcc454745, 0xcc3c3b3e, 0x77383838, 0x55393837, 0x55373737, 0x44373737, 0x33373737, 0x33373937, 
+	0x22000400, 0x22000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 
+	0x22000000, 0x33000000, 0x44000000, 0x55000000, 0x55030303, 0x66030303, 0x66050505, 0x66080808, 
+	0x66101010, 0x77212021, 0x77212021, 0x77313131, 0x88373637, 0x88373637, 0x99525152, 0x99525152, 
+	0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, 
+	0x995a555a, 0x995a555a, 0x995a555a, 0x995a555a, 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, 
+	0x995a555a, 0x995a555a, 0x995a555a, 0x995a555a, 0x99525552, 0x99525552, 0x99525552, 0x99525552, 
+	0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, 0x994a514a, 0x994a514a, 0x994a514a, 0x994a514a, 
+	0x99525552, 0x99525552, 0x99525552, 0x99525552, 0x99525152, 0x99525152, 0x99525152, 0x99525152, 
+	0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x99525552, 0x99525552, 0x99525552, 0x99525552, 
+	0x99525552, 0x99525552, 0x99525552, 0x99525552, 0x994a514a, 0x994a514a, 0x994a514a, 0x994a514a, 
+	0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x994a454a, 0x994a454a, 0x994a454a, 0x994a454a, 
+	0x99424142, 0x99424142, 0x99424142, 0x99424142, 0x99424142, 0x99424142, 0x99424142, 0x992c2b2c, 
+	0x88293129, 0x881b201b, 0x771b201b, 0x771b201b, 0x66101010, 0x66101010, 0x660b0b0b, 0x66050505, 
+	0x66000400, 0x66000100, 0x55000100, 0x55000000, 0x55000000, 0x44000000, 0x33000000, 0x22000000, 
+	0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080708, 0x11100d10, 0x11100d10, 0x22191419, 
+	0x33212324, 0x55424647, 0x66424647, 0x8863696b, 0x99737473, 0xbb737473, 0xccadaead, 0xeeadaead, 
+	0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5b6bd, 0xffb5b6bd, 0xffb5b6bd, 0xffb5b6bd, 
+	0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 
+	0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 
+	0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 
+	0xffbdbabd, 0xffbcbabd, 0xffbcb8bc, 0xffb6b2b6, 0xffb3afb3, 0xffb0aeaf, 0xffadabaa, 0xffaaa9aa, 
+	0xffa9a7a8, 0xffa7a7a7, 0xffa6a6a6, 0xffa6a6a5, 0xffa6a6a5, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a2a5, 
+	0xffa5a2a5, 0xffa5a2a5, 0xeea5a2a5, 0xdd9c9a9c, 0xcc9c9a9c, 0xaa686768, 0x99686768, 0x885a5d5a, 
+	0x553c3e3c, 0x443c3e3c, 0x331e1f1e, 0x11101010, 0x11101010, 0x110b0b0b, 0x00050505, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000400, 0x33000400, 0x44000400, 0x55000400, 
+	0x66080808, 0x66080808, 0x663a3a3a, 0x773a3a3a, 0x885a5d5a, 0x886b6f6e, 0x996b6f6e, 0x997b8081, 
+	0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99797879, 0x99737173, 0x99737173, 0x99737173, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x996b716b, 0x99737773, 0x996b716b, 0x996b716b, 
+	0x99737173, 0x99797779, 0x99737173, 0x99737173, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 
+	0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 
+	0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 
+	0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x99636563, 0x99636563, 0x99636563, 0x99636563, 
+	0x99636163, 0x99636163, 0x99636163, 0x99636163, 0x995a5d5a, 0x995a5d5a, 0x995a5d5a, 0x995a5d5a, 
+	0x995a5552, 0x995a5552, 0x995a5552, 0x995a5552, 0x994a4d50, 0x994a4d50, 0x994a4d50, 0x9931353a, 
+	0x88313331, 0x88313331, 0x77101010, 0x66101010, 0x66080408, 0x66080408, 0x66080408, 0x55080408, 
+	0x55000000, 0x44000000, 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11191819, 0x22191819, 0x33191819, 0x66656465, 0x887b7d7b, 0xbba2a5a5, 0xddc8ccce, 0xffc8ccce, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 
+	0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 
+	0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 
+	0xffd6d2d6, 0xffd9d8d9, 0xffd6d2d6, 0xffd6d2d6, 0xffd6cece, 0xffcfcccc, 0xffc8c7c8, 0xffc6c2c3, 
+	0xffc4c0c2, 0xffc2c0c2, 0xffc5c2c4, 0xffc4c2c5, 0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, 0xffbdbebd, 
+	0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffa5a6a5, 
+	0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, 0xee868a86, 0xdd868a86, 0xaa868a86, 0x885a615a, 0x55505250, 
+	0x33101410, 0x11101410, 0x11101410, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x11000000, 0x44000000, 0x55000400, 0x66000400, 0x77343634, 0x77686868, 
+	0x886b6c6b, 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x998c9294, 0x998c9294, 0x998c9294, 0x998c9294, 
+	0x998c8e8c, 0x99868786, 0x99868786, 0x99868786, 0x99848384, 0x99848384, 0x99848384, 0x99848384, 
+	0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x997e7f7e, 
+	0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x997e7c7e, 0x99848284, 
+	0x9984827b, 0x9984827b, 0x9984827b, 0x9984827b, 0x99848284, 0x99848284, 0x99848284, 0x997e7c7e, 
+	0x99848284, 0x997e7c7e, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x997b7c7b, 
+	0x997e7c7e, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x997b7b7b, 0x99848284, 0x99848284, 
+	0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 
+	0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99767776, 
+	0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99737373, 0x997b797b, 
+	0x99737473, 0x99737473, 0x99737473, 0x99737473, 0x997b797b, 0x997b797b, 0x997b797b, 0x99707070, 
+	0x9970706e, 0x9970706e, 0x9970706e, 0x9970706e, 0x99636565, 0x99636565, 0x99636565, 0x99636565, 
+	0x99525652, 0x99525652, 0x99525652, 0x99525652, 0x99504d50, 0x882c282c, 0x772c282c, 0x77080408, 
+	0x66000000, 0x66000000, 0x55000000, 0x55000000, 0x44000000, 0x22000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x11000000, 0x33525452, 0x77525452, 
+	0xaab2afb2, 0xddfffbff, 0xfffffbff, 0xfffffbff, 0xffeff3f7, 0xffeff3f7, 0xffeff3f7, 0xffeff3f7, 
+	0xffefefef, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 
+	0xffe1e4e1, 0xffe1e4e1, 0xffe1e4e1, 0xffe1e4e1, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe1e1e1, 
+	0xffe6e1e6, 0xffe6e1e6, 0xffe6e1e6, 0xffe6e1e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 
+	0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe1dde1, 
+	0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 
+	0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3dd, 0xffdee3dd, 0xffdee1de, 0xffdee0db, 
+	0xffdedbd9, 0xffe2dddc, 0xffdbd9db, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd3d4d3, 
+	0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffcbc9cb, 
+	0xffcbc9cb, 0xffcbc9cb, 0xffcbc9cb, 0xffb2b2b2, 0xffb2b2b2, 0xffb2b2b2, 0xffb2b2b2, 0xff8f908f, 
+	0xff8f908f, 0xbb8f908f, 0x88505250, 0x663c3d3c, 0x333c3d3c, 0x11000000, 0x00000000, 0x00000400, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11000000, 0x44000000, 0x55000000, 0x77343234, 0x77686868, 0x999c9a9c, 0x999c9a9c, 0x999c9a9c, 
+	0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x998c9294, 0x998c9294, 0x998c9294, 0x998c9294, 
+	0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 
+	0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x997e7f7e, 0x99848684, 
+	0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 
+	0x9984827b, 0x9984827b, 0x9984827b, 0x9984827b, 0x99848284, 0x99848284, 0x997e7c7e, 0x997e7c7e, 
+	0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x997b7c7b, 0x997b7c7b, 
+	0x99848284, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x99848284, 0x99848284, 0x997b7b7b, 0x997b7b7b, 
+	0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 
+	0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 
+	0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 
+	0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 
+	0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 
+	0x99737973, 0x99737973, 0x99737973, 0x99737973, 0x99737173, 0x99737173, 0x99504d50, 0x99504d50, 
+	0x88424142, 0x88212021, 0x77212021, 0x66000000, 0x55000000, 0x55000000, 0x44000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000400, 0x00000400, 0x00000400, 0x22000400, 0x66525452, 0xaaa5a7a5, 0xeef7fbf7, 0xfff7fbf7, 
+	0xfffffbff, 0xfffffbff, 0xfffffbff, 0xfffffbff, 0xffeff3f7, 0xffeff3f7, 0xffeff3f7, 0xffeff3f7, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe1e4e1, 0xffe1e4e1, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 
+	0xffe6e1e6, 0xffe6e1e6, 0xffe6e1e6, 0xffefe7ef, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 
+	0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffe6e3e6, 0xffe6e3e6, 0xffe1dde1, 0xffe6e3e6, 
+	0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffe6e3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 
+	0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdee3de, 
+	0xffe5e2df, 0xffe1e0dd, 0xffdcdbdc, 0xffdddfe0, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 
+	0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffb5b6b5, 0xdd797979, 0xaa797979, 0x663c3d3c, 0x22000400, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000000, 
+	0x55000000, 0x77343234, 0x88686468, 0x999c969c, 0x999c9a9c, 0x999c9a9c, 0x999c9a9c, 0x999c9a9c, 
+	0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x998c9294, 0x998c9294, 0x998c9294, 0x998c9294, 
+	0x99868786, 0x99868786, 0x99868786, 0x99868786, 0x99848384, 0x99848384, 0x99848384, 0x99848384, 
+	0x997e807e, 0x997e807e, 0x997e807e, 0x997e807e, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 
+	0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 
+	0x997e7c79, 0x997e7c79, 0x997e7c79, 0x99797776, 0x99797779, 0x99797779, 0x997e7c7e, 0x997e7c7e, 
+	0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997b7c7b, 0x997b7c7b, 0x99737773, 0x997b7c7b, 
+	0x99797779, 0x997e7c7e, 0x99797779, 0x997e7c7e, 0x997b7b7b, 0x997b7b7b, 0x997b7b7b, 0x997b7b7b, 
+	0x99767876, 0x99767876, 0x99767876, 0x99767876, 0x99767876, 0x99767876, 0x99767876, 0x99767876, 
+	0x99767776, 0x997b7d7b, 0x997b7d7b, 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99767776, 
+	0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 
+	0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 
+	0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 
+	0x99737973, 0x99737973, 0x99737973, 0x99737973, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 
+	0x99636163, 0x99636163, 0x99424142, 0x88212021, 0x77191419, 0x66000000, 0x55000000, 0x55000000, 
+	0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000400, 0x11000400, 0x66797b79, 0xccb5b6b5, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 
+	0xfffffbff, 0xfffffbff, 0xfffffbff, 0xfffffbff, 0xffeff3f7, 0xffeff3f7, 0xffeff3f7, 0xffeff3f7, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 
+	0xffe1e4e1, 0xffe1e4e1, 0xffe1e4e1, 0xffdbdddb, 0xffe1e1e1, 0xffe1e1e1, 0xffdbdcdb, 0xffe1e1e1, 
+	0xffdedcde, 0xffdedcde, 0xffdedcde, 0xffdedcde, 0xffe1dde1, 0xffe1dde1, 0xffe1dde1, 0xffe1dde1, 
+	0xffe1dddb, 0xffe1dddb, 0xffe1dddb, 0xffe1dddb, 0xffe1dde1, 0xffe1dde1, 0xffe1dde1, 0xffe1dde1, 
+	0xffe1dddb, 0xffe1dddb, 0xffe1dddb, 0xffe1dddb, 0xffdbdddb, 0xffdbdddb, 0xffdbdddb, 0xffdbdddb, 
+	0xffdbdddb, 0xffdbdddb, 0xffdbdddb, 0xffdbdddb, 0xffdbdcd9, 0xffdbdcd9, 0xffdcdcda, 0xffdcdbda, 
+	0xffdddadb, 0xffddd9dc, 0xffdad8d9, 0xffd7dadb, 0xffdbdddc, 0xffdddfdd, 0xffdedfde, 0xffdedfde, 
+	0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xbb737973, 
+	0x664d524d, 0x11000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080808, 0x00080808, 0x33080808, 0x66080808, 
+	0x8852555a, 0x99848686, 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 0x999c9e9c, 
+	0x99949294, 0x99949294, 0x99949294, 0x99898889, 0x998c8684, 0x998c8684, 0x998c8684, 0x9984807e, 
+	0x99848284, 0x99848284, 0x99848284, 0x997b7b7e, 0x997b7d7b, 0x997b7d7b, 0x99767876, 0x99767876, 
+	0x997b797b, 0x997b797b, 0x99767576, 0x99767576, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737473, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99767570, 0x99767570, 0x997b7973, 0x99767570, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99767576, 0x99767576, 0x997b797b, 0x997b797b, 
+	0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 
+	0x997b7973, 0x9973706e, 0x996b6768, 0x99635d63, 0x994a4a4a, 0x77292b29, 0x66080c08, 0x66080c08, 
+	0x66000000, 0x33000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x333a393a, 0xbbb2b2b2, 0xeeefefef, 0xffefefef, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xfff7f7f7, 0xfff7f7f7, 0xffececec, 0xffececec, 0xffefebe6, 0xffefebe6, 0xffe6e4e1, 0xffe6e4e1, 
+	0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffdedce1, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd3d7d3, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd3d7d3, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d6d6, 0xffd8d7d6, 
+	0xffd8d6d7, 0xffd8d3d6, 0xffd8d3d7, 0xffd9d4d8, 0xffd9d6d9, 0xffd8d7d7, 0xffd6d7d6, 0xffd3d7d3, 
+	0xffd3d7d3, 0xffd3d7d3, 0xffd6dbd6, 0xffd3d7d3, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbde, 
+	0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 
+	0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffd6dbd6, 0xffd0d1ce, 0xffd0d1ce, 0xffc5bebd, 0xffc5c6c5, 
+	0xee9a9797, 0xaa6e6868, 0x3342393a, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080808, 0x33080808, 0x66080808, 0x885a595a, 
+	0x99848686, 0x99848686, 0x999c9e9c, 0x999c9e9c, 0x99919291, 0x99919291, 0x99919291, 0x99919291, 
+	0x99898889, 0x99898889, 0x99898889, 0x997e7f7e, 0x9984807e, 0x997b7b79, 0x997b7b79, 0x997b7b79, 
+	0x997b7b7e, 0x997b7b7e, 0x997b7b7e, 0x99737479, 0x99767876, 0x99767876, 0x99707370, 0x99707370, 
+	0x99767576, 0x99767576, 0x99767576, 0x99767576, 0x99737573, 0x99737573, 0x99737573, 0x99707370, 
+	0x99707370, 0x99707370, 0x99707370, 0x99707370, 0x99707370, 0x99707370, 0x99707370, 0x99707370, 
+	0x996e706e, 0x99707370, 0x99707370, 0x996e706e, 0x99707370, 0x99707370, 0x99707370, 0x996e706e, 
+	0x996e706e, 0x996e706e, 0x996e706e, 0x996e706e, 0x99707370, 0x996e706e, 0x99707370, 0x99707370, 
+	0x99737173, 0x99737473, 0x99737373, 0x99737173, 0x99737370, 0x99737370, 0x99737370, 0x99737370, 
+	0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737373, 
+	0x9970716e, 0x99767570, 0x99767570, 0x99767570, 0x99737573, 0x99737370, 0x99737370, 0x99737370, 
+	0x99737370, 0x99737573, 0x99737370, 0x99737370, 0x99707370, 0x99707370, 0x99707370, 0x99707370, 
+	0x99707373, 0x99707373, 0x99707373, 0x99707373, 0x99707370, 0x99707370, 0x99707370, 0x99707370, 
+	0x99707370, 0x99707370, 0x99707370, 0x99707370, 0x99767576, 0x99767576, 0x99767576, 0x99767576, 
+	0x99767576, 0x99767576, 0x99767576, 0x99767576, 0x99767876, 0x99767876, 0x99767876, 0x99767876, 
+	0x997b7973, 0x997b7973, 0x997b7973, 0x9973706e, 0x996b696b, 0x994a4a4a, 0x88292b29, 0x77080c08, 
+	0x66000000, 0x66000000, 0x33000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x55474847, 
+	0xddb2b2b2, 0xffefefef, 0xffefefef, 0xffefefef, 0xfff4f3f4, 0xfff4f3f4, 0xfff4f3f4, 0xfff4f3f4, 
+	0xffececec, 0xffececec, 0xffe1e1e1, 0xffe1e1e1, 0xffe6e4e1, 0xffdedddb, 0xffdedddb, 0xffdedddb, 
+	0xffdedce1, 0xffdedce1, 0xffdedce1, 0xffd6d5db, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd3d4d3, 
+	0xffd9d7d9, 0xffd9d7d9, 0xffd9d7d9, 0xffd9d7d9, 0xffd3d7d3, 0xffd3d7d3, 0xffd3d7d3, 0xffd3d7d3, 
+	0xffd3d7d3, 0xffd3d7d3, 0xffd3d7d3, 0xffd0d2d0, 0xffd3d7d3, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 
+	0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 
+	0xffd3d4d3, 0xffd0d1d0, 0xffd3d4d3, 0xffd0d1d0, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 
+	0xffd0d4d0, 0xffd3d5d3, 0xffd0d4d0, 0xffd3d5d3, 0xffd6d4d3, 0xffd6d4d3, 0xffd6d4d3, 0xffd7d4d4, 
+	0xffd6d2d3, 0xffd5cfd3, 0xffd5d0d4, 0xffd5d3d4, 0xffd5d5d4, 0xffd2d5d3, 0xffd3d4d3, 0xffd3d7d3, 
+	0xffd3d7d3, 0xffd3d7d3, 0xffd3d7d3, 0xffd0d2d0, 0xffd3d7d3, 0xffd3d7d3, 0xffd0d2d0, 0xffd3d7d9, 
+	0xffd3d7d9, 0xffd3d7d9, 0xffd3d7d9, 0xffd3d4d3, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 
+	0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd0d1ce, 0xffc5c6c5, 
+	0xffc5c6c5, 0xff9a9797, 0xcc9a9797, 0x55313231, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33080808, 0x66080808, 0x995a595a, 0x99848284, 
+	0x99848686, 0x99848686, 0x99848686, 0x99848686, 0x99919291, 0x99868686, 0x99868686, 0x99868686, 
+	0x997e7f7e, 0x997e7f7e, 0x99737573, 0x99737573, 0x997b7b79, 0x997b7b79, 0x99737573, 0x99737573, 
+	0x99737479, 0x99737479, 0x99737479, 0x99737479, 0x99707370, 0x99707370, 0x99707370, 0x99707370, 
+	0x99707170, 0x99707170, 0x99707170, 0x996b6d6b, 0x996e706e, 0x996e706e, 0x996e706e, 0x996b6d6b, 
+	0x996e706e, 0x996e706e, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 
+	0x996b6d6b, 0x996e706e, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 
+	0x996e706e, 0x996e706e, 0x996e706e, 0x996b6d6b, 0x996e706e, 0x996e706e, 0x996e706e, 0x996e706e, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x9973706e, 0x9973706e, 0x9973706e, 0x9973706e, 
+	0x99737073, 0x99737073, 0x99737073, 0x99737373, 0x99737373, 0x99737073, 0x99737073, 0x99737073, 
+	0x9970716e, 0x9970716e, 0x9970716e, 0x9970716e, 0x9973706e, 0x99737370, 0x9973706e, 0x9973706e, 
+	0x9973706e, 0x9973706e, 0x99737370, 0x99737370, 0x99707370, 0x99707370, 0x996e706e, 0x996e706e, 
+	0x996e7073, 0x996e7073, 0x996e7073, 0x996e7073, 0x996e706e, 0x996e706e, 0x996e706e, 0x996e706e, 
+	0x996e706e, 0x996e706e, 0x996e706e, 0x996e706e, 0x99707170, 0x99707170, 0x99707170, 0x99707170, 
+	0x99707170, 0x99707170, 0x99707170, 0x99707170, 0x99707370, 0x99707370, 0x99707370, 0x99707370, 
+	0x997b7973, 0x9973706e, 0x9973706e, 0x9973706e, 0x996b696b, 0x996b696b, 0x994a4a4a, 0x99292b29, 
+	0x66101010, 0x66000000, 0x66000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x66474847, 0xeed6d7d6, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xfff4f3f4, 0xffe9e7e9, 0xffe9e7e9, 0xffe9e7e9, 
+	0xffe1e1e1, 0xffe1e1e1, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d5db, 0xffd6d5db, 0xffd6d5db, 0xffd6d5db, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 
+	0xffd3d2d3, 0xffd3d2d3, 0xffd3d2d3, 0xffcecece, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffcecece, 
+	0xffd0d2d0, 0xffd0d2d0, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 
+	0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd3d4d3, 0xffd0d1d0, 0xffd0d1d0, 
+	0xffced2ce, 0xffd0d4d0, 0xffd0d4d0, 0xffced2ce, 0xffd6d1d0, 0xffd6d1d0, 0xffd6d4d3, 0xffd6d2d2, 
+	0xffd6d2d3, 0xffd4d0d2, 0xffd4d0d3, 0xffd5d2d5, 0xffd6d3d6, 0xffd5d4d5, 0xffd3d4d3, 0xffd0d2d0, 
+	0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d3, 
+	0xffd0d2d3, 0xffd0d2d3, 0xffd0d2d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 
+	0xffd3d4d3, 0xffd9d9d9, 0xffd9d9d9, 0xffd6dbd6, 0xffd0d1ce, 0xffd0d1ce, 0xffd0d1ce, 0xffc5c6c5, 
+	0xffc5c6c5, 0xffc5c6c5, 0xff9a9797, 0xdd949694, 0x44313231, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x66080808, 0x995a595a, 0x99848284, 0x99848284, 
+	0x99848686, 0x99848686, 0x99848686, 0x99848686, 0x99868686, 0x99868686, 0x99868686, 0x997b797b, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x996b6d73, 0x996b6d73, 0x996b6d73, 0x996b6d73, 0x996b6d6b, 0x996b6d6b, 0x99707370, 0x996b6d6b, 
+	0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 
+	0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 
+	0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 
+	0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996e706e, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99736d6b, 0x9973706e, 0x9973706e, 0x9973706e, 
+	0x99737073, 0x99736d73, 0x99737073, 0x99737073, 0x99736d73, 0x99736d73, 0x99736d73, 0x99737073, 
+	0x996b6d6b, 0x9970716e, 0x9970716e, 0x996b6d6b, 0x99736d6b, 0x99736d6b, 0x99736d6b, 0x99736d6b, 
+	0x9973706e, 0x9973706e, 0x99736d6b, 0x9973706e, 0x996e706e, 0x99707370, 0x99707370, 0x996b6d6b, 
+	0x996e7073, 0x996b6d73, 0x996b6d73, 0x996e7073, 0x996e706e, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 
+	0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 
+	0x99707170, 0x996b6d6b, 0x99707170, 0x996b6d6b, 0x99707370, 0x99707370, 0x996b6d6b, 0x996b6d6b, 
+	0x9973706e, 0x9973706e, 0x9973706e, 0x9973706e, 0x996b696b, 0x996b696b, 0x996b696b, 0x994a4a4a, 
+	0x88313131, 0x66101010, 0x66000000, 0x55000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x44474847, 0xeed6d7d6, 0xffd6d7d6, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffe9e7e9, 0xffe9e7e9, 0xffe9e7e9, 0xffdedbde, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d5db, 0xffceced6, 0xffceced6, 0xffceced6, 0xffcecece, 0xffcecece, 0xffd3d4d3, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 
+	0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffd6d1d0, 0xffd6d1d0, 0xffd6d1d0, 0xffd7d2d2, 
+	0xffd7d3d5, 0xffd6d1d5, 0xffd6d1d4, 0xffd6d3d5, 0xffd5d4d5, 0xffd1d2d1, 0xffd0d1d0, 0xffd0d2d0, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffd3d4d3, 0xffcecece, 0xffd3d4d3, 0xffcecece, 0xffd3d4d3, 
+	0xffd3d4d3, 0xffcecece, 0xffcecece, 0xffd0d1ce, 0xffd0d1ce, 0xffd0d1ce, 0xffd0d1ce, 0xffc5c6c5, 
+	0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xff949694, 0xcc949694, 0x33313231, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x44000000, 0x884a4542, 0x99737173, 0x99737173, 0x99737173, 
+	0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99737373, 
+	0x99737173, 0x99737173, 0x99706f70, 0x99706f70, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 
+	0x99706d70, 0x99737173, 0x99706d70, 0x99706d70, 0x996b6b6b, 0x996b6c6b, 0x996b6b6b, 0x996b6b6b, 
+	0x996b6c6b, 0x996b6c6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 0x996b6d6b, 
+	0x996b6d6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 0x996e6c6e, 0x99706f70, 0x996e6c6e, 0x99706f70, 
+	0x996b6f6b, 0x996b6d6b, 0x996b6f6b, 0x996b6f6b, 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, 
+	0x996b7070, 0x996b6f6e, 0x996b6f6e, 0x996b6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 
+	0x99736f6e, 0x99737070, 0x99737070, 0x99737070, 0x996e6f6e, 0x99737173, 0x99707070, 0x996e6f6e, 
+	0x9970706e, 0x9970706e, 0x9970706e, 0x9970706e, 0x996e6f6e, 0x996e6f6e, 0x99707070, 0x996e6f6e, 
+	0x996b6f70, 0x996b6f70, 0x996b6f70, 0x996b6f70, 0x996e6f6e, 0x99707070, 0x99707070, 0x996e6f6e, 
+	0x996e6f6e, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x99707070, 0x996e6f6e, 
+	0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 
+	0x996b6d6b, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, 0x996b6d6b, 0x996b6c6b, 
+	0x996b6f70, 0x996b6f70, 0x996b6c6e, 0x996b6c6e, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x99686b6b, 
+	0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x9963656b, 0x9963656b, 0x995d6065, 0x9952555a, 
+	0x994a4d4a, 0x881e1f1e, 0x66080808, 0x66080808, 0x44000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11101010, 0xccc5cac5, 0xffc5cac5, 0xffc5cac5, 
+	0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedbd6, 0xffdedbd6, 0xffdedbd6, 0xffd6d5d3, 
+	0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d0d3, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffcecdce, 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffcecdce, 0xffcecece, 0xffcecdce, 0xffcecdce, 
+	0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced0d0, 0xffcecece, 0xffced0d0, 
+	0xffced0ce, 0xffcecece, 0xffced0ce, 0xffced0ce, 0xffd0ced0, 0xffd0ced0, 0xffd0ced0, 0xffd0ced0, 
+	0xffced1d3, 0xffced0d0, 0xffced0d0, 0xffced0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 
+	0xffd6d0d0, 0xffd6d1d3, 0xffd6d1d3, 0xffd6d1d3, 0xffd0d0d0, 0xffd6d2d6, 0xffd3d1d3, 0xffd1d0d1, 
+	0xffd5d2d4, 0xffd7d3d6, 0xffd7d3d6, 0xffd6d3d5, 0xffd1d2d3, 0xffcecfce, 0xffcdcece, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcbcccb, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcbcacb, 0xffc5cac5, 
+	0xffc0c4c0, 0xffc0c4c0, 0xffb5b6b5, 0xffa5a6a5, 0xffa5a6a5, 0xaa737473, 0x11101010, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x22000000, 0x661e1e1e, 0x99656263, 0x99737173, 0x99737173, 0x99737173, 
+	0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99737373, 0x99737373, 0x99737373, 0x996b6c6b, 
+	0x996e6c6e, 0x996e6c6e, 0x99706f70, 0x99706f70, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 
+	0x99706d70, 0x99706d70, 0x99706d70, 0x996e696e, 0x996b6b6b, 0x996b6b6b, 0x996b696b, 0x996b6b6b, 
+	0x996b696b, 0x996b6b6b, 0x996b696b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6d6b, 
+	0x996b6c6b, 0x996b6b6b, 0x996b6c6b, 0x996b6b6b, 0x996e6c6e, 0x996e6c6e, 0x99706f70, 0x996e6c6e, 
+	0x996b6f6b, 0x996b6f6b, 0x996b6f6b, 0x996b6f6b, 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, 
+	0x996b6f6e, 0x996b7070, 0x996b7070, 0x996b6f6e, 0x996e6f6e, 0x99707070, 0x99707070, 0x996e6f6e, 
+	0x99737070, 0x99737070, 0x99736f6e, 0x99736f6e, 0x996e6f6e, 0x99707070, 0x99737173, 0x996e6f6e, 
+	0x996e6f68, 0x996e6f68, 0x9970706e, 0x9970706e, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 
+	0x996b6f70, 0x996b6f70, 0x996b6f70, 0x996b706e, 0x996e6f6e, 0x99707070, 0x996e6f6e, 0x996e6f6e, 
+	0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 
+	0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, 
+	0x996b6d6b, 0x996b6c6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, 
+	0x996b6f70, 0x996b6c6e, 0x996b6c6e, 0x996b6c6e, 0x99686b6b, 0x99686b6b, 0x9965686b, 0x99686b6b, 
+	0x996b696b, 0x99686768, 0x99686768, 0x99686768, 0x9963656b, 0x995d6065, 0x995d6065, 0x9952555a, 
+	0x994a4d4a, 0x99343634, 0x77080808, 0x66080808, 0x66000000, 0x22000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x664d4e4d, 0xffc5cac5, 0xffc5cac5, 0xffc5cac5, 
+	0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd6d5d3, 0xffd6d5d3, 0xffced0d0, 0xffced0d0, 
+	0xffd0cdd0, 0xffd0cdd0, 0xffd3d0d3, 0xffd3d0d3, 0xffcbcdcb, 0xffcbcdcb, 0xffcbcdcb, 0xffcbcdcb, 
+	0xffcecdce, 0xffced0ce, 0xffced0ce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecace, 0xffcecdce, 
+	0xffcecace, 0xffcecdce, 0xffcecace, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced0d0, 0xffcecece, 
+	0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffd0ced0, 0xffd0ced0, 0xffd0ced0, 0xffd0ced0, 
+	0xffced0d0, 0xffced1d3, 0xffced1d3, 0xffced0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, 0xffd0d0d0, 
+	0xffd6d1d3, 0xffd6d1d3, 0xffd6d0d0, 0xffd6d0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, 0xffd0d0d0, 
+	0xffd5d2d3, 0xffd6d3d6, 0xffd7d2d5, 0xffd6d1d5, 0xffd6d1d5, 0xffd4cfd3, 0xffd0ced0, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffced2ce, 0xffcecace, 0xffcecece, 0xffcecece, 0xffcbcccb, 
+	0xffcbcccb, 0xffcbcccb, 0xffcbcccb, 0xffcbcacb, 0xffcbcacb, 0xffcbcacb, 0xffcbcacb, 0xffc5cac5, 
+	0xffc0c4c0, 0xffc0c4c0, 0xffb5b6b5, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, 0x66424242, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x44000000, 0x883c3b3c, 0x99656263, 0x99656263, 0x99656263, 0x99737173, 
+	0x99707070, 0x99707070, 0x99707070, 0x99707070, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 
+	0x996b696b, 0x996b696b, 0x996e6c6e, 0x996e6c6e, 0x996b6b6b, 0x996b6b6b, 0x996b686b, 0x996b6b6b, 
+	0x996e696e, 0x996e696e, 0x996e696e, 0x996e696e, 0x996b696b, 0x996b696b, 0x996b6b6b, 0x996b696b, 
+	0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 
+	0x996b6b6b, 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, 0x99706f70, 0x99706f70, 0x99706f70, 0x99706f70, 
+	0x996b6d6b, 0x996b6f6b, 0x996b6f6b, 0x996b6f6b, 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, 
+	0x996b6f6e, 0x996b6f6e, 0x996b7070, 0x996b7070, 0x99707070, 0x99707070, 0x996e6f6e, 0x99707070, 
+	0x99736f6e, 0x99737070, 0x99736f6e, 0x99737070, 0x99707070, 0x996e6f6e, 0x99707070, 0x99707070, 
+	0x9970706e, 0x9970706e, 0x9970706e, 0x9970706e, 0x99707070, 0x996e6f6e, 0x99707070, 0x996e6f6e, 
+	0x996b706e, 0x996b706e, 0x996b6f70, 0x996b6f70, 0x996e6f6e, 0x99737173, 0x99707070, 0x99707070, 
+	0x99707070, 0x996e6f6e, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 
+	0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6c6b, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, 
+	0x996b6c6b, 0x996b6b6b, 0x996b6d6b, 0x996b6c6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 
+	0x996b6c6e, 0x996b6c6e, 0x996b6c6e, 0x996b6c6e, 0x9965686b, 0x9965686b, 0x9965686b, 0x9965686b, 
+	0x99686768, 0x99686768, 0x99656465, 0x99656465, 0x9963656b, 0x995d6065, 0x99585a60, 0x9952555a, 
+	0x994a4d4a, 0x994a4d4a, 0x881e1f1e, 0x66080808, 0x66000000, 0x44000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x11000000, 0xddc5cac5, 0xffc5cac5, 0xffc5cac5, 0xffc5cac5, 
+	0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffcecece, 0xffced0d0, 0xffced0d0, 0xffced0d0, 0xffc5cace, 
+	0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcbcdcb, 0xffcbcdcb, 0xffc8ccc8, 0xffcbcdcb, 
+	0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecdce, 0xffcecace, 
+	0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced1d3, 
+	0xffcecece, 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffd0ced0, 0xffd0ced0, 0xffd0ced0, 0xffd0ced0, 
+	0xffced0d0, 0xffced0d0, 0xffced1d3, 0xffced1d3, 0xffd3d1d3, 0xffd6d2d6, 0xffd0d0d0, 0xffd3d1d3, 
+	0xffd6d0d0, 0xffd6d1d3, 0xffd6d0d0, 0xffd6d1d3, 0xffd3d1d3, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, 
+	0xffd4d2d2, 0xffd6d2d6, 0xffd6d1d5, 0xffd5d1d5, 0xffd5d2d4, 0xffd2d1d2, 0xffcfcfcf, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcbcccb, 
+	0xffc8c9c8, 0xffc8c9c8, 0xffc8c9c8, 0xffcbcacb, 0xffc8c6c8, 0xffc8c6c8, 0xffc8c6c8, 0xffc0c4c0, 
+	0xffc0c4c0, 0xffbabdba, 0xffb5b6b5, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, 0xbb737473, 0x110e0d0e, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x11000000, 0x55000000, 0x995a595a, 0x99656263, 0x99656263, 0x99656263, 0x99656263, 
+	0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b6c6b, 0x996b6c6b, 0x99636563, 0x99636563, 
+	0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b686b, 0x996b686b, 0x996b686b, 0x996b686b, 
+	0x996b656b, 0x996e696e, 0x996e696e, 0x996e696e, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 
+	0x996b696b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 
+	0x996b6b6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 0x99706f70, 0x99737173, 0x99706f70, 0x99737173, 
+	0x996b6f6b, 0x996b6f6b, 0x996b6f6b, 0x996b706b, 0x99706d70, 0x996e6d6e, 0x996e6d6e, 0x99706d70, 
+	0x996b7070, 0x996b7070, 0x996b6f6e, 0x996b6f6e, 0x99707070, 0x99707070, 0x99737173, 0x99707070, 
+	0x99737070, 0x99737070, 0x99737173, 0x99737173, 0x99707070, 0x99737173, 0x99707070, 0x99707070, 
+	0x9970706e, 0x9970706e, 0x9970706e, 0x9970706e, 0x99707070, 0x99707070, 0x99707070, 0x99707070, 
+	0x996b706e, 0x996b706e, 0x996b706e, 0x996b706e, 0x99707070, 0x99707070, 0x99737173, 0x99737173, 
+	0x99737173, 0x99707070, 0x99707070, 0x996e6f6e, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 
+	0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 0x996b6d6b, 
+	0x996b6c6b, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 
+	0x996b6c6e, 0x996b696b, 0x996b696b, 0x996b696b, 0x9965686b, 0x9965686b, 0x9963656b, 0x9963656b, 
+	0x99656465, 0x99656465, 0x99656465, 0x99636163, 0x995d6065, 0x995d6065, 0x99585a60, 0x9952555a, 
+	0x994a4d4a, 0x994a4d4a, 0x99343634, 0x66080808, 0x66000000, 0x55000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x44313131, 0xffc5cac5, 0xffc5cac5, 0xffc5cac5, 0xffc5cac5, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffc5cace, 0xffc5cace, 0xffc5cace, 0xffc5cace, 
+	0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffc5cac5, 0xffc5cac5, 0xffc5cac5, 0xffc5cac5, 
+	0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 
+	0xffcecace, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced1d3, 0xffced0d0, 0xffced1d3, 
+	0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced2ce, 0xffd3ced3, 0xffd0ced0, 0xffd0ced0, 0xffd3ced3, 
+	0xffced1d3, 0xffced1d3, 0xffced0d0, 0xffced0d0, 0xffd3d1d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, 
+	0xffd6d1d3, 0xffd6d1d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, 0xffd6d2d6, 0xffd3d1d3, 0xffd6d2d6, 
+	0xffd6d2d6, 0xffd7d2d6, 0xffd5d3d5, 0xffd5d1d5, 0xffd3d1d2, 0xffd0d0d0, 0xffcecece, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecace, 0xffcecace, 0xffcecace, 0xffc8c9c8, 
+	0xffc8c9c8, 0xffc8c9c8, 0xffc8c9c8, 0xffc8c6c8, 0xffc8c6c8, 0xffc8c6c8, 0xffc5c2c5, 0xffc0c4c0, 
+	0xffbabdba, 0xffbabdba, 0xffb5b6b5, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, 0xeea5a6a5, 0x44292829, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000400, 0x22000400, 0x771e201e, 0x995a595a, 0x99525452, 0x995a5a5a, 0x99636163, 0x99636163, 
+	0x996b696b, 0x99656568, 0x99656568, 0x99656568, 0x99636563, 0x99636563, 0x99636563, 0x99636563, 
+	0x99686568, 0x99656565, 0x99656565, 0x99656565, 0x996b6765, 0x996b6765, 0x996b6868, 0x996b6765, 
+	0x996b676b, 0x996b686b, 0x996b676b, 0x996b686b, 0x996b696b, 0x996b696b, 0x996b6b6b, 0x996b696b, 
+	0x996b696b, 0x996b696b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 
+	0x996e6f6e, 0x996b6d6b, 0x996b6d6b, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 
+	0x99737173, 0x99737173, 0x99737173, 0x996e746e, 0x99737173, 0x99737373, 0x99737173, 0x99737173, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99707173, 0x996e7173, 0x99707173, 0x99707173, 
+	0x99707070, 0x99707070, 0x996e6f6e, 0x99707070, 0x99736f6e, 0x99737070, 0x99736f6e, 0x99737070, 
+	0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996b6d6b, 0x996b6d6b, 
+	0x996b6f6e, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 
+	0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x99686868, 0x99656765, 0x99656765, 0x99636563, 
+	0x99636463, 0x99636463, 0x99636263, 0x99636163, 0x99636163, 0x995d5c5d, 0x995d5c5d, 0x995a595a, 
+	0x99525552, 0x993f423f, 0x993f423f, 0x77191c19, 0x77000000, 0x66000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x88737173, 0xffbdbabd, 0xffbdbabd, 0xffc5c2c5, 0xffc5c2c5, 
+	0xffc5cac5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 
+	0xffc5c9c5, 0xffc5c8c5, 0xffc5c9c5, 0xffc5c8c5, 0xffc5c9c5, 0xffc5c9c5, 0xffc5cac5, 0xffc5c9c5, 
+	0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecdce, 0xffcecace, 
+	0xffcecace, 0xffcecace, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffd0d0d0, 0xffcecece, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 
+	0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d5d0, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 
+	0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d2d6, 
+	0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d4d6, 
+	0xffd6d4d6, 0xffd6d3d6, 0xffd7d1d5, 0xffd5d1d4, 0xffd2d0d2, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 
+	0xffd0d0d0, 0xffcecece, 0xffcecece, 0xffced0d0, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecdce, 0xffcecace, 0xffcecace, 0xffc5cac5, 
+	0xffc5c8c5, 0xffc5c8c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c2bd, 
+	0xffc0bdbd, 0xffc0bdbd, 0xffbdbabd, 0xffb5b6b5, 0xffadadad, 0xffa5a3a5, 0xff9c9a9c, 0x77585a58, 
+	0x00000400, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000400, 0x33000400, 0x883c3d3c, 0x995a595a, 0x99525452, 0x99525452, 0x995a5a5a, 0x99636163, 
+	0x99656568, 0x99656568, 0x99656568, 0x99656568, 0x99636563, 0x99636463, 0x99636463, 0x99636463, 
+	0x99656565, 0x99656565, 0x99656565, 0x99656565, 0x996b6765, 0x996b6765, 0x996b6765, 0x996b6765, 
+	0x996b676b, 0x996b686b, 0x996b686b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b6b6b, 
+	0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 0x996b6d6b, 0x996b6b6b, 0x996b6d6b, 0x996b6c6b, 
+	0x996e6f6e, 0x996b6d6b, 0x99707070, 0x99737173, 0x996e6f6e, 0x996e6f6e, 0x99707070, 0x99707070, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737373, 0x99737473, 0x99737373, 0x99737373, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737373, 0x99737173, 0x99737173, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 
+	0x99737373, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99707173, 0x99737173, 0x99737173, 0x99707173, 
+	0x99707070, 0x99707070, 0x99707070, 0x99707070, 0x99737070, 0x99737070, 0x99737070, 0x99737070, 
+	0x996e6f6e, 0x99707070, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996b6d6b, 
+	0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6c6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 
+	0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x99686868, 0x99656765, 0x99656765, 0x99656765, 
+	0x99636263, 0x99636263, 0x99636263, 0x99636163, 0x99605e60, 0x99605e60, 0x995d5c5d, 0x995a595a, 
+	0x99525552, 0x993f423f, 0x993f423f, 0x88191c19, 0x77030303, 0x66000000, 0x22000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0xddadaaad, 0xffb5b2b5, 0xffbdbabd, 0xffbdbabd, 0xffc5c2c5, 
+	0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 
+	0xffc5c6c5, 0xffc5c6c5, 0xffc5c8c5, 0xffc5c8c5, 0xffc5c9c5, 0xffc5c8c5, 0xffc5c9c5, 0xffc5c9c5, 
+	0xffcecace, 0xffcecace, 0xffcecace, 0xffcbccc8, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecdce, 
+	0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffd0d0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, 0xffd0d0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, 
+	0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d4d6, 
+	0xffd6d2d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d4d6, 
+	0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d2d6, 
+	0xffd6d5d6, 0xffd6d4d6, 0xffd6d1d3, 0xffd1d1d1, 0xffd3d1d3, 0xffd3d1d3, 0xffd0d0d0, 0xffd0d0d0, 
+	0xffd0d0d0, 0xffd0d0d0, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced0d0, 0xffcecece, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecace, 0xffcecace, 0xffcecace, 0xffc5cac5, 
+	0xffc5c8c5, 0xffc5c8c5, 0xffc5c8c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c4c5, 0xffc5c2bd, 
+	0xffc3c0bd, 0xffc0bdbd, 0xffbdbabd, 0xffb5b6b5, 0xffadadad, 0xffa5a3a5, 0xffa5a3a5, 0xaa585a58, 
+	0x11000400, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000400, 0x44000400, 0x993c3d3c, 0x995a595a, 0x994a4d4a, 0x99525452, 0x995a5a5a, 0x99636163, 
+	0x99606165, 0x99606165, 0x99656568, 0x99656568, 0x99636563, 0x99636263, 0x99636263, 0x99636263, 
+	0x99686568, 0x99656565, 0x99656565, 0x99656565, 0x996b6765, 0x996b6563, 0x996b6765, 0x996b6868, 
+	0x996b686b, 0x996b686b, 0x996b686b, 0x996b696b, 0x996b696b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 
+	0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 
+	0x996e6f6e, 0x996e6f6e, 0x99707070, 0x99737173, 0x99707070, 0x99707070, 0x99707070, 0x99707070, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737573, 0x99737373, 0x99737573, 
+	0x99737373, 0x99737473, 0x99737373, 0x99737373, 0x99737373, 0x99737473, 0x99737173, 0x99737473, 
+	0x99737173, 0x99737473, 0x99737373, 0x99737373, 0x99737473, 0x99737373, 0x99737173, 0x99737173, 
+	0x99737373, 0x99737373, 0x99737473, 0x99737473, 0x99737173, 0x99737373, 0x99737373, 0x99737373, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99707173, 0x99707173, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 
+	0x99707070, 0x99707070, 0x99707070, 0x996e6f6e, 0x99707070, 0x99707070, 0x996e6f6e, 0x996e6f6e, 
+	0x996b7070, 0x996b6f6e, 0x996b6f6e, 0x996b6d6b, 0x996b6d6b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 
+	0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x99656765, 0x99686868, 0x99656765, 0x99656765, 
+	0x99636463, 0x99636263, 0x99636263, 0x99636163, 0x99605e60, 0x995d5c5d, 0x995d5c5d, 0x995a595a, 
+	0x99525552, 0x99525552, 0x993f423f, 0x882c2f2c, 0x77050505, 0x66000000, 0x33000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x11000000, 0xffadaaad, 0xffb5b2b5, 0xffb5b2b5, 0xffbdbabd, 0xffc5c2c5, 
+	0xffc5c2c5, 0xffc5c2c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 
+	0xffc5c8c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c8c5, 0xffc5c8c5, 0xffc5c6c5, 0xffc5c9c5, 0xffc5cac5, 
+	0xffcecace, 0xffcecace, 0xffcecace, 0xffcbccc8, 0xffcecace, 0xffcecdce, 0xffcecdce, 0xffcecece, 
+	0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffd0d0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd6d2d6, 0xffd3d1d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, 
+	0xffd6d4d3, 0xffd6d2d6, 0xffd6d4d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d7d6, 0xffd6d4d6, 0xffd6d7d6, 
+	0xffd6d4d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d4d6, 0xffd6d7d6, 
+	0xffd6d4d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d4d6, 
+	0xffd6d5d6, 0xffd6d5d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, 0xffd3d1d3, 0xffd0d0d0, 0xffd3d1d3, 
+	0xffd3d1d3, 0xffd0d0d0, 0xffd0d0d0, 0xffced1d3, 0xffced0d0, 0xffced0d0, 0xffcecece, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecace, 0xffcecace, 0xffcecace, 0xffc5c9c5, 
+	0xffc5cac5, 0xffc5c8c5, 0xffc5c8c5, 0xffc5c6c5, 0xffc5c5c5, 0xffc5c4c5, 0xffc5c2c5, 0xffc5c2bd, 
+	0xffc0bdbd, 0xffc0bdbd, 0xffbdbabd, 0xffb5b6b5, 0xffadadad, 0xffa5a3a5, 0xffa5a3a5, 0xcc848684, 
+	0x22000400, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000400, 0x55000400, 0x993c3d3c, 0x993c3d3c, 0x994a4d4a, 0x99525452, 0x995a5a5a, 0x995a5a5a, 
+	0x995a5d63, 0x99606165, 0x99606165, 0x99606165, 0x99636163, 0x99636263, 0x99636463, 0x99636263, 
+	0x99686568, 0x99656565, 0x99656565, 0x99656565, 0x996b6563, 0x996b6868, 0x996b6765, 0x996b6868, 
+	0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b6b6b, 0x996b6c6b, 0x996b6c6b, 
+	0x996b6c6b, 0x996b6b6b, 0x996b6c6b, 0x996b6d6b, 0x996b6c6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 
+	0x996e6f6e, 0x99707070, 0x99737173, 0x99707070, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 
+	0x99707370, 0x99707370, 0x99737173, 0x99707370, 0x99737373, 0x99737473, 0x99737173, 0x99737473, 
+	0x99737573, 0x99737573, 0x99737373, 0x99737373, 0x99737373, 0x99737473, 0x99737373, 0x99737473, 
+	0x99737573, 0x99737473, 0x99737473, 0x99737473, 0x99737473, 0x99737473, 0x99737473, 0x99737373, 
+	0x99737573, 0x99737373, 0x99737473, 0x99737473, 0x99737373, 0x99737573, 0x99737473, 0x99737473, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 
+	0x99737173, 0x99737173, 0x99707070, 0x99707070, 0x99737173, 0x99737173, 0x99737173, 0x99707070, 
+	0x996b7070, 0x996b6f6e, 0x996b6f6e, 0x996b6f6e, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6b6b, 
+	0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 0x99656765, 0x99686868, 0x99656765, 
+	0x99636463, 0x99636463, 0x99636263, 0x99636163, 0x99605e60, 0x99605e60, 0x995d5c5d, 0x995d5c5d, 
+	0x99525552, 0x99525552, 0x993f423f, 0x992c2f2c, 0x77080808, 0x77000000, 0x44000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x443a393a, 0xffadaaad, 0xffadaaad, 0xffb5b2b5, 0xffbdbabd, 0xffbdbabd, 
+	0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c6c5, 0xffc5c4c5, 
+	0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c8c5, 0xffc5c6c5, 0xffc5cac5, 0xffc5c9c5, 0xffc5cac5, 
+	0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecdce, 0xffcecece, 0xffcecece, 
+	0xffcecece, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffd0d0d0, 0xffd3d1d3, 0xffd6d2d6, 0xffd3d1d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 
+	0xffd6d4d3, 0xffd6d4d3, 0xffd6d2d6, 0xffd6d4d3, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d4d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d4d5, 
+	0xffd6d7d6, 0xffd6d5d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, 0xffd6d2d6, 0xffd6d2d6, 
+	0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, 0xffced1d3, 0xffced0d0, 0xffced0d0, 0xffced0d0, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffceccce, 0xffc5cac5, 
+	0xffc5c9c5, 0xffc5cac5, 0xffc5c9c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c2bd, 
+	0xffc3c0bd, 0xffc0bdbd, 0xffc0bdbd, 0xffb5b6b5, 0xffadadad, 0xffa5a3a5, 0xffa5a3a5, 0xdd848684, 
+	0x222c2f2c, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x55161716, 0x99424542, 0x99424542, 0x994a4c4a, 0x99525252, 0x995a595a, 0x995a595a, 
+	0x995d5e5d, 0x995d5e5d, 0x99606060, 0x99606060, 0x99636263, 0x99636263, 0x99636263, 0x99636463, 
+	0x99636563, 0x99636563, 0x99656765, 0x99636563, 0x996b686b, 0x996b676b, 0x996b686b, 0x996b696b, 
+	0x996b696b, 0x996b6b6b, 0x996b696b, 0x996b696b, 0x996e6c6e, 0x996e6c6e, 0x996e6c6e, 0x99706f70, 
+	0x996b6d6b, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x99707070, 0x996e6f6e, 0x99707070, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737373, 0x99737373, 0x99737173, 
+	0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737573, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737573, 0x99767776, 0x99767776, 0x99767776, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737473, 0x99737473, 0x99737473, 0x99737373, 0x99737573, 0x99737473, 0x99737473, 0x99737373, 
+	0x99737373, 0x99737373, 0x99737473, 0x99737373, 0x99737373, 0x99737173, 0x99737173, 0x99737373, 
+	0x99737373, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 
+	0x99707070, 0x996e6f6e, 0x99707070, 0x996e6f6e, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996b6d6b, 
+	0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b696b, 0x996b6868, 0x996b6765, 0x996b6765, 
+	0x99656465, 0x99656465, 0x99656465, 0x99636163, 0x99636163, 0x99605e60, 0x995d5c5d, 0x995a595a, 
+	0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x770b0b0b, 0x77000000, 0x55000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x44373737, 0xffa5a6a5, 0xffadaaad, 0xffb2b5b8, 0xffb5babd, 0xffb5babd, 
+	0xffbdc0c0, 0xffbdc0c0, 0xffbdc0c0, 0xffbdc2c5, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c6c5, 
+	0xffc5c6c5, 0xffc5c6c5, 0xffc5c8c5, 0xffc5c6c5, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecccb, 
+	0xffcecace, 0xffcecdce, 0xffcecace, 0xffcecace, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced0d0, 
+	0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd0d0d0, 0xffd3d1d3, 
+	0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d4d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d9, 0xffd7d7d7, 0xffd8d7d8, 0xffd6d6d6, 0xffd7d6d6, 
+	0xffd5d8d9, 0xffd6d8d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 
+	0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d1d6, 0xffd6d1d6, 0xffd6d1d6, 0xffd6d1d6, 0xffd3d1d3, 
+	0xffd0d0d0, 0xffd0d0d0, 0xffcecece, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffceccce, 0xffcecccb, 
+	0xffcec9c8, 0xffcec9c8, 0xffcec9c8, 0xffcbc8cb, 0xffcbc8cb, 0xffc8c5c8, 0xffc8c5c8, 0xffc5c2c5, 
+	0xffc3c0c3, 0xffc0bdc0, 0xffbdbabd, 0xffb5bab5, 0xffafb2af, 0xffaaaaaa, 0xffa5a2a5, 0xff9c9e9c, 
+	0x44343534, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x55161716, 0x99424542, 0x99424542, 0x99424542, 0x994a4c4a, 0x99525252, 0x995a595a, 
+	0x995a5d5a, 0x995d5e5d, 0x99636163, 0x99606060, 0x99636263, 0x99636263, 0x99636263, 0x99636463, 
+	0x99636563, 0x99636563, 0x99636563, 0x99656765, 0x996b676b, 0x996b686b, 0x996b686b, 0x996b696b, 
+	0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996e6c6e, 0x996e6c6e, 0x99706f70, 0x99706f70, 
+	0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x99707070, 0x99707070, 0x99707070, 0x99707070, 0x99737173, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737373, 
+	0x99737373, 0x99737373, 0x99737573, 0x99737473, 0x99737473, 0x99737573, 0x99737473, 0x99737473, 
+	0x99737573, 0x99737573, 0x99767776, 0x99737573, 0x99737573, 0x99767776, 0x99767776, 0x99767776, 
+	0x99767776, 0x997b797b, 0x99797879, 0x99767776, 0x99737776, 0x99737776, 0x99737776, 0x99737776, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737573, 0x99737473, 0x99737473, 0x99737573, 0x99737573, 0x99737473, 0x99737473, 0x99737473, 
+	0x99737573, 0x99737573, 0x99737473, 0x99737573, 0x99737473, 0x99737473, 0x99737373, 0x99737473, 
+	0x99737373, 0x99737473, 0x99737473, 0x99737173, 0x99737373, 0x99737373, 0x99737173, 0x99737173, 
+	0x99737173, 0x99707070, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996b6d6b, 
+	0x996b6c6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b6765, 
+	0x99686768, 0x99656465, 0x99656465, 0x99656465, 0x99636163, 0x99605e60, 0x995d5c5d, 0x995a595a, 
+	0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x77101010, 0x77000000, 0x55000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x55373737, 0xffa5a6a5, 0xffadaaad, 0xffafafb2, 0xffb2b5b8, 0xffb5babd, 
+	0xffbdbebd, 0xffbdc0c0, 0xffbdc2c5, 0xffbdc1c3, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c5c5, 0xffc5c6c5, 
+	0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c9c5, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecccb, 
+	0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffced0d0, 0xffced0d0, 
+	0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, 0xffd6d2d6, 0xffd3d1d3, 0xffd6d2d6, 
+	0xffd6d4d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d5d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd9d8d9, 0xffd6d7d6, 0xffd6d7d6, 0xffd9d8d6, 0xffdbd9d6, 0xffd9d8d6, 
+	0xffd6d7d6, 0xffd6dbde, 0xffd6d9db, 0xffd7d9dc, 0xffd9d9d9, 0xffdbd8dc, 0xffdcd8dd, 0xffd9d7da, 
+	0xffd5d7da, 0xffd5d7d6, 0xffd5d5d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d4d6, 0xffd6d5d6, 
+	0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d1d6, 0xffd0d0d0, 
+	0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffcecece, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecccb, 
+	0xffcecccb, 0xffcecccb, 0xffcec9c8, 0xffcbc8cb, 0xffc8c5c8, 0xffc8c5c8, 0xffc8c5c8, 0xffc5c2c5, 
+	0xffc3c0c3, 0xffc0bdc0, 0xffbdbabd, 0xffb5bab5, 0xffafb2af, 0xffaaaaaa, 0xffa5a2a5, 0xff9c9e9c, 
+	0x55343534, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x66161716, 0x99424542, 0x99424542, 0x99424542, 0x994a4c4a, 0x99525252, 0x995a595a, 
+	0x995a5d5a, 0x995d5e5d, 0x995d5e5d, 0x99636163, 0x99636163, 0x99636263, 0x99636463, 0x99636463, 
+	0x99636563, 0x99656765, 0x99656765, 0x99656765, 0x996b686b, 0x996b676b, 0x996b686b, 0x996b696b, 
+	0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996e6c6e, 0x99706f70, 0x99737173, 0x99706f70, 
+	0x996e6f6e, 0x99707070, 0x99707070, 0x99707070, 0x99707070, 0x99707070, 0x99737173, 0x99737173, 
+	0x99737473, 0x99737573, 0x99737373, 0x99737473, 0x99737373, 0x99737373, 0x99737473, 0x99737573, 
+	0x99737473, 0x99737473, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99767776, 0x997b797b, 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x997b797b, 
+	0x99797879, 0x99767776, 0x99767776, 0x99767776, 0x99737776, 0x99737776, 0x99737776, 0x99737776, 
+	0x99737773, 0x99737573, 0x99737773, 0x99737773, 0x99767773, 0x99767773, 0x99767773, 0x99767773, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737373, 0x99737573, 0x99737373, 0x99737573, 0x99737373, 0x99737473, 0x99737373, 0x99737173, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99707070, 0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 
+	0x996b6d6b, 0x996b6d6b, 0x996b6b6b, 0x996b6b6b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b6868, 
+	0x99686768, 0x99686768, 0x99656465, 0x99656465, 0x99636163, 0x99605e60, 0x995d5c5d, 0x995d5c5d, 
+	0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x77101010, 0x77000000, 0x55000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x66373737, 0xffa5a6a5, 0xffadaaad, 0xffafafb2, 0xffb5babd, 0xffb5babd, 
+	0xffbdbebd, 0xffbdc0c0, 0xffbdc0c0, 0xffbdc2c5, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c6c5, 0xffc5c6c5, 
+	0xffc5c6c5, 0xffc5c8c5, 0xffc5c9c5, 0xffc5c9c5, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecccb, 
+	0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffced1d3, 0xffced0d0, 
+	0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, 0xffd6d2d6, 0xffd3d1d3, 0xffd3d1d3, 0xffd6d2d6, 0xffd6d2d6, 
+	0xffd6d5d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d9d6, 
+	0xffd9d8d9, 0xffdbd9db, 0xffd9d8d9, 0xffdbd9db, 0xffdbd9d6, 0xffdbd9d6, 0xffdbd9d6, 0xffdedbd6, 
+	0xffd6d9db, 0xffd6d8d9, 0xffd6d9db, 0xffd7d8dc, 0xffd9dadb, 0xffdbdadc, 0xffdcd8dc, 0xffdcd8dc, 
+	0xffdcd7dc, 0xffdad7da, 0xffd8d8d7, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d5d6, 
+	0xffd6d5d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd3d1d3, 
+	0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecdce, 0xffcecccb, 
+	0xffcecccb, 0xffcecccb, 0xffcec9c8, 0xffcecace, 0xffcbc8cb, 0xffcbc8cb, 0xffc8c5c8, 0xffc5c2c5, 
+	0xffc5c2c5, 0xffc0bdc0, 0xffc0bdc0, 0xffb5bab5, 0xffafb2af, 0xffaaaaaa, 0xffa5a2a5, 0xff9c9e9c, 
+	0x55343534, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x66161716, 0x99424542, 0x99424542, 0x99424542, 0x994a4c4a, 0x99525252, 0x995a595a, 
+	0x995a5d5a, 0x995d5e5d, 0x995d5e5d, 0x99606060, 0x99636163, 0x99636263, 0x99636263, 0x99636463, 
+	0x99636563, 0x99656765, 0x99686868, 0x99686868, 0x996b686b, 0x996b686b, 0x996b696b, 0x996b696b, 
+	0x996b6b6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 0x99706f70, 0x99706f70, 0x99706f70, 0x99706f70, 
+	0x99707070, 0x99707070, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 
+	0x99737473, 0x99737573, 0x99737473, 0x99737373, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99797879, 0x997b797b, 0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99797879, 0x99767776, 
+	0x99767776, 0x99767776, 0x99767776, 0x997b797b, 0x99737776, 0x99737879, 0x99737776, 0x99737776, 
+	0x99737973, 0x99737773, 0x99737973, 0x99737973, 0x997b7973, 0x99767773, 0x99767773, 0x997b7973, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737573, 0x99737473, 0x99737573, 0x99737473, 0x99737573, 0x99737573, 0x99737373, 0x99737373, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99707070, 0x99707070, 0x996e6f6e, 
+	0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6c6b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 
+	0x99686768, 0x99686768, 0x99656465, 0x99656465, 0x99636163, 0x99636163, 0x995d5c5d, 0x995d5c5d, 
+	0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x77101010, 0x77000000, 0x66000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x776e6f6e, 0xffa5a6a5, 0xffadaaad, 0xffafafb2, 0xffb2b5b8, 0xffb5babd, 
+	0xffbdbebd, 0xffbdc0c0, 0xffbdc0c0, 0xffbdc1c3, 0xffc5c4c5, 0xffc5c4c5, 0xffc5c5c5, 0xffc5c6c5, 
+	0xffc5c6c5, 0xffc5c8c5, 0xffc5cac5, 0xffc5cac5, 0xffcecace, 0xffcecace, 0xffcecccb, 0xffcecccb, 
+	0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced0d0, 0xffced0d0, 0xffced1d3, 0xffced1d3, 
+	0xffd3d1d3, 0xffd3d1d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 
+	0xffd6d5d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d8d6, 
+	0xffdbd9db, 0xffdedbde, 0xffdbd9db, 0xffdbd9db, 0xffdbd9d6, 0xffdbd9d6, 0xffdedbd6, 0xffdbd9d6, 
+	0xffd6d9db, 0xffd6d9db, 0xffd6dadb, 0xffd7dade, 0xffdadbdb, 0xffdbdadc, 0xffdbd8dc, 0xffdcd8dc, 
+	0xffdcdadc, 0xffd9dad9, 0xffd7d8d7, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d2d6, 
+	0xffd3d1d3, 0xffd3d1d3, 0xffd0d0d0, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecccb, 
+	0xffcecccb, 0xffcecccb, 0xffcecccb, 0xffcecace, 0xffcbc8cb, 0xffcbc8cb, 0xffc8c5c8, 0xffc5c2c5, 
+	0xffc5c2c5, 0xffc0bdc0, 0xffc0bdc0, 0xffb5bab5, 0xffafb2af, 0xffaaaaaa, 0xffa5a2a5, 0xff9c9e9c, 
+	0x66343534, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11000000, 0x66161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x995a595a, 0x995a595a, 
+	0x995d5c5d, 0x99605e60, 0x99605e60, 0x99605e60, 0x99636163, 0x99636263, 0x99636463, 0x99636563, 
+	0x996b656b, 0x996b676b, 0x996b686b, 0x996b686b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b6b6b, 
+	0x996e6c6b, 0x996e6c6b, 0x99706f6b, 0x996e6c6b, 0x996e7070, 0x996e7070, 0x99686f6e, 0x99737173, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737373, 0x99737473, 0x99737473, 0x99737473, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99767776, 0x99767776, 0x99767776, 0x99767776, 
+	0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99767876, 0x99767876, 0x99767876, 0x99767876, 
+	0x997b7979, 0x997b7d7b, 0x997b7576, 0x997b7979, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 
+	0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 
+	0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99767876, 0x99797b79, 0x99767876, 0x99767876, 
+	0x997b787b, 0x997b787b, 0x997b787b, 0x997b787b, 0x99767876, 0x99767876, 0x99767876, 0x99767876, 
+	0x99767876, 0x99767876, 0x99767876, 0x99767876, 0x99767776, 0x99767776, 0x99767776, 0x99767776, 
+	0x99767776, 0x99767776, 0x99767776, 0x99737573, 0x99737776, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737473, 0x99737373, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 
+	0x996e6f6e, 0x996e6f6e, 0x996e6f6e, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, 0x996b696b, 
+	0x99656865, 0x99656865, 0x99636563, 0x99636563, 0x99606160, 0x99606160, 0x995d5d5d, 0x995d5d5d, 
+	0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x77101410, 0x77000000, 0x66000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x77686968, 0xff9c9e9c, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffb5b7b5, 
+	0xffbdbebd, 0xffc0c0c0, 0xffc3c1c3, 0xffc3c1c3, 0xffc5c2c5, 0xffc8c5c5, 0xffc8c5c5, 0xffcbc8c5, 
+	0xffc5c6c5, 0xffc8c9c8, 0xffc8c9c8, 0xffc8c9c8, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecdce, 
+	0xffcecece, 0xffcecece, 0xffd0d0d0, 0xffcecece, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd3d4d3, 
+	0xffd6d4d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d8d6, 
+	0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd6dbd6, 0xffd6dbd6, 0xffd9dcd9, 0xffd6dbd6, 
+	0xffdedbde, 0xffdeddde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedcde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedade, 0xffdcdcdd, 0xffdbdbdc, 0xffdbdbdc, 0xffdbdbdc, 0xffdcdadc, 
+	0xffdcdadd, 0xffdcdadc, 0xffd9d9d9, 0xffd8d9db, 0xffd9d8d9, 0xffdbd9db, 0xffd9d8d9, 0xffd6d9d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d4d6, 
+	0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d0d0, 0xffcecece, 0xffcecece, 
+	0xffcecece, 0xffcecdd0, 0xffceccd3, 0xffcbcccb, 0xffc8c9c8, 0xffc8c9c8, 0xffc5c6c5, 0xffc5c6c5, 
+	0xffc3c2c3, 0xffc0bec0, 0xffc0bec0, 0xffbdbab5, 0xffb5b2af, 0xffadaaaa, 0xffa5a2a5, 0xff9c9e9c, 
+	0x66343734, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11000000, 0x66161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x99555255, 0x995a595a, 
+	0x995d5c5d, 0x99605e60, 0x99605e60, 0x99636163, 0x99636263, 0x99636263, 0x99636563, 0x99636563, 
+	0x996b676b, 0x996b686b, 0x996b676b, 0x996b696b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 0x996b6b6b, 
+	0x99706f6b, 0x996e6c6b, 0x99706f6b, 0x99706f6b, 0x996e7070, 0x996e7070, 0x996e7070, 0x996e7070, 
+	0x99737173, 0x99737373, 0x99737173, 0x99737473, 0x99737373, 0x99737373, 0x99737573, 0x99737573, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99767776, 0x99767776, 0x99767776, 0x99767776, 
+	0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99767876, 0x99767876, 0x99767876, 0x99797b79, 
+	0x997b7979, 0x997b7979, 0x997b7979, 0x997b7979, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b7b7b, 
+	0x997b797b, 0x997b797b, 0x997b7b7b, 0x997b7c7b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 
+	0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99797b79, 0x99797b79, 0x99797b79, 0x99797b79, 
+	0x997b787b, 0x997b787b, 0x997b787b, 0x997b787b, 0x99797b79, 0x99767876, 0x99767876, 0x99797b79, 
+	0x99797b79, 0x99767876, 0x99767876, 0x99767876, 0x997b797b, 0x99797879, 0x997b797b, 0x99797879, 
+	0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99737776, 0x99737776, 0x99737776, 0x99737573, 
+	0x99737573, 0x99737573, 0x99737473, 0x99737373, 0x99737173, 0x99737373, 0x99737173, 0x99737173, 
+	0x99707070, 0x99737173, 0x99707070, 0x996e6f6e, 0x996b6c6b, 0x996b6d6b, 0x996b6c6b, 0x996b6b6b, 
+	0x99686b68, 0x99656865, 0x99656865, 0x99636563, 0x99636563, 0x99606160, 0x99606160, 0x995a595a, 
+	0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x77101410, 0x77000000, 0x66000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x88686968, 0xff9c9e9c, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffb5b7b5, 
+	0xffbdbebd, 0xffc0c0c0, 0xffc0c0c0, 0xffc5c2c5, 0xffc8c5c5, 0xffc8c5c5, 0xffcbc8c5, 0xffcbc8c5, 
+	0xffc8c9c8, 0xffc8c9c8, 0xffc8c9c8, 0xffcbcccb, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 
+	0xffd0d0d0, 0xffcecece, 0xffd0d0d0, 0xffd0d0d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 
+	0xffd6d2d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 
+	0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd6dbd6, 0xffd9dcd9, 0xffd9dcd9, 0xffd9dcd9, 
+	0xffdedbde, 0xffdedcde, 0xffdedcde, 0xffdedcde, 0xffdedcde, 0xffdedcde, 0xffdedbde, 0xffdeddde, 
+	0xffdedcde, 0xffdedcde, 0xffdddddd, 0xffdbdddd, 0xffdbdddc, 0xffdbdddc, 0xffdddbdd, 0xffdedbde, 
+	0xffdfdbdf, 0xffe0dbdf, 0xffdcdadc, 0xffd7dadc, 0xffd8d9d9, 0xffdad9da, 0xffdbd9db, 0xffd6d9d6, 
+	0xffd6d9d6, 0xffd6d8d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d4d6, 
+	0xffd6d5d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, 0xffd0d0d0, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecdd0, 0xffcbcccb, 0xffcbcccb, 0xffc8c9c8, 0xffc5c6c5, 0xffc5c6c5, 
+	0xffc3c2c3, 0xffc3c2c3, 0xffbdbabd, 0xffbdbab5, 0xffb5b2af, 0xffadaaaa, 0xffa5a2a5, 0xff9c9e9c, 
+	0x66343734, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11000000, 0x77161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x99555255, 0x995a595a, 
+	0x995d5c5d, 0x99605e60, 0x99636163, 0x99636163, 0x99636463, 0x99636563, 0x99636563, 0x99636563, 
+	0x996b676b, 0x996b676b, 0x996b696b, 0x996b696b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 0x996b6d6b, 
+	0x99706f6b, 0x99706f6b, 0x99706f6b, 0x99706f6b, 0x996e7070, 0x996e7070, 0x99737173, 0x99737173, 
+	0x99737373, 0x99737373, 0x99737373, 0x99737373, 0x99737473, 0x99737473, 0x99737573, 0x99737573, 
+	0x99737573, 0x99737573, 0x99737773, 0x99737773, 0x99767776, 0x99767776, 0x99767776, 0x99767776, 
+	0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99767876, 0x99797b79, 0x99797b79, 0x99797b79, 
+	0x997b7979, 0x997b7979, 0x997b7979, 0x997b7979, 0x997b797b, 0x997b7c7b, 0x997b7c7b, 0x997b7b7b, 
+	0x997b7b7b, 0x997b7b7b, 0x997b7b7b, 0x997b7c7b, 0x997b7b7b, 0x997b7d7b, 0x997b7c7b, 0x997b7c7b, 
+	0x997e7c7b, 0x997e7c7b, 0x99817f7b, 0x997e7c7b, 0x99797b79, 0x99797b79, 0x997b7d7b, 0x997b7d7b, 
+	0x997b7b7b, 0x997b7b7b, 0x997b7b7b, 0x997b7b7b, 0x99797b79, 0x99797b79, 0x99797b79, 0x99797b79, 
+	0x99797b79, 0x99767876, 0x99797b79, 0x99797b79, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 
+	0x997b797b, 0x997b797b, 0x997b797b, 0x99767776, 0x99737776, 0x99737776, 0x99737776, 0x99737776, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737373, 0x99737473, 0x99737173, 0x99737173, 
+	0x99737173, 0x99737173, 0x99707070, 0x99707070, 0x996b6d6b, 0x996b6c6b, 0x996b6c6b, 0x996b6b6b, 
+	0x99686b68, 0x99656865, 0x99656865, 0x99656865, 0x99636563, 0x99606160, 0x995d5d5d, 0x995d5d5d, 
+	0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x77101410, 0x77000000, 0x66000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x99686968, 0xff9c9e9c, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffbdbebd, 
+	0xffbdbebd, 0xffc0c0c0, 0xffc5c2c5, 0xffc5c2c5, 0xffc8c5c5, 0xffcbc8c5, 0xffcbc8c5, 0xffcbc8c5, 
+	0xffc8c9c8, 0xffc8c9c8, 0xffcbcccb, 0xffcbcccb, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 
+	0xffd0d0d0, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d1d3, 0xffd0d1d0, 0xffd0d1d0, 0xffd3d4d3, 0xffd3d4d3, 
+	0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 
+	0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, 0xffd9dcd9, 0xffd9dcd9, 0xffd9dcd9, 0xffdbdddb, 
+	0xffdedcde, 0xffdeddde, 0xffdedcde, 0xffdedcde, 0xffdedcde, 0xffdedfde, 0xffdedfde, 0xffdeddde, 
+	0xffdeddde, 0xffdeddde, 0xffe1dee1, 0xffdfdedf, 0xffdddfdd, 0xffdddddc, 0xffdddcdd, 0xffdddfe0, 
+	0xffdfdedf, 0xffdfdcdf, 0xffdfdcdf, 0xffdfdbdf, 0xffdfdbde, 0xffdfdbdf, 0xffdcd9dc, 0xffd6d9d6, 
+	0xffd6d9d6, 0xffd6d9d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d5d6, 
+	0xffd6d7d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd3d1d3, 0xffd3d1d3, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecdd0, 0xffcbcccb, 0xffc8c9c8, 0xffc8c9c8, 0xffc8c9c8, 0xffc5c6c5, 
+	0xffc3c2c3, 0xffc3c2c3, 0xffc0bec0, 0xffbdbab5, 0xffb5b2af, 0xffadaaaa, 0xffa5a2a5, 0xff9c9e9c, 
+	0x66343734, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11000000, 0x77161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x995a595a, 0x995a595a, 
+	0x99605e60, 0x99605e60, 0x99636163, 0x99636163, 0x99636563, 0x99636563, 0x99636563, 0x99636563, 
+	0x996b676b, 0x996b686b, 0x996b696b, 0x996b696b, 0x996b6c6b, 0x996b6b6b, 0x996b6c6b, 0x996b6d6b, 
+	0x99706f6b, 0x99706f6b, 0x99706f6b, 0x9973716b, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 
+	0x99737173, 0x99737473, 0x99737473, 0x99737473, 0x99737473, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737773, 0x99737773, 0x99737773, 0x99737973, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 
+	0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99797b79, 0x99797b79, 0x99797b79, 0x997b7d7b, 
+	0x997b7979, 0x997b7d7b, 0x997b7979, 0x997b7d7b, 0x997b7c7b, 0x997b7c7b, 0x997b7c7b, 0x997b7d7b, 
+	0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7c7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 
+	0x997e7c7b, 0x99817f7b, 0x99817f7b, 0x997e7c7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99797b79, 
+	0x997b7d7b, 0x997b7b7b, 0x997b7d7b, 0x997b7b7b, 0x99797b79, 0x99797b79, 0x99797b79, 0x99797b79, 
+	0x997b7d7b, 0x99797b79, 0x997b7d7b, 0x99797b79, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 
+	0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x9973797b, 0x99737776, 0x99737776, 0x99737776, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737473, 0x99737573, 0x99737473, 0x99737373, 0x99737173, 
+	0x99737173, 0x99737173, 0x99737173, 0x99707070, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6b6b, 
+	0x996b6d6b, 0x99686b68, 0x99656865, 0x99656865, 0x99636563, 0x99606160, 0x99606160, 0x995d5d5d, 
+	0x995a555a, 0x99524e52, 0x994a484a, 0x99424142, 0x77101410, 0x77000000, 0x66000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x88686968, 0xff9c9e9c, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffbdbebd, 
+	0xffc0c0c0, 0xffc0c0c0, 0xffc3c1c3, 0xffc5c2c5, 0xffc8c5c5, 0xffcbc8c5, 0xffcbc8c5, 0xffcbc8c5, 
+	0xffc8c9c8, 0xffc8c9c8, 0xffcbcccb, 0xffcbcccb, 0xffcecece, 0xffcecdce, 0xffcecece, 0xffcecece, 
+	0xffd0d0d0, 0xffd3d1d3, 0xffd0d0d0, 0xffd3d1d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 0xffd3d4d3, 
+	0xffd6d4d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d9d6, 
+	0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, 0xffd9dcd9, 0xffd9dcd9, 0xffdbdddb, 0xffdedfde, 
+	0xffdeddde, 0xffdedfde, 0xffdeddde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 
+	0xffdedfde, 0xffdfdee0, 0xffe1dfe1, 0xffe2dfe2, 0xffe2dfe2, 0xffe4dfe4, 0xffe2dee1, 0xffdddee2, 
+	0xffdedddf, 0xffdedcdf, 0xffdedcdf, 0xffdfdedf, 0xffdfdede, 0xffdedede, 0xffdedbde, 0xffd5dbd5, 
+	0xffd6d9d6, 0xffd6d9d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d5d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecdd0, 0xffcecece, 0xffcbcccb, 0xffcbcccb, 0xffc8c9c8, 0xffc5c6c5, 
+	0xffc3c2c3, 0xffc3c2c3, 0xffc0bec0, 0xffbdbab5, 0xffb5b2af, 0xffadaaaa, 0xffa5a2a5, 0xff9c9e9c, 
+	0x66343734, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11000000, 0x66161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x99555255, 0x995a595a, 
+	0x995a5d5a, 0x995d605d, 0x99606260, 0x99606260, 0x99656465, 0x99686768, 0x99686768, 0x99686768, 
+	0x996b696b, 0x996b6b6b, 0x996b6b6b, 0x996b6c6b, 0x996b6d6b, 0x996e6f6e, 0x996b6d6b, 0x996e6f6e, 
+	0x99737173, 0x996e6f73, 0x99707073, 0x99707073, 0x99737373, 0x99737173, 0x99737473, 0x99737473, 
+	0x99737573, 0x99737573, 0x99737776, 0x99737776, 0x99767776, 0x99767776, 0x99767776, 0x99767776, 
+	0x997b7876, 0x997b7876, 0x997b7876, 0x997b7876, 0x997b797b, 0x997b797b, 0x997b7b7b, 0x997b797b, 
+	0x997b7d7b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 
+	0x997e807e, 0x99818381, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 
+	0x997b7d7b, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997e807e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 
+	0x997b7d7b, 0x997b7d7b, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 
+	0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 
+	0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 
+	0x997b7c7b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99797b79, 0x99767876, 0x99767876, 0x99767876, 
+	0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99737573, 0x99737573, 0x99737573, 0x99737373, 
+	0x99737373, 0x99737173, 0x99737173, 0x99737173, 0x99707070, 0x99707070, 0x996e6f6e, 0x996e6f6e, 
+	0x996b6c6b, 0x996b6b6b, 0x996b696b, 0x996b696b, 0x99636563, 0x99606160, 0x995d5d5d, 0x995d5d5d, 
+	0x995a5552, 0x99524e4d, 0x99424142, 0x99424142, 0x77101010, 0x77000000, 0x66000000, 0x11000000, 
+	0x00000400, 0x00000400, 0x886e6d6e, 0xffa5a2a5, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffbdbebd, 
+	0xffc0c1c0, 0xffc0c1c0, 0xffc3c4c3, 0xffc3c4c3, 0xffc5c6c5, 0xffc8c9c8, 0xffc8c9c8, 0xffc8c9c8, 
+	0xffcecace, 0xffcecdce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced0d0, 
+	0xffd0d1d6, 0xffd0d1d6, 0xffd0d1d6, 0xffd0d1d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 
+	0xffdedbd6, 0xffdedbd6, 0xffdedcd9, 0xffdedcd9, 0xffdedcde, 0xffdedbde, 0xffdeddde, 0xffdedcde, 
+	0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 
+	0xffe1e0e1, 0xffe6e3e6, 0xffe1e0e1, 0xffdedfde, 0xffdedfde, 0xffe1e1e1, 0xffe1e1e1, 0xffdddfdd, 
+	0xffe1dfe1, 0xffe3e0e3, 0xffe4e1e4, 0xffe3e0e3, 0xffe4e1e4, 0xffe4dfe4, 0xffe5dfe4, 0xffe5dee5, 
+	0xffe6dfe5, 0xffe6dfe5, 0xffe4dfe3, 0xffe0dee0, 0xffdfdedf, 0xffdfdede, 0xffdededf, 0xffdedcdb, 
+	0xffdedcdb, 0xffdedcdb, 0xffdedbde, 0xffd9d8d9, 0xffdbd9db, 0xffd9d8d9, 0xffd9d8d9, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd0d1d0, 
+	0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffcecece, 0xffcecdce, 0xffcecace, 0xffcecace, 0xffc5c6c5, 
+	0xffc5c6c5, 0xffc0c1c0, 0xffbdbebd, 0xffb5b6b5, 0xffafafaf, 0xffaaa9aa, 0xffa5a2a5, 0xff9c9a9c, 
+	0x55343334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x66161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x99555255, 0x995a595a, 
+	0x995a5d5a, 0x995d605d, 0x99606260, 0x99636563, 0x99656465, 0x99656465, 0x99686768, 0x996b696b, 
+	0x996b6b6b, 0x996b6c6b, 0x996b6c6b, 0x996b6c6b, 0x99737173, 0x99707070, 0x99707070, 0x99737173, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737373, 0x99737373, 0x99737473, 0x99737473, 
+	0x99737573, 0x99737573, 0x99737776, 0x99737879, 0x99797879, 0x99767776, 0x99767776, 0x99767776, 
+	0x997b7b79, 0x997b7876, 0x997b7876, 0x997b7876, 0x997b797b, 0x997b797b, 0x997b7c7b, 0x997b7c7b, 
+	0x997b797b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99817f81, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 
+	0x997e807e, 0x997e807e, 0x997b7d7b, 0x997b7d7b, 0x997e7f7e, 0x997e7f7e, 0x99818081, 0x997e7f7e, 
+	0x99818081, 0x99818081, 0x99848284, 0x99848284, 0x997e807e, 0x997e807e, 0x997e807e, 0x997e807e, 
+	0x99818081, 0x997e7f7e, 0x997e7f7e, 0x99818081, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 
+	0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997b7d7b, 0x997e807e, 0x997e807e, 0x997e807e, 
+	0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 
+	0x997b7c7b, 0x997b7b7b, 0x997b797b, 0x997b7b7b, 0x99797b79, 0x99797b79, 0x99767876, 0x99767876, 
+	0x99797879, 0x99767776, 0x99767776, 0x99767776, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737473, 0x99737173, 0x99737173, 0x99737173, 0x99707070, 0x99707070, 0x996e6f6e, 0x996e6f6e, 
+	0x996b6c6b, 0x996b6c6b, 0x996b6b6b, 0x996b696b, 0x99636563, 0x99636563, 0x99606160, 0x995d5d5d, 
+	0x995a5552, 0x99524e4d, 0x994a4847, 0x99424142, 0x77101010, 0x77000000, 0x66000000, 0x11000000, 
+	0x00000400, 0x00000400, 0x776e6d6e, 0xffa5a2a5, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffbdbebd, 
+	0xffc0c1c0, 0xffc0c1c0, 0xffc3c4c3, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc8c9c8, 0xffcbcccb, 
+	0xffceccce, 0xffcecdce, 0xffcecece, 0xffcecece, 0xffced1d3, 0xffced1d3, 0xffced1d3, 0xffced2d6, 
+	0xffd3d4d6, 0xffd3d4d6, 0xffd3d4d6, 0xffd3d4d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 0xffd6d5d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6dbd6, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 
+	0xffdedcd9, 0xffdedcd9, 0xffdedcd9, 0xffdedcd9, 0xffdedcde, 0xffdedcde, 0xffdedfde, 0xffdedfde, 
+	0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdee0de, 0xffdedfde, 0xffdedfde, 0xffdedfde, 
+	0xffe4e1e4, 0xffe4e1e4, 0xffe1e0e1, 0xffe1e0e1, 0xffe1e1e1, 0xffe1e1e1, 0xffe4e4e4, 0xffe0e0e0, 
+	0xffe3e0e3, 0xffe3e0e3, 0xffe4e1e4, 0xffe5e2e5, 0xffe4e1e4, 0xffe4dfe4, 0xffe5e0e5, 0xffe5e2e5, 
+	0xffe6e2e5, 0xffe6e2e5, 0xffe6dfe6, 0xffe0dedf, 0xffdfdedf, 0xffdfdedf, 0xffdfdede, 0xffdfdcdd, 
+	0xffdedcdb, 0xffdedcdb, 0xffdedbde, 0xffdedbde, 0xffdbd9db, 0xffd9d8d9, 0xffd9d8d9, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d2d6, 0xffd0d1d0, 
+	0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecace, 0xffc5c6c5, 
+	0xffc5c6c5, 0xffc0c1c0, 0xffbdbebd, 0xffb5b6b5, 0xffafafaf, 0xffaaa9aa, 0xffa5a2a5, 0xff9c9a9c, 
+	0x55343334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x66161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x995a595a, 0x995a595a, 
+	0x995d605d, 0x99606260, 0x99606260, 0x99606260, 0x99656465, 0x99686768, 0x99686768, 0x996b696b, 
+	0x996b6d6b, 0x996b6d6b, 0x996b6b6b, 0x996b6c6b, 0x996e6f6e, 0x996e6f6e, 0x99707070, 0x99707070, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737373, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737776, 0x99737776, 0x99737776, 0x9973797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 
+	0x997b7b79, 0x997b7b79, 0x997b7b79, 0x997b7d7b, 0x997b7b7b, 0x997b7b7b, 0x997b7c7b, 0x997b7c7b, 
+	0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99817f81, 0x99817f81, 0x99817f81, 0x99817f81, 
+	0x997b7d7b, 0x997e807e, 0x997e807e, 0x997e807e, 0x99818081, 0x99818081, 0x99818081, 0x997e7f7e, 
+	0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99818381, 0x997e807e, 0x99818381, 0x997e807e, 
+	0x99848284, 0x99818081, 0x99818081, 0x99818081, 0x99848284, 0x997e7f7e, 0x99818081, 0x99818081, 
+	0x99818081, 0x997e7f7e, 0x99818081, 0x99818081, 0x997e807e, 0x997e807e, 0x997e807e, 0x997e807e, 
+	0x997e807e, 0x997e807e, 0x997e807e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 
+	0x997b7d7b, 0x997b7c7b, 0x997b7c7b, 0x997b7c7b, 0x99797b79, 0x99797b79, 0x99797b79, 0x99797b79, 
+	0x99797879, 0x99767776, 0x99797879, 0x99767776, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737473, 0x99737473, 0x99737373, 0x99737173, 0x99737173, 0x99707070, 0x99707070, 0x996e6f6e, 
+	0x996b6d6b, 0x996b6d6b, 0x996b6b6b, 0x996b696b, 0x99636563, 0x99636563, 0x995d5d5d, 0x995d5d5d, 
+	0x995a5552, 0x99524e4d, 0x99424142, 0x99424142, 0x77101010, 0x77000000, 0x66000000, 0x11000000, 
+	0x00000400, 0x00000400, 0x66373937, 0xffa5a2a5, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffbdbebd, 
+	0xffc0c1c0, 0xffc3c4c3, 0xffc3c4c3, 0xffc5c6c5, 0xffc5c6c5, 0xffc8c9c8, 0xffc8c9c8, 0xffcbcccb, 
+	0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecece, 0xffced0d0, 0xffced0d0, 0xffced1d3, 0xffced1d3, 
+	0xffd3d4d6, 0xffd3d4d6, 0xffd3d4d6, 0xffd3d4d6, 0xffd6d5d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 
+	0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6dbd6, 0xffd9d9d9, 0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, 
+	0xffdedcd9, 0xffdedddb, 0xffdedcd9, 0xffdedfde, 0xffdeddde, 0xffdeddde, 0xffdedfde, 0xffdedfde, 
+	0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdee1de, 0xffdee1de, 0xffdee0de, 0xffdee1de, 
+	0xffe1e0e1, 0xffe6e3e6, 0xffe6e3e6, 0xffe4e1e4, 0xffe4e4e4, 0xffe3e3e4, 0xffe3e3e3, 0xffe2e3e2, 
+	0xffe3e3e3, 0xffe4e2e4, 0xffe4e2e4, 0xffe4e2e4, 0xffe5e2e5, 0xffe5e3e5, 0xffe5e2e5, 0xffe5e2e5, 
+	0xffe5e2e5, 0xffe6e2e5, 0xffe6e3e5, 0xffe3e0e3, 0xffe0dfe0, 0xffe0dfdf, 0xffe0dfdf, 0xffe0dede, 
+	0xffdfdddd, 0xffdedcdb, 0xffdedcdb, 0xffdedbde, 0xffdbd9db, 0xffdedbde, 0xffdbd9db, 0xffd6d9d6, 
+	0xffd6d8d6, 0xffd6d8d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd6d4d6, 0xffd3d4d3, 
+	0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecace, 0xffc5c6c5, 
+	0xffc5c6c5, 0xffc0c1c0, 0xffbdbebd, 0xffb5b6b5, 0xffafafaf, 0xffa5a2a5, 0xffa5a2a5, 0xff9c9a9c, 
+	0x55343334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x66161616, 0x99424142, 0x99424142, 0x994a454a, 0x99504c50, 0x99555255, 0x995a595a, 
+	0x995a5d5a, 0x995d605d, 0x99606260, 0x99606260, 0x99686768, 0x99656465, 0x99686768, 0x996b696b, 
+	0x996b6b6b, 0x996b6c6b, 0x996b6c6b, 0x996b6d6b, 0x996e6f6e, 0x99707070, 0x99737173, 0x99707070, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737776, 0x99737776, 0x99737776, 0x99737776, 0x99797879, 0x997b797b, 0x997b797b, 0x997b797b, 
+	0x997b7b79, 0x997b7b79, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 
+	0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b827b, 0x99817f81, 0x99817f81, 0x99817f81, 0x99848284, 
+	0x99818381, 0x99818381, 0x997e807e, 0x99818381, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 
+	0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99818381, 0x99818381, 0x99818381, 0x99818381, 
+	0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 
+	0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848684, 0x99818381, 0x99848684, 0x99818381, 
+	0x99848684, 0x997e807e, 0x997e807e, 0x997e807e, 0x997b7f7b, 0x997b827b, 0x997b7f7b, 0x997b7d7b, 
+	0x997b7d7b, 0x997b7d7b, 0x997b7c7b, 0x997b7c7b, 0x99797b79, 0x997b7d7b, 0x99797b79, 0x99767876, 
+	0x997b797b, 0x997b797b, 0x99797879, 0x99767776, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x99737473, 0x99737473, 0x99737473, 0x99737373, 0x99737173, 0x99737173, 0x99707070, 0x99707070, 
+	0x996b6d6b, 0x996b6c6b, 0x996b6b6b, 0x996b696b, 0x99636563, 0x99606160, 0x995d5d5d, 0x995a595a, 
+	0x995a5552, 0x99524e4d, 0x99424142, 0x99424142, 0x77101010, 0x77000000, 0x55000000, 0x11000000, 
+	0x00000400, 0x00000400, 0x66373937, 0xffa5a2a5, 0xffa5aaa5, 0xffadb1ad, 0xffb5b7b5, 0xffbdbebd, 
+	0xffc0c1c0, 0xffc0c1c0, 0xffc3c4c3, 0xffc5c6c5, 0xffc8c9c8, 0xffc5c6c5, 0xffc8c9c8, 0xffcbcccb, 
+	0xffcecdce, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced0d0, 0xffced1d3, 0xffced2d6, 0xffced2d6, 
+	0xffd3d4d6, 0xffd3d4d6, 0xffd3d4d6, 0xffd3d4d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 
+	0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, 
+	0xffdedddb, 0xffdedddb, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 
+	0xffdee0de, 0xffdee1de, 0xffdee0de, 0xffdee3de, 0xffdee1de, 0xffdee1de, 0xffdee1de, 0xffdee3de, 
+	0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe3e4e3, 0xffe3e4e3, 0xffe2e4e2, 0xffe3e4e3, 
+	0xffe4e4e3, 0xffe4e3e4, 0xffe4e3e4, 0xffe4e4e5, 0xffe5e5e4, 0xffe5e3e5, 0xffe5e3e5, 0xffe5e2e5, 
+	0xffe6e2e5, 0xffe6e3e5, 0xffe6e3e5, 0xffe6e1e5, 0xffe3e0e3, 0xffe2dfe2, 0xffe0dfdf, 0xffe0dedf, 
+	0xffe0dfdc, 0xffdedcdc, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdbd9db, 0xffd6d9d6, 
+	0xffd6d9d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d5d6, 0xffd3d4d3, 
+	0xffd3d4d3, 0xffd0d1d0, 0xffd0d1d0, 0xffcecece, 0xffcecece, 0xffcecdce, 0xffcecace, 0xffc5c6c5, 
+	0xffc5c6c5, 0xffc0c1c0, 0xffbdbebd, 0xffb5b6b5, 0xffafafaf, 0xffaaa9aa, 0xffa5a2a5, 0xff9c9a9c, 
+	0x55343334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x66161616, 0x99424142, 0x99424142, 0x99424542, 0x994a4c4a, 0x99525252, 0x995a595a, 
+	0x995d5d5d, 0x99606160, 0x99606160, 0x99636563, 0x99656765, 0x99656765, 0x996b696b, 0x996b696b, 
+	0x996b6b6b, 0x996b6b6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d73, 0x996e7073, 0x99707373, 0x996e7073, 
+	0x99737373, 0x99737373, 0x99737473, 0x99737573, 0x99767776, 0x99767776, 0x99767776, 0x99767776, 
+	0x99767776, 0x99767776, 0x997b797b, 0x99797879, 0x997b797b, 0x997b797b, 0x997b7b7b, 0x997b7b7b, 
+	0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997e807e, 0x997b7d7b, 0x997e807e, 
+	0x997e8084, 0x997e8084, 0x997e8084, 0x997e8084, 0x99848284, 0x99848284, 0x99848284, 0x99848384, 
+	0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848384, 0x99848484, 0x99848484, 
+	0x99898484, 0x99898484, 0x99898484, 0x99898484, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 
+	0x99898789, 0x99868486, 0x99868486, 0x99868486, 0x99868486, 0x99868486, 0x99848284, 0x99868486, 
+	0x99848484, 0x99848384, 0x99848384, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848384, 
+	0x99848384, 0x99848384, 0x99848284, 0x99848284, 0x99818081, 0x997e7f7e, 0x997e7f7e, 0x99818081, 
+	0x997e7f7e, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7c7b, 0x997b7c7b, 0x997b7b7b, 0x997b7c7b, 
+	0x997b7b7b, 0x997b797b, 0x997b797b, 0x997b797b, 0x99767876, 0x99767876, 0x99767876, 0x99737573, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737373, 0x99737373, 0x99737073, 0x99736d73, 
+	0x99737173, 0x99706d6e, 0x996e6968, 0x996e6968, 0x99636563, 0x99606060, 0x99606060, 0x995d5a5d, 
+	0x99525152, 0x99525152, 0x99454345, 0x99454345, 0x77080c08, 0x77000000, 0x55000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x66373637, 0xffa5a2a5, 0xffadaaad, 0xffadaaad, 0xffb5b2b5, 0xffbdbabd, 
+	0xffc0bec0, 0xffc3c2c3, 0xffc3c2c3, 0xffc5c6c5, 0xffc8c9c8, 0xffc8c9c8, 0xffcbcccb, 0xffcbcccb, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffd0ced0, 0xffd0ced0, 0xffd3d2d3, 0xffd3d2d3, 0xffd3d2d3, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d9d6, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedcde, 0xffdedcde, 0xffdeddde, 0xffdeddde, 
+	0xffdedfde, 0xffdedfde, 0xffdee0e1, 0xffdedfde, 0xffdedfde, 0xffe1e1e1, 0xffe1e1e1, 0xffe1e1e1, 
+	0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e5e6, 
+	0xffe6e3e6, 0xffe6e3e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe5e3e5, 0xffe4e5e4, 0xffe3e5e3, 0xffe4e5e3, 
+	0xffe4e6e4, 0xffe5e5e4, 0xffe5e6e5, 0xffe5e7e5, 0xffe5e6e4, 0xffe6e6e5, 0xffe6e6e6, 0xffe6e4e6, 
+	0xffe6e4e6, 0xffe6e4e6, 0xffe6e4e6, 0xffe6e3e5, 0xffe6e3e5, 0xffe6e1e5, 0xffe5e2e4, 0xffdfdfde, 
+	0xffdfe1df, 0xffdfdede, 0xffdedfde, 0xffdeddde, 0xffdedcde, 0xffdedcde, 0xffdedbde, 0xffd9d9d9, 
+	0xffdbdcdb, 0xffd9d9d9, 0xffd9d9d9, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d4d6, 
+	0xffd6d4d6, 0xffd6d1d6, 0xffd6d1d6, 0xffced2d6, 0xffceced0, 0xffceced0, 0xffcecacb, 0xffc5c6c5, 
+	0xffc3c2c3, 0xffc3c2c3, 0xffc0bec0, 0xffb5b2b5, 0xffadabad, 0xffa5a5a5, 0xff9c9e9c, 0xff8c8e8c, 
+	0x442f322f, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x55000000, 0x99424142, 0x99424142, 0x99424542, 0x994a4c4a, 0x99525252, 0x995a595a, 
+	0x995d5d5d, 0x995d5d5d, 0x99606160, 0x99636563, 0x99636563, 0x99656765, 0x99686868, 0x996b696b, 
+	0x996b6b6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996e7073, 0x996e7073, 0x996e7073, 0x99707373, 
+	0x99737473, 0x99737473, 0x99737573, 0x99737573, 0x99767776, 0x99767776, 0x99767776, 0x99767776, 
+	0x997b797b, 0x99767776, 0x997b797b, 0x997b797b, 0x997b7b7b, 0x997b7b7b, 0x997b7c7b, 0x997b7c7b, 
+	0x997e7f7e, 0x997b7d7b, 0x997e7f7e, 0x997e7f7e, 0x997b7d7b, 0x997e807e, 0x997e807e, 0x99818381, 
+	0x997e8084, 0x997e8084, 0x99818384, 0x99818384, 0x99848384, 0x99848384, 0x99848384, 0x99848484, 
+	0x99868686, 0x99898a89, 0x99848284, 0x99868686, 0x99848684, 0x99848684, 0x99848684, 0x99848484, 
+	0x99898484, 0x99898484, 0x99898484, 0x99868784, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 
+	0x99898789, 0x99898789, 0x99868486, 0x99898789, 0x99898789, 0x99868486, 0x99868486, 0x99868486, 
+	0x99848684, 0x99848684, 0x99848484, 0x99848484, 0x99848484, 0x99848384, 0x99848484, 0x99848384, 
+	0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 0x99818081, 0x99818081, 0x99818081, 
+	0x99818081, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7c7b, 0x997b7c7b, 
+	0x997b7b7b, 0x997b7b7b, 0x997b7b7b, 0x997b797b, 0x99767876, 0x99767876, 0x99767876, 0x99767876, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737373, 0x99737373, 0x99737373, 0x99737073, 
+	0x99706d6e, 0x99706d6e, 0x996e6968, 0x996e6968, 0x99636563, 0x99606060, 0x99606060, 0x995d5a5d, 
+	0x99525152, 0x99525152, 0x99454345, 0x99373637, 0x77050805, 0x77000000, 0x55000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x33373637, 0xffa5a2a5, 0xffa5a2a5, 0xffadaaad, 0xffb5b2b5, 0xffbdbabd, 
+	0xffc0bec0, 0xffc3c2c3, 0xffc3c2c3, 0xffc5c6c5, 0xffc5c6c5, 0xffc8c9c8, 0xffcbcccb, 0xffcbcccb, 
+	0xffcecece, 0xffcecece, 0xffd0ced0, 0xffd3ced3, 0xffd3d2d3, 0xffd3d2d3, 0xffd3d2d3, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedcde, 0xffdeddde, 0xffdeddde, 0xffdedfde, 0xffdedfde, 
+	0xffdee0e1, 0xffdedfde, 0xffdee0e1, 0xffdee0e1, 0xffe1e1e1, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 
+	0xffe6e3e6, 0xffe6e3e6, 0xffe6e4e6, 0xffe6e4e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 
+	0xffe6e5e6, 0xffe6e8e6, 0xffe6e5e6, 0xffe6e8e6, 0xffe5e8e5, 0xffe4e7e4, 0xffe3e7e4, 0xffe4e5e4, 
+	0xffe5e6e5, 0xffe5e6e5, 0xffe5e7e5, 0xffe5e8e6, 0xffe6e7e5, 0xffe6e7e6, 0xffe6e6e6, 0xffe6e7e6, 
+	0xffe6e7e6, 0xffe6e4e6, 0xffe6e4e6, 0xffe6e3e6, 0xffe6e4e5, 0xffe6e3e5, 0xffe6e1e5, 0xffe4e2e3, 
+	0xffe1e1e1, 0xffdfdfde, 0xffdedfde, 0xffdeddde, 0xffdeddde, 0xffdeddde, 0xffdedbde, 0xffdbdcdb, 
+	0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd6d8d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d4d6, 
+	0xffd6d4d6, 0xffd6d4d6, 0xffd6d1d6, 0xffceced0, 0xffceced0, 0xffceced0, 0xffcecacb, 0xffc5c6c5, 
+	0xffc3c2c3, 0xffc3c2c3, 0xffbdbabd, 0xffb5b2b5, 0xffadabad, 0xffa5a5a5, 0xff9c9e9c, 0xee8c8e8c, 
+	0x332f322f, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x44000000, 0x99424142, 0x99424142, 0x99424542, 0x994a4c4a, 0x99525252, 0x995a595a, 
+	0x995d5d5d, 0x995d5d5d, 0x99606160, 0x99606160, 0x99636563, 0x99656765, 0x99686868, 0x996b696b, 
+	0x996b6b6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996e7073, 0x996e7073, 0x996e7073, 0x99707373, 
+	0x99737473, 0x99737573, 0x99737573, 0x99737573, 0x99767776, 0x99767776, 0x99797879, 0x99797879, 
+	0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b7c7b, 0x997b7c7b, 0x997b7c7b, 0x997b7d7b, 
+	0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997e807e, 0x99818381, 0x99818381, 0x99818381, 
+	0x99818384, 0x99818384, 0x99818384, 0x99818384, 0x99848384, 0x99848684, 0x99848684, 0x99848484, 
+	0x99868686, 0x99868686, 0x99868686, 0x99868686, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 
+	0x99868784, 0x99868784, 0x99868784, 0x99868784, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 
+	0x99898789, 0x99898789, 0x99898789, 0x99898789, 0x998c8a8c, 0x99898789, 0x99898789, 0x99898789, 
+	0x99848684, 0x99848684, 0x99848684, 0x99848484, 0x99848684, 0x99848484, 0x99848484, 0x99848384, 
+	0x99848484, 0x99848384, 0x99848384, 0x99848484, 0x99848284, 0x99848284, 0x99818081, 0x99848284, 
+	0x99818081, 0x99818081, 0x997e7f7e, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7c7b, 
+	0x997b7d7b, 0x997b7b7b, 0x997b7b7b, 0x997b797b, 0x99797b79, 0x99797b79, 0x99767876, 0x99767876, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737373, 0x99737373, 0x99737373, 0x99737073, 
+	0x99706d6e, 0x99706d6e, 0x996e6968, 0x996b6563, 0x99636563, 0x99606060, 0x995d5a5d, 0x995a555a, 
+	0x99525152, 0x99454345, 0x99454345, 0x88292829, 0x77030403, 0x77000000, 0x44000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x11000000, 0xffa5a2a5, 0xffa5a2a5, 0xffadaaad, 0xffb5b2b5, 0xffbdbabd, 
+	0xffc0bec0, 0xffc3c2c3, 0xffc3c2c3, 0xffc3c2c3, 0xffc5c6c5, 0xffc8c9c8, 0xffc8c9c8, 0xffcbcccb, 
+	0xffcecece, 0xffcecece, 0xffd0ced0, 0xffd3ced3, 0xffd3d2d3, 0xffd3d2d3, 0xffd3d2d3, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffdedbde, 0xffdedcde, 0xffdeddde, 0xffdeddde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 
+	0xffdee0e1, 0xffdee0e1, 0xffdee1e4, 0xffdee1e4, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 
+	0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e5e6, 
+	0xffe6e5e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe8e9e7, 0xffebeae9, 0xffeeeaed, 
+	0xffe9e7e8, 0xffe9e8ea, 0xffe6e8e8, 0xffe6e8e6, 0xffe6e9e6, 0xffe6e8e6, 0xffe7e9e7, 0xffe7e7e5, 
+	0xffe6e6e5, 0xffe7e7e6, 0xffe6e7e6, 0xffe6e4e6, 0xffe6e6e6, 0xffe6e3e5, 0xffe5e3e5, 0xffe5e1e4, 
+	0xffe1e1e1, 0xffdfe1df, 0xffdee0de, 0xffdedfde, 0xffdeddde, 0xffdeddde, 0xffdedcde, 0xffdbdcdb, 
+	0xffdbdcdb, 0xffdbdcdb, 0xffd9d9d9, 0xffd6d9d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d7d6, 0xffd6d4d6, 
+	0xffd6d4d6, 0xffd6d4d6, 0xffd6d4d6, 0xffceced0, 0xffceced0, 0xffceced0, 0xffcecacb, 0xffc5c6c5, 
+	0xffc3c2c3, 0xffc0bec0, 0xffbdbabd, 0xffb5b2b5, 0xffadabad, 0xffa5a5a5, 0xff9c9e9c, 0xdd8c8e8c, 
+	0x22000400, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x44000000, 0x882c2b2c, 0x99424142, 0x99424542, 0x99424542, 0x994a4c4a, 0x995a595a, 
+	0x995a595a, 0x995d5d5d, 0x995d5d5d, 0x99606160, 0x99636563, 0x99656765, 0x996b696b, 0x996b696b, 
+	0x996b6b6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996e7073, 0x996e7073, 0x99707373, 0x99707373, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99767776, 0x99767776, 0x997b797b, 0x997b797b, 
+	0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 
+	0x997e7f7e, 0x997e7f7e, 0x99818081, 0x99848284, 0x99818381, 0x99818381, 0x99818381, 0x99818381, 
+	0x99818384, 0x99818384, 0x99818384, 0x99818384, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 
+	0x99868686, 0x99868686, 0x99868686, 0x99868686, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 
+	0x99848a84, 0x99868784, 0x99868784, 0x99848a84, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 
+	0x998c8a8c, 0x99898789, 0x99898789, 0x998c8a8c, 0x998c8a8c, 0x99898789, 0x99898789, 0x99898789, 
+	0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 
+	0x99848684, 0x99848684, 0x99848484, 0x99848484, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 
+	0x997e7f7e, 0x99818081, 0x997e7f7e, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 
+	0x997b7d7b, 0x997b7d7b, 0x997b7c7b, 0x997b7b7b, 0x99797b79, 0x99797b79, 0x99797b79, 0x99767876, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737373, 0x99737373, 0x99737073, 
+	0x99706d6e, 0x996e6968, 0x996e6968, 0x996b6563, 0x99606060, 0x99606060, 0x995d5a5d, 0x995a555a, 
+	0x99525152, 0x99454345, 0x99454345, 0x88292829, 0x77030403, 0x77000000, 0x33000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0xdda5a2a5, 0xffa5a2a5, 0xffadaaad, 0xffb5b2b5, 0xffbdbabd, 
+	0xffbdbabd, 0xffc0bec0, 0xffc3c2c3, 0xffc3c2c3, 0xffc5c6c5, 0xffc8c9c8, 0xffcbcccb, 0xffcbcccb, 
+	0xffcecece, 0xffd0ced0, 0xffd0ced0, 0xffd0ced0, 0xffd3d2d3, 0xffd3d2d3, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffdedcde, 0xffdeddde, 0xffdeddde, 0xffdeddde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 
+	0xffdee0e1, 0xffdee1e4, 0xffdee3e6, 0xffdee3e6, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffe6e7e6, 
+	0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe7e9e7, 0xffe8e8e8, 
+	0xffeaece9, 0xffe7e9e6, 0xffe6e9e6, 0xffe6ebe6, 0xffe6e9e6, 0xffe7e9e7, 0xffe9e9e9, 0xffe7e7e6, 
+	0xffe6e6e6, 0xffe6e7e7, 0xffe7e4e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e4e5, 0xffe5e3e5, 0xffe4e1e4, 
+	0xffe2e1e2, 0xffdfe0df, 0xffdee0de, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdeddde, 0xffdedfde, 
+	0xffdbdcdb, 0xffdbdcdb, 0xffdbdcdb, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d4d6, 0xffd6d1d6, 0xffceced0, 0xffceced0, 0xffcecacb, 0xffcec6c5, 0xffc3c2c3, 
+	0xffc3c2c3, 0xffc0bec0, 0xffbdbabd, 0xffb5b2b5, 0xffadabad, 0xff9c9e9c, 0xff9c9e9c, 0xbb5d605d, 
+	0x22000400, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x22000000, 0x77262826, 0x993a3d3a, 0x99424142, 0x99424142, 0x994d4c4d, 0x99525152, 
+	0x99525452, 0x995a5a5a, 0x99636163, 0x99636163, 0x99656565, 0x99656565, 0x996b696b, 0x996b696b, 
+	0x996b6c6e, 0x996b6c6e, 0x996b6f70, 0x996b6f70, 0x99737173, 0x99737173, 0x99737173, 0x99737473, 
+	0x99737576, 0x99737576, 0x99737576, 0x99737576, 0x99767876, 0x99797b79, 0x99797b79, 0x99797b79, 
+	0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997e7c7e, 0x997b7d7b, 0x997b7d7b, 0x997e807e, 0x997e807e, 
+	0x99848084, 0x99848084, 0x99848384, 0x99848384, 0x99868486, 0x99868486, 0x99868486, 0x99868486, 
+	0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99868786, 0x99868786, 0x99868786, 0x99848684, 
+	0x99868886, 0x99868886, 0x99868886, 0x99868886, 0x99868886, 0x99868886, 0x99868886, 0x99868886, 
+	0x998c888c, 0x998c888c, 0x998c888c, 0x998c888c, 0x99898a89, 0x99868686, 0x99898a89, 0x99898a89, 
+	0x998c888c, 0x998c888c, 0x998c888c, 0x998c8b8c, 0x99898b89, 0x99868886, 0x99868886, 0x99868886, 
+	0x99868786, 0x99868786, 0x99868786, 0x99868786, 0x99868786, 0x99848684, 0x99848684, 0x99868786, 
+	0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848284, 0x99868686, 0x99848284, 0x99848284, 
+	0x99848384, 0x99848384, 0x99848284, 0x99848284, 0x997e807e, 0x997e807e, 0x997e807e, 0x997b7d7b, 
+	0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7b7b, 0x997b7b7b, 0x997b797b, 0x997b797b, 
+	0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99737573, 0x99707370, 0x99707370, 0x996e706e, 
+	0x996b6d6b, 0x99686968, 0x99656565, 0x99656565, 0x99636163, 0x99636163, 0x995d5c5d, 0x99585658, 
+	0x994a494a, 0x994a494a, 0x994a494a, 0x77191b19, 0x77000000, 0x77000000, 0x22000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0xaa736d73, 0xff9fa29f, 0xff9fa29f, 0xffb5b6b5, 0xffb5b6b5, 
+	0xffbdbabd, 0xffbdbabd, 0xffc5c2c5, 0xffc5c2c5, 0xffc8c6c8, 0xffc8c6c8, 0xffcecace, 0xffcecace, 
+	0xffd0cdd0, 0xffd0cdd0, 0xffd3d0d3, 0xffd3d0d3, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d4d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d8d6, 0xffd6d8d6, 0xffd6d9d6, 0xffdedbde, 0xffdedcde, 0xffdedcde, 0xffdedcde, 
+	0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffe1e1e1, 0xffe1e1e1, 0xffe1e1e1, 
+	0xffe6e3e6, 0xffe6e3e6, 0xffe6e4e6, 0xffe6e4e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 
+	0xffe6e7e6, 0xffe6e8e9, 0xffe6e8e9, 0xffe6e7e6, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe6e7e6, 
+	0xffefebe6, 0xffefebe6, 0xffefebe6, 0xffefebe6, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 
+	0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffedeaed, 0xffede9ed, 
+	0xffeae8e9, 0xffe5e7e9, 0xffe8e7e9, 0xffe7e7e6, 0xffe6e6e6, 0xffe6e6e5, 0xffe5e6e5, 0xffe3e4e3, 
+	0xffe3e3e3, 0xffe1e1e1, 0xffe1e1e1, 0xffe1e0e1, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedddb, 
+	0xffdedddb, 0xffdedcd9, 0xffdedcd9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd3d4d3, 0xffd0d1d0, 0xffcecece, 0xffcecece, 0xffc8cacb, 0xffc3c6c8, 0xffc5c2c5, 
+	0xffc5c2c5, 0xffbdbcbd, 0xffb5b5b5, 0xffadaead, 0xffadaead, 0xffadaead, 0xff8f908f, 0x774a4d4a, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x11000000, 0x66131413, 0x993a3d3a, 0x99424142, 0x99424142, 0x99474647, 0x994d4c4d, 
+	0x99525452, 0x995a5a5a, 0x995a5a5a, 0x99636163, 0x99656565, 0x99656565, 0x99656565, 0x996b696b, 
+	0x996b6c6e, 0x996b6c6e, 0x996b6f70, 0x996b6f70, 0x99737173, 0x99737173, 0x99737173, 0x99737373, 
+	0x99737573, 0x99737576, 0x99737576, 0x99737576, 0x99767876, 0x99767876, 0x99767876, 0x99797b79, 
+	0x997e7c7e, 0x997e7c7e, 0x99817f81, 0x99817f81, 0x997b7d7b, 0x997e807e, 0x997e807e, 0x997e807e, 
+	0x99848384, 0x99848384, 0x99848384, 0x99848384, 0x99868486, 0x99868486, 0x99868486, 0x99868486, 
+	0x99868786, 0x99868786, 0x99868786, 0x99868786, 0x99868786, 0x99898889, 0x99868786, 0x99868786, 
+	0x99868886, 0x99868886, 0x99898b89, 0x99898b89, 0x99868886, 0x99898b89, 0x99898b89, 0x99898b89, 
+	0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x99898a89, 0x99898a89, 0x99898a89, 0x99898a89, 
+	0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x99868886, 0x99898b89, 0x99868886, 0x99868886, 
+	0x99898889, 0x99898889, 0x99898889, 0x99868786, 0x99868786, 0x99868786, 0x99848684, 0x99868786, 
+	0x99848684, 0x99868786, 0x99898889, 0x99848684, 0x99868686, 0x99848284, 0x99868686, 0x99868686, 
+	0x99848384, 0x99848484, 0x99848284, 0x99848384, 0x99818381, 0x997e807e, 0x997e807e, 0x997e807e, 
+	0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7c7b, 0x997b7b7b, 0x997b7b7b, 
+	0x997b797b, 0x99797879, 0x99767776, 0x99767776, 0x99737573, 0x99707370, 0x99707370, 0x996b6d6b, 
+	0x99686968, 0x99686968, 0x99656565, 0x99636163, 0x99636163, 0x995d5c5d, 0x99585658, 0x99585658, 
+	0x994a494a, 0x994a494a, 0x99313231, 0x77000400, 0x77000000, 0x66000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x554d494d, 0xff9fa29f, 0xff9fa29f, 0xff9fa29f, 0xffb5b6b5, 
+	0xffb5b2b5, 0xffbdbabd, 0xffbdbabd, 0xffc5c2c5, 0xffc8c6c8, 0xffc8c6c8, 0xffc8c6c8, 0xffcecace, 
+	0xffd0cdd0, 0xffd0cdd0, 0xffd3d0d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d4d6, 0xffd6d5d6, 
+	0xffd6d7d6, 0xffd6d9d6, 0xffd6d9d6, 0xffd6d9d6, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedcde, 
+	0xffdedfde, 0xffdedfde, 0xffdee0de, 0xffdee0de, 0xffe1e1e1, 0xffe1e1e1, 0xffe1e1e1, 0xffe1e1e1, 
+	0xffe6e5e6, 0xffe6e4e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 
+	0xffe6e9ec, 0xffe6e8e9, 0xffe6e9ec, 0xffe6e9ec, 0xffe9e9e9, 0xffececec, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffefece9, 0xffefebe6, 0xffefece9, 0xffefece9, 0xffefebef, 0xffefecef, 0xffefecef, 0xffefecef, 
+	0xffefecef, 0xffefecef, 0xffefecef, 0xffefecef, 0xffefebef, 0xffeeecef, 0xffeeeced, 0xffede9ed, 
+	0xffede9ed, 0xffede7ec, 0xffece7ec, 0xffeae7ea, 0xffe7e7e7, 0xffe6e6e6, 0xffe5e6e5, 0xffe3e5e3, 
+	0xffe3e4e3, 0xffe4e4e4, 0xffe1e1e1, 0xffe1e0e1, 0xffe1e0e1, 0xffe1e0e1, 0xffdedfde, 0xffdedfde, 
+	0xffdedfde, 0xffdedddb, 0xffdedddb, 0xffdbdcdb, 0xffdbdcdb, 0xffd9d9d9, 0xffd9d9d9, 0xffd6d7d6, 
+	0xffd3d4d3, 0xffd3d4d3, 0xffd0d1d0, 0xffcecece, 0xffcecece, 0xffc8cacb, 0xffc3c6c8, 0xffc5c2c5, 
+	0xffbdbcbd, 0xffbdbcbd, 0xffb5b5b5, 0xffadaead, 0xffadaead, 0xffadaead, 0xff8f908f, 0x44313331, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x55000000, 0x993a3d3a, 0x99424142, 0x99424142, 0x99424142, 0x994d4c4d, 
+	0x99525452, 0x995a5a5a, 0x995a5a5a, 0x995a5a5a, 0x99606160, 0x99606160, 0x99656565, 0x996b696b, 
+	0x996b696b, 0x996b6c6e, 0x996b6f70, 0x996b6f70, 0x99737173, 0x99737173, 0x99737373, 0x99737373, 
+	0x99737573, 0x99737576, 0x99737576, 0x99737579, 0x99767876, 0x99767876, 0x99797b79, 0x997b7d7b, 
+	0x99817f81, 0x997e7c7e, 0x997e7c7e, 0x99817f81, 0x997e807e, 0x997e807e, 0x99818381, 0x99818381, 
+	0x99848384, 0x99848384, 0x99848384, 0x99848384, 0x99868486, 0x99898789, 0x99868486, 0x99898789, 
+	0x99868786, 0x99868786, 0x99868786, 0x99868786, 0x99898889, 0x99898889, 0x998c8a8c, 0x99898889, 
+	0x99898b89, 0x99898b89, 0x99898b89, 0x99898b89, 0x99898b89, 0x99898b89, 0x99898b89, 0x99898b89, 
+	0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x998c8e8c, 0x998c8e8c, 0x99898a89, 0x998c8e8c, 0x99898a89, 
+	0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x99898b89, 0x99898b89, 0x99898b89, 0x99868886, 
+	0x998c8a8c, 0x998c8a8c, 0x99898889, 0x99868786, 0x998c8a8c, 0x99898889, 0x99868786, 0x99868786, 
+	0x99868786, 0x99898889, 0x998c8a8c, 0x99868786, 0x99868686, 0x99868686, 0x99868686, 0x99868686, 
+	0x99848484, 0x99848484, 0x99848484, 0x99848384, 0x99818381, 0x997e807e, 0x997e807e, 0x997e807e, 
+	0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7b7b, 0x997b797b, 
+	0x997b797b, 0x997b797b, 0x99767776, 0x99767776, 0x99737573, 0x99707370, 0x996e706e, 0x996b6d6b, 
+	0x99686968, 0x99686968, 0x99656565, 0x99636163, 0x99636163, 0x995d5c5d, 0x99585658, 0x99525152, 
+	0x994a494a, 0x994a494a, 0x88313231, 0x77000400, 0x77000000, 0x55000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x22262426, 0xee9fa29f, 0xff9fa29f, 0xff9fa29f, 0xff9fa29f, 
+	0xffb5b2b5, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffc3c2c3, 0xffc3c2c3, 0xffc8c6c8, 0xffcecace, 
+	0xffcecace, 0xffd0cdd0, 0xffd3d0d3, 0xffd3d0d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d5d6, 0xffd6d5d6, 
+	0xffd6d8d6, 0xffd6d7d6, 0xffd6d9d6, 0xffd6d9d6, 0xffdedbde, 0xffdedbde, 0xffdedcde, 0xffdedfde, 
+	0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdee0de, 0xffe1e1e1, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 
+	0xffe6e4e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e7e6, 0xffe9e8e9, 0xffe6e7e6, 0xffe9e8e9, 
+	0xffe6e9ec, 0xffe6e9ec, 0xffe6e9ec, 0xffe6e9ec, 0xffececec, 0xffececec, 0xffececec, 0xffececec, 
+	0xffefedec, 0xffefece9, 0xffefece9, 0xffefece9, 0xffefecef, 0xffefecef, 0xffefedef, 0xffefecef, 
+	0xffefedef, 0xffefedef, 0xffefedef, 0xffefefef, 0xffefedef, 0xffefedef, 0xffeeecee, 0xffeee9ee, 
+	0xffede9ed, 0xffedeaec, 0xffeceaec, 0xffe9eae9, 0xffe8e7e8, 0xffe7e7e7, 0xffe7e5e7, 0xffe4e4e4, 
+	0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e1e4, 0xffe4e1e4, 0xffe1e0e1, 0xffe1e0e1, 0xffdedfde, 
+	0xffdedfde, 0xffdedddb, 0xffdedcd9, 0xffdbdcdb, 0xffdbdcdb, 0xffd9d9d9, 0xffd9d9d9, 0xffd6d7d6, 
+	0xffd3d4d3, 0xffd0d1d0, 0xffd0d1d0, 0xffcecece, 0xffc8cacb, 0xffc3c6c8, 0xffbdc2c5, 0xffc5c2c5, 
+	0xffbdbcbd, 0xffb5b5b5, 0xffb5b5b5, 0xffadaead, 0xffadaead, 0xff8f908f, 0xbb707370, 0x11191a19, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x33000000, 0x77131413, 0x99424142, 0x99424142, 0x99424142, 0x99424142, 
+	0x994a4d4a, 0x99525452, 0x99525452, 0x995a5a5a, 0x995a5d5a, 0x99606160, 0x99656565, 0x99656565, 
+	0x996b696b, 0x996b6c6e, 0x996b6c6e, 0x996b6f70, 0x99737173, 0x99737173, 0x99737373, 0x99737573, 
+	0x99737576, 0x99737576, 0x99737576, 0x99737579, 0x99767876, 0x99797b79, 0x997b7d7b, 0x997b7d7b, 
+	0x99817f81, 0x997e7c7e, 0x99817f81, 0x99848284, 0x997e807e, 0x99818381, 0x99818381, 0x99818381, 
+	0x99848384, 0x99848684, 0x99848684, 0x99848684, 0x99898789, 0x99898789, 0x99898789, 0x998c8a8c, 
+	0x99898889, 0x99868786, 0x99898889, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 
+	0x99898b89, 0x99898b89, 0x99898b89, 0x998c8e8c, 0x99898b89, 0x998c8e8c, 0x99898b89, 0x998c8e8c, 
+	0x998c8b8c, 0x998c8e8c, 0x998c8b8c, 0x998c8b8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 
+	0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x998c8b8c, 0x99898b89, 0x998c8e8c, 0x99898b89, 0x99898b89, 
+	0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x99898889, 0x99898889, 
+	0x99898889, 0x99868786, 0x99868786, 0x99868786, 0x99898a89, 0x99868686, 0x99868686, 0x99868686, 
+	0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99818381, 0x99818381, 0x99818381, 0x997e807e, 
+	0x99848284, 0x997e7f7e, 0x99818081, 0x997e7f7e, 0x997b7d7b, 0x997b7d7b, 0x997b7c7b, 0x997b7c7b, 
+	0x997b797b, 0x99797879, 0x99767776, 0x99767776, 0x99737573, 0x996e706e, 0x996b6d6b, 0x996b6d6b, 
+	0x99686968, 0x99656565, 0x99636163, 0x99636163, 0x995d5c5d, 0x99585658, 0x99585658, 0x99525152, 
+	0x994a494a, 0x994a494a, 0x77191b19, 0x77000400, 0x77000000, 0x33000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x99737973, 0xff9fa29f, 0xff9fa29f, 0xff9fa29f, 
+	0xffadaaad, 0xffb5b2b5, 0xffbdbabd, 0xffbdbabd, 0xffbdbebd, 0xffc3c2c3, 0xffc8c6c8, 0xffc8c6c8, 
+	0xffcecace, 0xffd0cdd0, 0xffd0cdd0, 0xffd3d0d3, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d5d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d8d6, 0xffd6d9d6, 0xffd6d9d6, 0xffdedbde, 0xffdeddde, 0xffdedfde, 0xffdedfde, 
+	0xffdee1de, 0xffdedfde, 0xffdee0de, 0xffdee3de, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffe6e7e6, 
+	0xffe6e5e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe9e8e9, 0xffe9e8e9, 0xffe9e8e9, 0xffefebef, 
+	0xffe6ebef, 0xffe6e9ec, 0xffe6ebef, 0xffe6ebef, 0xffececec, 0xffececec, 0xffececec, 0xffececec, 
+	0xffefedec, 0xffefedec, 0xffefefef, 0xffefefef, 0xffefedef, 0xffefefef, 0xffefedef, 0xffefefef, 
+	0xffefedef, 0xffefefef, 0xffefedef, 0xffefedef, 0xffefedef, 0xffefedef, 0xffeeedef, 0xffeeeded, 
+	0xffeeebed, 0xffece9eb, 0xffeaeaea, 0xffe8e9e8, 0xffe8e9e8, 0xffe8e9e8, 0xffe6e7e7, 0xffe6e7e6, 
+	0xffe6e7e6, 0xffe4e4e4, 0xffe4e4e4, 0xffe6e3e6, 0xffe4e1e4, 0xffe6e3e6, 0xffe1e0e1, 0xffdedfde, 
+	0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdbdcdb, 0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffd6d7d6, 
+	0xffd3d4d3, 0xffd0d1d0, 0xffcecece, 0xffc8cacb, 0xffc3c6c8, 0xffc3c6c8, 0xffbdc2c5, 0xffbdbcbd, 
+	0xffbdbcbd, 0xffb5b5b5, 0xffadaead, 0xffadaead, 0xffadaead, 0xff8f908f, 0x66525552, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x11000000, 0x55080408, 0x882c2b2c, 0x99424142, 0x99424142, 0x99424142, 
+	0x99424142, 0x994d4e4d, 0x99525552, 0x99525552, 0x995a5a5d, 0x99636163, 0x99636163, 0x99636163, 
+	0x9968686e, 0x9968686e, 0x996b6d73, 0x996b6d73, 0x99736d6b, 0x9973706e, 0x99737370, 0x99737573, 
+	0x99737573, 0x99767776, 0x99767776, 0x997b797b, 0x997b797b, 0x997b797b, 0x997e7c7e, 0x997e7c7e, 
+	0x997b7d7b, 0x997b7d7b, 0x997e807e, 0x99818381, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 
+	0x99848684, 0x99848684, 0x99848684, 0x99868786, 0x998c8886, 0x998c8886, 0x998c8886, 0x998c8b89, 
+	0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998f8c8f, 0x998f8c8f, 0x998c8a8c, 0x998c8a8c, 
+	0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 
+	0x998f908f, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 
+	0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 
+	0x998f8c8f, 0x998c8a8c, 0x998f8c8f, 0x998c8a8c, 0x998c8e8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 
+	0x9986888c, 0x9986888c, 0x9986888c, 0x9986888c, 0x998c8886, 0x998c8886, 0x998c8886, 0x998c8886, 
+	0x99868786, 0x99868786, 0x99848684, 0x99848684, 0x99848684, 0x99848484, 0x99848484, 0x99848384, 
+	0x99818381, 0x997e807e, 0x997e807e, 0x997e807e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99797b79, 
+	0x9973797b, 0x9973797b, 0x99737779, 0x99737476, 0x99737173, 0x99737173, 0x996e6d6e, 0x99686968, 
+	0x9963656b, 0x9963656b, 0x99606065, 0x99606065, 0x995a5d5a, 0x995a5d5a, 0x994a4c4a, 0x994a4c4a, 
+	0x994a494a, 0x88343234, 0x77080408, 0x77080408, 0x66000000, 0x11000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000400, 0xdda5a2a5, 0xffa5a2a5, 0xffa5a2a5, 
+	0xffaaa9aa, 0xffafafaf, 0xffb5b6b5, 0xffb5b6b5, 0xffbdbcbd, 0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, 
+	0xffc8cacb, 0xffcbced0, 0xffcbced0, 0xffcbced0, 0xffd6d1d0, 0xffd6d4d3, 0xffd6d4d3, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd9d9d9, 0xffd9d9d9, 0xffdbdcdb, 0xffdeddde, 0xffdeddde, 0xffdeddde, 0xffdeddde, 
+	0xffdedfde, 0xffe1e1e1, 0xffe1e1e1, 0xffe4e4e4, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e5e6, 0xffe6e5e6, 
+	0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe9e9e9, 0xffefebe6, 0xffefebe6, 0xffefebe6, 0xffefece9, 
+	0xffefebef, 0xffefebef, 0xffefebef, 0xffefedf1, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xfff1f2f1, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xfff0efef, 0xfff3f2f2, 0xfff1efef, 
+	0xfff1eeef, 0xffeeebec, 0xffeeebee, 0xffebe9ea, 0xffe9e9e9, 0xffe6e7e7, 0xffe6e7e6, 0xffe6e8e6, 
+	0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe4e4e4, 0xffe4e4e4, 0xffe1e1e1, 0xffe1e1e1, 0xffdedfde, 
+	0xffdedfde, 0xffdedfde, 0xffdbdddb, 0xffd6dbde, 0xffd6dbde, 0xffd6d8db, 0xffd6d5d9, 0xffd6d7de, 
+	0xffd0d1d6, 0xffd0d1d6, 0xffcbccce, 0xffc5c6c5, 0xffc5c6c5, 0xffc0c2c0, 0xffc0c2c0, 0xffbdbebd, 
+	0xffb5b5b5, 0xffb5b5b5, 0xffadabad, 0xffa5a6a5, 0xffa5a6a5, 0xcc707170, 0x11080808, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x33000000, 0x66161616, 0x99424142, 0x99424142, 0x99424142, 
+	0x99424142, 0x99474847, 0x994d4e4d, 0x99525552, 0x995a5a5d, 0x995a5a5d, 0x99636163, 0x99636163, 
+	0x9968686e, 0x9968686e, 0x9968686e, 0x996b6d73, 0x99736d6b, 0x99737370, 0x99737573, 0x99737573, 
+	0x99767776, 0x99767776, 0x99767776, 0x997b797b, 0x997e7c7e, 0x99817f81, 0x997e7c7e, 0x99817f81, 
+	0x997e807e, 0x997e807e, 0x997e807e, 0x997e807e, 0x99848284, 0x99848686, 0x99848686, 0x99848686, 
+	0x99848684, 0x99868786, 0x99868786, 0x99868786, 0x998c8886, 0x998c8886, 0x998c8b89, 0x998c8b89, 
+	0x998c8c8f, 0x998c8c8f, 0x998c8a8c, 0x998c8c8f, 0x998f8c8f, 0x99918f91, 0x998f8c8f, 0x99918f91, 
+	0x998f8f8f, 0x998f8f8f, 0x998f8f8f, 0x998f8f8f, 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, 
+	0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, 
+	0x998f908f, 0x998f908f, 0x998c8e8c, 0x998f908f, 0x998c8e8c, 0x998f908f, 0x998f908f, 0x998c8e8c, 
+	0x99918f91, 0x998f8c8f, 0x998f8c8f, 0x998f8c8f, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8a8c, 
+	0x99898b8c, 0x99898b8c, 0x99898b8c, 0x99898b8c, 0x998c8b89, 0x998c8886, 0x998c8b89, 0x998c8886, 
+	0x99898889, 0x99868786, 0x99868786, 0x99868786, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 
+	0x99818381, 0x99818381, 0x99818381, 0x997e807e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99797b79, 
+	0x9973797b, 0x99737779, 0x99737779, 0x99737476, 0x99737173, 0x996e6d6e, 0x99686968, 0x99686968, 
+	0x9963656b, 0x9963656b, 0x99606065, 0x995d5a60, 0x995a5d5a, 0x995a5d5a, 0x994a4c4a, 0x994a4c4a, 
+	0x99343234, 0x771e1b1e, 0x77080408, 0x77080408, 0x33000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x55373937, 0xeea5a2a5, 0xffa5a2a5, 
+	0xffa5a2a5, 0xffaaa9aa, 0xffafafaf, 0xffb5b6b5, 0xffbdbcbd, 0xffbdbcbd, 0xffc5c2c5, 0xffc5c2c5, 
+	0xffc8cacb, 0xffc8cacb, 0xffc8cacb, 0xffced2d6, 0xffd6d1d0, 0xffd6d4d3, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd9d9d9, 0xffd9d9d9, 0xffd9d9d9, 0xffdbdcdb, 0xffdeddde, 0xffdee0de, 0xffdeddde, 0xffdee0de, 
+	0xffe1e1e1, 0xffe1e1e1, 0xffe4e4e4, 0xffe4e4e4, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e7e6, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffefebe6, 0xffefebe6, 0xffefece9, 0xffefece9, 
+	0xffefedf1, 0xffefedf1, 0xffefedf1, 0xffefedf1, 0xffefefef, 0xfff1f0f1, 0xffefefef, 0xfff1f0f1, 
+	0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 
+	0xfff4f4f4, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 0xfff4f4f4, 0xfff1f2f1, 0xfff2f2f1, 0xfff1f0f0, 
+	0xfff1efef, 0xffefeded, 0xffede9ed, 0xffece9ec, 0xffeae9ea, 0xffe9e9e9, 0xffe9e9e9, 0xffe6e7e6, 
+	0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffdedfde, 
+	0xffdedfde, 0xffdedfde, 0xffdbdddb, 0xffd6dbde, 0xffd6d8db, 0xffd6d8db, 0xffd6d5d9, 0xffd0d1d6, 
+	0xffd0d1d6, 0xffcbccce, 0xffcbccce, 0xffc5c6c5, 0xffc5c6c5, 0xffc0c2c0, 0xffbabeba, 0xffbdbebd, 
+	0xffb5b5b5, 0xffb5b5b5, 0xffadabad, 0xffa5a6a5, 0xdda5a6a5, 0x443c3d3c, 0x00080808, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x55000000, 0x77161616, 0x99424142, 0x99424142, 
+	0x99424142, 0x99424142, 0x99474847, 0x994d4e4d, 0x99525458, 0x995a5a5d, 0x99636163, 0x99636163, 
+	0x99656268, 0x9968686e, 0x9968686e, 0x996b6d73, 0x9973706e, 0x99737370, 0x99737573, 0x99737573, 
+	0x99767776, 0x99767776, 0x997b797b, 0x997b797b, 0x99817f81, 0x99817f81, 0x99817f81, 0x99817f81, 
+	0x997e807e, 0x997e807e, 0x99818381, 0x99818381, 0x99848686, 0x99848686, 0x99848686, 0x99848686, 
+	0x99868786, 0x99868786, 0x998c8a8c, 0x998c8a8c, 0x998c8b89, 0x998c8b89, 0x998c8b89, 0x998c8b89, 
+	0x998c8c8f, 0x998c8c8f, 0x998c8c8f, 0x998c8f91, 0x99918f91, 0x99918f91, 0x99949294, 0x99949294, 
+	0x99919091, 0x99919091, 0x998f8f8f, 0x99919091, 0x998f908f, 0x99919391, 0x998f908f, 0x99919391, 
+	0x998f908f, 0x998f908f, 0x99919391, 0x998f908f, 0x998f908f, 0x998f908f, 0x99919391, 0x998f908f, 
+	0x998f908f, 0x998f908f, 0x99919391, 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, 0x998f908f, 
+	0x99918f91, 0x99918f91, 0x99918f91, 0x99918f91, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 
+	0x99898b8c, 0x99898b8c, 0x99898b8c, 0x99898b8c, 0x998c8b89, 0x998c8b89, 0x998c8b89, 0x998c8886, 
+	0x998c8a8c, 0x99868786, 0x99868786, 0x99868786, 0x99848684, 0x99848684, 0x99848684, 0x99848484, 
+	0x99818381, 0x99818381, 0x99818381, 0x99818381, 0x997b7d7b, 0x997b7d7b, 0x99797b79, 0x99797b79, 
+	0x99737779, 0x99737779, 0x99737476, 0x99737173, 0x99737173, 0x996e6d6e, 0x99686968, 0x99636563, 
+	0x9963656b, 0x99606065, 0x99606065, 0x995d5a60, 0x995a5d5a, 0x994a4c4a, 0x994a4c4a, 0x994a4c4a, 
+	0x771e1b1e, 0x77080408, 0x77080408, 0x55080408, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x00000400, 0x886e6d6e, 0xffa5a2a5, 
+	0xffa5a2a5, 0xffa5a2a5, 0xffaaa9aa, 0xffafafaf, 0xffb5b5b5, 0xffbdbcbd, 0xffc5c2c5, 0xffc5c2c5, 
+	0xffc5c6c5, 0xffc8cacb, 0xffc8cacb, 0xffcbced0, 0xffd6d1d0, 0xffd6d4d3, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd9d9d9, 0xffd9d9d9, 0xffdbdcdb, 0xffdbdcdb, 0xffdee0de, 0xffdee0de, 0xffdee0de, 0xffdee0de, 
+	0xffe1e1e1, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffe6e5e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffececec, 0xffececec, 0xffefedec, 0xffefece9, 0xffefedec, 0xffefedec, 
+	0xffefedf1, 0xffefedf1, 0xffefedf1, 0xffeff0f4, 0xfff1f0f1, 0xfff1f0f1, 0xfff4f2f4, 0xfff4f2f4, 
+	0xfff1f2f1, 0xfff4f4f4, 0xfff1f2f1, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 
+	0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff2f1f1, 
+	0xfff0edee, 0xffeceae9, 0xffeae8e7, 0xffeae7ea, 0xffe8e6e8, 0xffeae9ea, 0xffe9e9e9, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe4e4e4, 0xffe4e4e4, 0xffe4e4e4, 0xffdedfde, 
+	0xffdedfde, 0xffdbdddb, 0xffdbdddb, 0xffd6d8db, 0xffd6d8db, 0xffd6d5d9, 0xffd6d2d6, 0xffd0d1d6, 
+	0xffcbccce, 0xffcbccce, 0xffc5c6c5, 0xffc5c6c5, 0xffc0c2c0, 0xffbabeba, 0xffbabeba, 0xffb5b5b5, 
+	0xffb5b5b5, 0xffadabad, 0xffadabad, 0xeea5a6a5, 0x773c3d3c, 0x00080808, 0x00080808, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x55000000, 0x77161616, 0x99424142, 
+	0x99424142, 0x99424142, 0x99424142, 0x99474847, 0x994a4d52, 0x99525458, 0x995a5a5d, 0x99636163, 
+	0x99656268, 0x99656268, 0x9968686e, 0x9968686e, 0x99736d6b, 0x9973706e, 0x99737370, 0x99737573, 
+	0x99737573, 0x99767776, 0x99797879, 0x997b797b, 0x997e7c7e, 0x997e7c7e, 0x99817f81, 0x99848284, 
+	0x99818381, 0x99818381, 0x99818381, 0x99848684, 0x99848686, 0x99848686, 0x99848686, 0x99848a89, 
+	0x99898889, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8b89, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 
+	0x998c8f91, 0x998c8f91, 0x998c8f91, 0x998c9294, 0x99949294, 0x99949294, 0x99949294, 0x99949294, 
+	0x99949294, 0x99949294, 0x99949294, 0x99949294, 0x99919391, 0x99919391, 0x99919391, 0x99919391, 
+	0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x99919391, 
+	0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x99919391, 0x998f908f, 
+	0x99949294, 0x99949294, 0x99949294, 0x99949294, 0x998c928c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 
+	0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8b89, 0x998c8b89, 0x998c8b89, 0x998c8b89, 
+	0x998c8a8c, 0x998c8a8c, 0x99868786, 0x99868786, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 
+	0x99818381, 0x99818381, 0x997e807e, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99797b79, 0x99767876, 
+	0x99737476, 0x99737476, 0x99737173, 0x99737173, 0x996e6d6e, 0x99686968, 0x99686968, 0x99636563, 
+	0x99606065, 0x99606065, 0x995d5a60, 0x995a555a, 0x994a4c4a, 0x994a4c4a, 0x994a4c4a, 0x77292829, 
+	0x77080408, 0x77080408, 0x66080408, 0x11080408, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x00000400, 0x00000400, 0x996e6d6e, 
+	0xeea5a2a5, 0xffa5a2a5, 0xffa5a2a5, 0xffaaa9aa, 0xffadaead, 0xffb5b5b5, 0xffbdbcbd, 0xffc5c2c5, 
+	0xffc5c6c5, 0xffc5c6c5, 0xffc8cacb, 0xffcbced0, 0xffd6d1d0, 0xffd6d1d0, 0xffd6d4d3, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd9d9d9, 0xffdbdcdb, 0xffdbdcdb, 0xffdeddde, 0xffdeddde, 0xffdee0de, 0xffdee3de, 
+	0xffe4e4e4, 0xffe6e7e6, 0xffe4e4e4, 0xffe6e7e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6ebe6, 
+	0xffececec, 0xffececec, 0xffececec, 0xffececec, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffeff0f4, 0xffeff0f4, 0xffeff0f4, 0xffeff3f7, 0xfff7f3f7, 0xfff7f3f7, 0xfff7f3f7, 0xfff7f3f7, 
+	0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff7f7f7, 0xfff4f4f4, 0xfff4f4f4, 0xfff7f7f7, 
+	0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff5f5f4, 
+	0xffefeeeb, 0xffebe8e8, 0xffe8e5e8, 0xffe7e4e8, 0xffe8e5e8, 0xffeae8ea, 0xffe9e9e9, 0xffe6e9e6, 
+	0xffe6e9e6, 0xffe6e7e6, 0xffe6e8e6, 0xffe6e7e6, 0xffe4e4e4, 0xffe4e4e4, 0xffe1e1e1, 0xffdedfde, 
+	0xffdedfde, 0xffdbdddb, 0xffd6dbd6, 0xffd6d8db, 0xffd6d5d9, 0xffd6d2d6, 0xffd6d2d6, 0xffcbccce, 
+	0xffcbccce, 0xffcbccce, 0xffc5c6c5, 0xffc0c2c0, 0xffc0c2c0, 0xffbabeba, 0xffb5bab5, 0xffb5b5b5, 
+	0xffb5b5b5, 0xffadabad, 0xeea5a2a5, 0x773c3d3c, 0x11080808, 0x00080808, 0x00080808, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000000, 0x55000000, 0x77191419, 
+	0x882f2d2f, 0x99424142, 0x99424142, 0x99424142, 0x993c3b3c, 0x99525152, 0x99525152, 0x99525152, 
+	0x99636163, 0x99636163, 0x99636163, 0x99636163, 0x99636565, 0x996b7173, 0x996b7173, 0x996b7173, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 
+	0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 
+	0x99868886, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998f8f8f, 0x998f8f8f, 0x998f8f8f, 0x998f8f8f, 
+	0x99949094, 0x99949094, 0x99949094, 0x999c969c, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 
+	0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 
+	0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 
+	0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x998f9091, 
+	0x99949294, 0x99949294, 0x99949294, 0x99949294, 0x998f8c8f, 0x99949294, 0x99949294, 0x99949294, 
+	0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 
+	0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 
+	0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7973, 0x997b7973, 0x997b7973, 0x997b7973, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x99636563, 0x99636563, 0x99636563, 0x99636563, 
+	0x99525552, 0x99525552, 0x99525552, 0x99525552, 0x99525152, 0x88373637, 0x771b1b1b, 0x77000000, 
+	0x77000305, 0x66000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x77686968, 0xdd9c9e9c, 0xff9c9e9c, 0xff9c9e9c, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, 
+	0xffb8b9b8, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd9dbde, 0xffdee3e6, 0xffdee3e6, 0xffdee3e6, 
+	0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 
+	0xffe9e9e9, 0xffefefef, 0xffefefef, 0xffefefef, 0xfff1f0ef, 0xfff1f0ef, 0xfff1f0ef, 0xfff1f0ef, 
+	0xfff1f3f1, 0xfff1f3f1, 0xfff1f3f1, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 
+	0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 
+	0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff6f6f6, 
+	0xffefefef, 0xffeaeae9, 0xffe6e7e7, 0xffe5e4e5, 0xffe5e3e6, 0xffece9ed, 0xffefebef, 0xffe6e7e6, 
+	0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffc8c9c8, 0xffc5c6c5, 
+	0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xff9c9e9c, 
+	0xff9c9e9c, 0xcc9c9e9c, 0x55343534, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000000, 0x55000000, 
+	0x66080408, 0x771b181b, 0x99424142, 0x99424142, 0x993c3b3c, 0x993c3b3c, 0x99525152, 0x99525152, 
+	0x99555555, 0x99555555, 0x99636163, 0x99636163, 0x99636565, 0x99636565, 0x996b7173, 0x996b7173, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 
+	0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848384, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 
+	0x998c8e8c, 0x99868886, 0x998c8e8c, 0x998c8e8c, 0x998f8f8f, 0x99949694, 0x998f8f8f, 0x998f8f8f, 
+	0x99949094, 0x99949094, 0x99949094, 0x99949094, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 
+	0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 
+	0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 
+	0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x998f9091, 
+	0x99949294, 0x99949294, 0x99949294, 0x99949294, 0x99949294, 0x99949294, 0x998f8c8f, 0x99949294, 
+	0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x99868886, 
+	0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x99848384, 0x99848684, 0x99848684, 0x997e7f7e, 0x997e7f7e, 
+	0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x99767576, 0x997b7973, 0x997b7973, 0x9973706e, 0x9973706e, 
+	0x99737173, 0x99737173, 0x99656465, 0x99656465, 0x99636563, 0x99636563, 0x99636563, 0x99505150, 
+	0x99525552, 0x99525552, 0x99525552, 0x993a3b3a, 0x771b1b1b, 0x66000000, 0x77000000, 0x77000000, 
+	0x66000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x33343534, 0x99686968, 0xee9c9e9c, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, 
+	0xffb8b9b8, 0xffb8b9b8, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c8c3, 0xffc5c8c3, 0xffced2ce, 0xffced2ce, 
+	0xffd0d1d0, 0xffd0d1d0, 0xffd6dbd6, 0xffd6dbd6, 0xffd9dbde, 0xffd9dbde, 0xffdee3e6, 0xffdee3e6, 
+	0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e5e6, 0xffefebef, 0xffefebef, 0xffefebef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xfff1f0ef, 0xfff7f7f7, 0xfff1f0ef, 0xfff1f0ef, 
+	0xfff1f3f1, 0xfff1f3f1, 0xfff1f3f1, 0xfff1f3f1, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 
+	0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 
+	0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff6f7f6, 
+	0xfff2f1f1, 0xffebeaea, 0xffe4e5e5, 0xffe3e1e4, 0xffe6e4e7, 0xffedeaed, 0xffefebef, 0xffe6e7e6, 
+	0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffced0ce, 0xffd6d7d6, 0xffc8c9c8, 0xffc8c9c8, 0xffc8c9c8, 0xffc5c6c5, 
+	0xffc5c6c5, 0xffc5c6c5, 0xffb8b7b8, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xdd9c9e9c, 
+	0x88686968, 0x33343534, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 
+	0x44080408, 0x66080408, 0x66080408, 0x771b181b, 0x993c3b3c, 0x993c3b3c, 0x993c3b3c, 0x993c3b3c, 
+	0x99474947, 0x99555555, 0x99555555, 0x99555555, 0x995a5958, 0x99636565, 0x99636565, 0x99636565, 
+	0x99686868, 0x996e6f6e, 0x996e6f6e, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x997e7f7e, 0x99848384, 0x99848384, 0x99848384, 0x99848384, 
+	0x99868886, 0x99868886, 0x99868886, 0x99868886, 0x998f8f8f, 0x99898889, 0x998f8f8f, 0x998f8f8f, 
+	0x99949094, 0x998c8b8c, 0x99949094, 0x99949094, 0x998f908f, 0x99949694, 0x998f908f, 0x99949694, 
+	0x998f908f, 0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99919291, 0x99919291, 0x99919291, 
+	0x99949694, 0x99949694, 0x99949694, 0x99949694, 0x99919291, 0x99919291, 0x99919291, 0x99919291, 
+	0x99949694, 0x9991908f, 0x9991908f, 0x9991908f, 0x998f9091, 0x998f9091, 0x998f9091, 0x998f9091, 
+	0x998f8e8f, 0x998f8e8f, 0x998f8e8f, 0x99949294, 0x99949294, 0x998f8c8f, 0x998f8c8f, 0x998f8c8f, 
+	0x998c8e8c, 0x998c8e8c, 0x998c8e8c, 0x99868886, 0x99868886, 0x99868886, 0x99868886, 0x99818381, 
+	0x99848384, 0x99848384, 0x99848384, 0x99848384, 0x997e7f7e, 0x997e7f7e, 0x99797879, 0x99797879, 
+	0x99767576, 0x99767576, 0x99767576, 0x99767576, 0x9973706e, 0x9973706e, 0x996b6768, 0x996b6768, 
+	0x99656465, 0x99656465, 0x99656465, 0x99585658, 0x99505150, 0x99505150, 0x99505150, 0x99505150, 
+	0x993a3b3a, 0x993a3b3a, 0x77212221, 0x66080808, 0x77000000, 0x77000000, 0x77000000, 0x44000000, 
+	0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x11000000, 0x44343534, 0xaa7b797b, 0xeeadaaad, 0xffadaaad, 0xffadaaad, 
+	0xffaaabaa, 0xffaaabaa, 0xffb8b9b8, 0xffb8b9b8, 0xffbdbdb8, 0xffc5c8c3, 0xffc5c8c3, 0xffc5c8c3, 
+	0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd3d2d6, 0xffd9dbde, 0xffd9dbde, 0xffd9dbde, 
+	0xffe1e0e1, 0xffe1e0e1, 0xffe1e0e1, 0xffe6e7e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 0xffe6e5e6, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xfff1f0ef, 0xfff1f0ef, 0xfff1f0ef, 0xfff1f0ef, 
+	0xfff1f3f1, 0xffecefec, 0xfff1f3f1, 0xfff1f3f1, 0xfff1f3f1, 0xfff7f7f7, 0xfff1f3f1, 0xfff7f7f7, 
+	0xfff4f3f4, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 
+	0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff4f3f4, 0xfff7f7f7, 0xfff4f3f4, 
+	0xfff5f5f4, 0xffeeedec, 0xffe4e4e5, 0xffe1e1e2, 0xffe3e1e3, 0xffe5e4e6, 0xffe6e4e6, 0xffe1dfde, 
+	0xffe1dfde, 0xffe1dfde, 0xffe1dfde, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffced0ce, 
+	0xffced0ce, 0xffced0ce, 0xffc5c5c5, 0xffc8c9c8, 0xffc8c9c8, 0xffbabcba, 0xffbabcba, 0xffb8b7b8, 
+	0xffb8b7b8, 0xffb8b7b8, 0xffaaa9aa, 0xffb5b2b5, 0xeeb5b2b5, 0xdd7b7b7e, 0x997b7b7e, 0x33343534, 
+	0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00080408, 0x22080408, 0x55080408, 0x66080408, 0x66101010, 0x77101010, 0x88262626, 0x883c3b3c, 
+	0x993a3d3a, 0x993a3d3a, 0x99474947, 0x99474947, 0x99524d4a, 0x99524d4a, 0x995a5958, 0x995a5958, 
+	0x99636163, 0x99636163, 0x99636163, 0x99686868, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 0x996b6d6b, 
+	0x99737173, 0x99737173, 0x99797879, 0x99797879, 0x99737573, 0x997b7c7b, 0x997b7c7b, 0x997b7c7b, 
+	0x997b7d7b, 0x997b7d7b, 0x99818381, 0x99818381, 0x99848284, 0x99848284, 0x99848284, 0x99848284, 
+	0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99848684, 
+	0x99898b89, 0x99848684, 0x99898b89, 0x99898b89, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 
+	0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 0x998c8a8c, 
+	0x998c8684, 0x998c8684, 0x998c8684, 0x998c8684, 0x9984868c, 0x9984868c, 0x9984868c, 0x9984868c, 
+	0x99848684, 0x99848684, 0x99848684, 0x99848684, 0x99898789, 0x99848284, 0x99848284, 0x99848284, 
+	0x99818381, 0x997b7d7b, 0x99818381, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 0x997b7d7b, 
+	0x997b7c7b, 0x997b7c7b, 0x99737573, 0x99737573, 0x99737173, 0x99737173, 0x99737173, 0x99737173, 
+	0x99706d70, 0x99706d70, 0x996b656b, 0x996b656b, 0x99635d63, 0x99635d63, 0x99635d63, 0x99635d63, 
+	0x99585658, 0x99585658, 0x994a494a, 0x994a494a, 0x993c3d3c, 0x993c3d3c, 0x993c3d3c, 0x88292829, 
+	0x77080808, 0x66080808, 0x77080808, 0x77080808, 0x77000000, 0x55000000, 0x22000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11191819, 0x33191819, 0x664a494a, 0xbb7b797b, 
+	0xdd9c9e9c, 0xee9c9e9c, 0xffaaabaa, 0xffaaabaa, 0xffb5b2ad, 0xffb5b2ad, 0xffb5b2ad, 0xffbdbdb8, 
+	0xffc5bec5, 0xffc5bec5, 0xffcbc8cb, 0xffcbc8cb, 0xffcecace, 0xffcecace, 0xffcecace, 0xffd3d2d6, 
+	0xffd6d2d6, 0xffd6d2d6, 0xffdbd9db, 0xffdbd9db, 0xffd6dbd6, 0xffd6dbd6, 0xffdee0de, 0xffdee0de, 
+	0xffdedfde, 0xffdedfde, 0xffe4e4e4, 0xffe4e4e4, 0xffe6e3de, 0xffe6e3de, 0xffece9e6, 0xffece9e6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 
+	0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 
+	0xffefebe6, 0xffeeeae5, 0xffdedfde, 0xffddddde, 0xffdeddde, 0xffd6d7d6, 0xffd6d7d6, 0xffdbd7d6, 
+	0xffdbd7d6, 0xffdbd7d6, 0xffd6cece, 0xffcecece, 0xffcecece, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c5c5, 
+	0xffc5c5c5, 0xffc5c5c5, 0xffbdbabd, 0xffbabcba, 0xffadaead, 0xffadaead, 0xffadaead, 0xffaaa9aa, 
+	0xffaaa9aa, 0xee9c9a9c, 0xdd9c9a9c, 0xaa7b7b7e, 0x55424347, 0x22080c10, 0x11080c10, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x11000000, 0x22000000, 0x44000000, 0x55030103, 0x66050305, 0x66080408, 
+	0x66131213, 0x77131213, 0x88262326, 0x883a353a, 0x88313131, 0x99313131, 0x994a494a, 0x994a494a, 
+	0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, 
+	0x99636563, 0x99636563, 0x99636563, 0x99636563, 0x996b6d73, 0x996b6d73, 0x996b6d73, 0x996b6d73, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x997b757b, 0x997b757b, 0x997b757b, 0x997b757b, 
+	0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 
+	0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 
+	0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 
+	0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 0x997b797b, 
+	0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 0x99737573, 
+	0x996b716b, 0x996b716b, 0x996b716b, 0x996b716b, 0x996b696b, 0x996b696b, 0x996b696b, 0x996b696b, 
+	0x99636563, 0x99636563, 0x99636563, 0x99636563, 0x995a595a, 0x995a595a, 0x995a595a, 0x995a595a, 
+	0x99525152, 0x99525152, 0x99525152, 0x99525152, 0x994a494a, 0x994a494a, 0x994a494a, 0x994a494a, 
+	0x99313531, 0x99313531, 0x88313531, 0x88212321, 0x77191419, 0x77100d10, 0x66080708, 0x66000000, 
+	0x77000000, 0x77000000, 0x66000000, 0x55000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030403, 0x11080c08, 
+	0x22000400, 0x442f312f, 0x885d5d5d, 0xbb8c8a8c, 0xdd9c9a9c, 0xdd9c9a9c, 0xee9c9a9c, 0xff9c9a9c, 
+	0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 
+	0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 
+	0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcececd, 0xffcccdce, 0xffcccdcc, 
+	0xffcbc9cc, 0xffc9c8c9, 0xffc7c4c7, 0xffc2c1c3, 0xffbebdbf, 0xffb6babd, 0xffb5babd, 0xffadaead, 
+	0xffadaead, 0xffadaead, 0xffadaead, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a2a5, 
+	0xffa5a2a5, 0xffa5a2a5, 0xffa5a2a5, 0xee9c9a9c, 0xee9c9a9c, 0xdd9c9a9c, 0xdd9c9a9c, 0xbb7b797b, 
+	0x77525252, 0x44292b29, 0x22000400, 0x11080c08, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x33000000, 0x44000000, 
+	0x55000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66191819, 0x77191819, 0x77191819, 
+	0x88313331, 0x88313331, 0x88313331, 0x88313331, 0x993f3d3f, 0x993f3d3f, 0x993f3d3f, 0x993f3d3f, 
+	0x99424342, 0x99424342, 0x99424342, 0x99424342, 0x99474a4d, 0x99474a4d, 0x99474a4d, 0x99474a4d, 
+	0x99504d50, 0x99504d50, 0x99504d50, 0x99504d50, 0x99555155, 0x99555155, 0x99555155, 0x99555155, 
+	0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 
+	0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 
+	0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 
+	0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 0x99555455, 
+	0x99505150, 0x99505150, 0x99505150, 0x99505150, 0x99505150, 0x99505150, 0x99505150, 0x99505150, 
+	0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x994a4d4a, 0x99474847, 0x99474847, 0x99474847, 0x99474847, 
+	0x99424342, 0x99424342, 0x99424342, 0x99424342, 0x993c3b3c, 0x993c3b3c, 0x993c3b3c, 0x993c3b3c, 
+	0x99373737, 0x99373737, 0x88373737, 0x88373737, 0x88313131, 0x88313131, 0x77191819, 0x77191819, 
+	0x77101210, 0x66000000, 0x66000000, 0x66000000, 0x77000000, 0x77000000, 0x66000000, 0x55000000, 
+	0x44000000, 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000400, 0x00000400, 0x00000400, 0x11000400, 0x11000400, 0x22000400, 0x44343634, 0x77686868, 
+	0x99797b79, 0xbb797b79, 0xcc797b79, 0xcc797b79, 0xddadaead, 0xeeadaead, 0xeeadaead, 0xeeadaead, 
+	0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 
+	0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcccbcb, 0xffc8c8c9, 0xffc6c5c6, 
+	0xffb3b2b4, 0xffadadaf, 0xffb0b0b3, 0xffafb1b4, 0xffb1b5b9, 0xffb4b9bc, 0xffb5babd, 0xffadaead, 
+	0xffadaead, 0xffadaead, 0xeeadaead, 0xeea5a6a5, 0xeea5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xcca5a2a5, 
+	0xcca5a2a5, 0xbb6e6d6e, 0x886e6d6e, 0x66343334, 0x55343334, 0x22343334, 0x11000000, 0x11000400, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11000000, 0x22000000, 0x33000000, 0x44000000, 0x55000000, 0x55000000, 0x55000000, 0x66000000, 
+	0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66080408, 0x66080408, 0x77080408, 0x77242024, 
+	0x77212221, 0x77212221, 0x77212221, 0x88212221, 0x88242726, 0x88242726, 0x88242726, 0x88242726, 
+	0x882c282c, 0x882c282c, 0x882c282c, 0x882c282c, 0x882f2d2f, 0x882f2d2f, 0x882f2d2f, 0x992f2d2f, 
+	0x882f2e2f, 0x882f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 
+	0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 
+	0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 
+	0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 0x992f2e2f, 
+	0x992c2d2c, 0x992c2d2c, 0x992c2d2c, 0x992c2d2c, 0x992c2d2c, 0x882c2d2c, 0x882c2d2c, 0x882c2d2c, 
+	0x88292829, 0x88292829, 0x88292829, 0x88292829, 0x88242624, 0x88242624, 0x88242624, 0x88242624, 
+	0x88212221, 0x88212221, 0x88212221, 0x88212221, 0x771e1e1e, 0x771e1e1e, 0x771e1e1e, 0x771e1e1e, 
+	0x77000400, 0x66000400, 0x66000400, 0x66000400, 0x66000000, 0x66000000, 0x77000000, 0x77000000, 
+	0x77000000, 0x66000000, 0x66000000, 0x55000000, 0x44000000, 0x33000000, 0x11000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x22000400, 0x443a3d3a, 0x443a3d3a, 0x663a3d3a, 
+	0x663c3f3c, 0x773c3f3c, 0x88797b79, 0xaa797b79, 0xbb7e7f7e, 0xbb7e7f7e, 0xbb7e7f7e, 0xbb7e7f7e, 
+	0xcc848684, 0xcc848684, 0xcc848684, 0xcc848684, 0xcc898889, 0xdd898889, 0xdd898889, 0xdd898889, 
+	0xdd8c8b8c, 0xdd8c8b8c, 0xdd8c8b8c, 0xdd8c8b8c, 0xdd8c8b8c, 0xdd8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 
+	0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 
+	0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8c8b8c, 0xee8b8b8b, 0xee898989, 
+	0xee878588, 0xee848285, 0xcc7e7d80, 0xbb7b7c7f, 0xbb797c7e, 0xbb797c7e, 0xaa797c7e, 0xaa737473, 
+	0x88737473, 0x77737473, 0x663a3a3a, 0x55373a37, 0x44373a37, 0x33373a37, 0x22000400, 0x00000400, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x22000000, 
+	0x33000000, 0x44000000, 0x44000000, 0x55000000, 0x55080408, 0x55080408, 0x66080408, 0x66080408, 
+	0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000400, 0x66000400, 0x66000400, 0x66000400, 
+	0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 
+	0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 
+	0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 
+	0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 
+	0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 
+	0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 
+	0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66000400, 0x66000400, 0x66000400, 0x66000400, 
+	0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 
+	0x66000400, 0x66000400, 0x66000400, 0x55000400, 0x55000000, 0x44000000, 0x44000000, 0x33000000, 
+	0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 
+	0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 
+	0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 
+	0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080408, 0x00080407, 
+	0x00080408, 0x00060308, 0x00000400, 0x00010100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x44000000, 
+	0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x55000000, 0x55000000, 0x55000000, 
+	0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 
+	0x55000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 
+	0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x55000000, 0x55000000, 0x55000000, 
+	0x55000000, 0x55000000, 0x55000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 
+	0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 
+	0x55000000, 0x55000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 
+	0x44000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x22000000, 0x22000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030403, 0x00030403, 
+	0x00050505, 0x00050505, 0x00050505, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030403, 0x00030403, 0x00030403, 
+	0x00030303, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x11000000, 0x22000000, 0x22000000, 0x22000000, 0x33000000, 0x33000000, 
+	0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 
+	0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x22000000, 0x22000000, 
+	0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030403, 0x00050805, 0x11080c08, 
+	0x22101010, 0x22101010, 0x11101010, 0x11050505, 0x00000400, 0x00000100, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00050805, 0x11050805, 0x11080c08, 0x11080c08, 
+	0x11080808, 0x00030303, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x33000000, 0x22000000, 0x22000000, 0x22000000, 0x11000000, 
+	0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x11000000, 0x55050705, 0xaa101410, 0xcc191819, 0xcc191819, 0xcc191819, 0xcc191819, 
+	0xcc191c19, 0xcc191c19, 0xcc191c19, 0xcc191c19, 0xcc191c19, 0xcc191c19, 0xcc191c19, 0xcc191c19, 
+	0xcc191c19, 0xcc191c19, 0xcc191c19, 0xcc191c19, 0xcc191819, 0xcc191819, 0xcc191819, 0xbb191819, 
+	0x66080808, 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x44050405, 0x66100c10, 
+	0x99101010, 0xbb191819, 0xcc191819, 0xdd191819, 0xcc191819, 0xbb191819, 0x99101010, 0x77101010, 
+	0x44080408, 0x22030103, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11080808, 0x55080808, 0xbb4a494a, 0xdd8c8a8c, 0xeea5a6a5, 0xeea5a6a5, 0xeea5a6a5, 0xeea5a6a5, 
+	0xeeadaaad, 0xeeadaaad, 0xeeadaaad, 0xeeadaaad, 0xeeadaaad, 0xeeadaaad, 0xeeadaaad, 0xeeadaaad, 
+	0xeeadaaad, 0xeeadaaad, 0xeeadaaad, 0xeeadaaad, 0xeea5a6a5, 0xeea5a6a5, 0xeea5a6a5, 0xee8c8e8c, 
+	0xbb3c3b3c, 0x77080808, 0x22080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00080408, 0x00080408, 0x00080408, 0x11080408, 0x33080408, 0x88080408, 0xcc4a464a, 0xee4a464a, 
+	0xee8c8a8c, 0xffa7a6a7, 0xffa7a6a7, 0xffa7a6a7, 0xffafb3af, 0xff898c89, 0xee898c89, 0xee636563, 
+	0xcc4a494a, 0x88080408, 0x44080408, 0x22080408, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x22080808, 0xaa080808, 0xdd8c8a8c, 0xffcecace, 0xffcbcccb, 0xffcbcccb, 0xffcbcccb, 0xffcbcccb, 
+	0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, 
+	0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, 0xffd3d0d3, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffbdbebd, 
+	0xeea5a2a5, 0xbb080808, 0x33080808, 0x00080808, 0x00000000, 0x110e0d0e, 0x110e0d0e, 0x331b1b1b, 
+	0x44212021, 0x55212021, 0x44212021, 0x22101010, 0x11100f10, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x110b0b0b, 0x110e0f0e, 0x330e0f0e, 0x441b1e1b, 0x330e0f0e, 
+	0x220b0b0b, 0x110b0b0b, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00080408, 0x00080408, 0x11080408, 0x55080408, 0xaa4a464a, 0xee8c888c, 0xff8c888c, 0xffcecace, 
+	0xffc3c2c3, 0xffc3c2c3, 0xffc3c2c3, 0xffdedfde, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffafb3af, 
+	0xff8c8e8c, 0xee8c8e8c, 0xbb4a494a, 0x66080408, 0x22000000, 0x11000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x22080808, 0xcc080808, 0xee8c8a8c, 0xffcecace, 0xffcbcccb, 0xffcbcccb, 0xffdedfde, 0xffdedfde, 
+	0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 
+	0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffa5a2a5, 0xdd080808, 0x44080808, 0x00080808, 0x00000000, 0x110e0d0e, 0x331b1b1b, 0x551b1b1b, 
+	0x77212021, 0x88212021, 0x88212021, 0x55212021, 0x33211e21, 0x11100f10, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x110b0b0b, 0x22161616, 0x441b1e1b, 0x661b1e1b, 0x661b1e1b, 0x551b1e1b, 
+	0x44161616, 0x220b0b0b, 0x000b0b0b, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00080408, 0x11080408, 0x66080408, 0xcc3c3b3c, 0xee8c888c, 0xffcecace, 0xffcecace, 0xffcecace, 
+	0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffced2ce, 0xffced2ce, 0xee8c8e8c, 0xcc4a494a, 0x771b1a1b, 0x22000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x22080808, 0xcc080808, 0xee8c8a8c, 0xffcecace, 0xffcbcccb, 0xffdedfde, 0xffdedfde, 0xffdedfde, 
+	0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 
+	0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffa5a2a5, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x220e0d0e, 0x551b1b1b, 0x77292829, 
+	0x99313131, 0xaa313131, 0xbb313131, 0xaa313131, 0x77312d31, 0x33211e21, 0x11100f10, 0x11000000, 
+	0x00000000, 0x110b0b0b, 0x22161616, 0x44212021, 0x88292d29, 0x99292d29, 0x99292d29, 0x77292d29, 
+	0x66212021, 0x33161616, 0x110b0b0b, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11080408, 0x55080408, 0xcc3c3b3c, 0xffa5aaa5, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 
+	0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xff8c8e8c, 0xcc524d52, 0x771b1a1b, 0x22000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x33101010, 0xcc101010, 0xee9a9a9a, 0xffdedfde, 0xffd6d7d6, 0xffdedfde, 0xffdedfde, 0xffe6e7e6, 
+	0xffe6e7e6, 0xffe6e7e6, 0xffecedec, 0xffecedec, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 0xffe4e5e4, 0xffe4e5e4, 0xffdedfde, 0xffdedfde, 
+	0xffb5b2b5, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x220e0d0e, 0x551b1b1b, 0x88292829, 
+	0xaa292d29, 0xbb292d29, 0xcc292d29, 0xcc212321, 0xbb2c2e2c, 0x882c2e2c, 0x442c2e2c, 0x22101010, 
+	0x11191419, 0x22191419, 0x44292629, 0x99292629, 0xbb292729, 0xbb313131, 0xaa313131, 0x99313131, 
+	0x77212421, 0x44161816, 0x110b0c0b, 0x00000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x33080808, 0xbb4a4a4a, 0xee8c8c8c, 0xffcecece, 0xffd6d7d6, 0xffd6d7d6, 0xffdeddde, 0xffdeddde, 
+	0xffdee3de, 0xffe6e9e6, 0xffe6e9e6, 0xffe6e9e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 
+	0xffe6e7e6, 0xffdedbde, 0xffdedbde, 0xffd6ced6, 0xee8c8e8c, 0xbb4a494a, 0x55080408, 0x11080408, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080808, 0x00080808, 0x00080808, 0x00080808, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x33101010, 0xcc101010, 0xee9a9a9a, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffe6e7e6, 0xffe6e7e6, 
+	0xffecedec, 0xffecedec, 0xfff1f4f1, 0xfff1f4f1, 0xfff1f3f1, 0xfff1f3f1, 0xfff1f3f1, 0xfff1f3f1, 
+	0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xffe9ece9, 0xffe9ece9, 0xffe4e5e4, 0xffdedfde, 
+	0xffb5b2b5, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x110e0d0e, 0x441b1b1b, 0x88292829, 
+	0xbb292d29, 0xcc212321, 0xcc212321, 0xdd191a19, 0xdd1e1f1e, 0xcc1e1f1e, 0x992c2e2c, 0x552c2e2c, 
+	0x33292629, 0x553a373a, 0x993a373a, 0xcc292629, 0xcc211e21, 0xcc292729, 0xbb292729, 0xbb292729, 
+	0x88212421, 0x33161816, 0x110b0c0b, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x11000000, 
+	0x88080808, 0xee8c8c8c, 0xffcecece, 0xffcecece, 0xffd6d7d6, 0xffdeddde, 0xffe6e4e6, 0xffe6e4e6, 
+	0xffe6e9e6, 0xffe6e9e6, 0xffeff0ef, 0xffeff0ef, 0xfff1f2f1, 0xffececec, 0xffececec, 0xffececec, 
+	0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffdedbde, 0xffced2ce, 0xee8c8e8c, 0x99080408, 0x33080408, 
+	0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x110e0c0e, 0x11131413, 0x22131413, 0x22131413, 0x22131413, 
+	0x110e120e, 0x110e120e, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x33101010, 0xcc101010, 0xee9a9a9a, 0xffdedfde, 0xffdedfde, 0xffe6e7e6, 0xffe6e7e6, 0xffefefef, 
+	0xfff1f4f1, 0xfff1f4f1, 0xfff1f4f1, 0xfff1f4f1, 0xfff4f7f4, 0xfff4f7f4, 0xfff4f7f4, 0xfff4f7f4, 
+	0xfff4f6f4, 0xfff4f6f4, 0xfff4f6f4, 0xfff4f6f4, 0xffeff3ef, 0xffe9ece9, 0xffe9ece9, 0xffe4e5e4, 
+	0xffb5b2b5, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x000e0d0e, 0x221b1b1b, 0x55292829, 
+	0xaa292d29, 0xcc212321, 0xdd191a19, 0xdd191a19, 0xee101010, 0xdd101010, 0xdd1e1f1e, 0xaa3a3d3a, 
+	0x774a494a, 0x993a373a, 0xcc292629, 0xdd191419, 0xdd211e21, 0xdd211e21, 0xcc292729, 0xaa292729, 
+	0x66212421, 0x33161816, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x44050405, 
+	0xcc4a4a4a, 0xff8c8c8c, 0xffcecece, 0xffcecece, 0xffdeddde, 0xffe6e4e6, 0xffe6e4e6, 0xffefebef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f1, 
+	0xffeff3ef, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffced2ce, 0xff8c8e8c, 0xcc4a494a, 0x55080408, 
+	0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x110e0c0e, 0x221b181b, 0x441e201e, 0x661e201e, 0x66292d29, 0x66292d29, 
+	0x551b1f1b, 0x331b1f1b, 0x110e120e, 0x11000400, 0x00030303, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x33101010, 0xcc101010, 0xee9a9a9a, 0xffdedfde, 0xffdedfde, 0xffe6e7e6, 0xffefefef, 0xffefefef, 
+	0xfff1f4f1, 0xfff1f4f1, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 
+	0xfff7fbf7, 0xfff7fbf7, 0xfff4f6f4, 0xfff4f6f4, 0xffeff3ef, 0xffeff3ef, 0xffe9ece9, 0xffe4e5e4, 
+	0xffb5b2b5, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x110e0d0e, 0x221b1b1b, 
+	0x66292d29, 0xbb292d29, 0xdd191a19, 0xee101010, 0xee101010, 0xee101010, 0xee101010, 0xdd1e1f1e, 
+	0xbb292629, 0xdd292629, 0xee191419, 0xee191419, 0xdd191419, 0xdd191419, 0xcc292729, 0x88313131, 
+	0x44212421, 0x330b0c0b, 0x22000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x66100c10, 
+	0xee4a4a4a, 0xffcecece, 0xffcecece, 0xffcecece, 0xffe6e4e6, 0xffe6e4e6, 0xffefebef, 0xffefebef, 
+	0xffeff0ef, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 
+	0xffeff3ef, 0xffeff3ef, 0xffe6e7e6, 0xffe6e7e6, 0xffced2ce, 0xffced2ce, 0xee4a494a, 0x88080408, 
+	0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x110e0c0e, 0x331b181b, 0x66292429, 0x88292d29, 0xaa292d29, 0xaa292d29, 0xaa292d29, 
+	0x99292d29, 0x77292d29, 0x551b1f1b, 0x220e120e, 0x11080808, 0x00030303, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffe6e3e6, 0xffece9ec, 0xfff1f0f1, 0xfff1f0f1, 
+	0xfff7f7f7, 0xfffafafa, 0xfffcfcfc, 0xfffcfcfc, 0xfffffcff, 0xfffffcff, 0xfffffcff, 0xfffffcff, 
+	0xfffffcff, 0xfffffcff, 0xfffffbff, 0xfffffbff, 0xfff1f4f1, 0xfff1f4f1, 0xffecedec, 0xffe6e7e6, 
+	0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00050405, 0x11100c10, 
+	0x33212321, 0x77313531, 0xbb313531, 0xee101210, 0xee080808, 0xee080808, 0xee080808, 0xee080808, 
+	0xee100c10, 0xee100c10, 0xee100c10, 0xee100c10, 0xee101010, 0xdd212021, 0xaa313131, 0x55313131, 
+	0x33101010, 0x33050505, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x11000000, 0x99101310, 
+	0xee8c8e8c, 0xffc3c4c3, 0xffdedfde, 0xffdedfde, 0xffe6e7e6, 0xffecedec, 0xffecedec, 0xfff1f4f1, 
+	0xfff7f7f7, 0xfff7f7f7, 0xfffafafa, 0xfffafafa, 0xfffafafa, 0xfffafafa, 0xfffafafa, 0xfff7f7f7, 
+	0xfffaf6fa, 0xfff4f0f4, 0xfff4f0f4, 0xffefebef, 0xffe6e7e6, 0xffe6e7e6, 0xeea2a3a2, 0xaa191c19, 
+	0x33000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030303, 
+	0x11080808, 0x221e201e, 0x66292d29, 0xaa292d29, 0xbb292d29, 0xcc262726, 0xcc262726, 0xcc262726, 
+	0xcc262726, 0xbb292d29, 0x88262726, 0x55242224, 0x220b0c0b, 0x11000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffe6e3e6, 0xffece9ec, 0xfff1f0f1, 0xfff7f7f7, 
+	0xfff7f7f7, 0xfffcfcfc, 0xfffcfcfc, 0xffffffff, 0xfffffeff, 0xfffffeff, 0xfffffeff, 0xfffffeff, 
+	0xfffffeff, 0xfffffeff, 0xfffffeff, 0xfffffbff, 0xfff7fbf7, 0xfff1f4f1, 0xfff1f4f1, 0xffe6e7e6, 
+	0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x11050405, 
+	0x11101210, 0x33212321, 0x77313531, 0xcc313531, 0xee080808, 0xee080808, 0xff080808, 0xff080808, 
+	0xff050705, 0xee050705, 0xee0b090b, 0xee100c10, 0xee101010, 0xbb313131, 0x77313131, 0x44212021, 
+	0x33050505, 0x33000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x22000000, 0xbb191c19, 
+	0xffa7a9a7, 0xffc3c4c3, 0xffdedfde, 0xffdedfde, 0xffe6e7e6, 0xffecedec, 0xfff1f4f1, 0xfff1f4f1, 
+	0xfffafafa, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffffbff, 0xfffaf6fa, 0xfff4f0f4, 0xfff4f0f4, 0xffe6e7e6, 0xffe6e7e6, 0xffa2a3a2, 0xcc191c19, 
+	0x44000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00050505, 
+	0x11131413, 0x551e201e, 0x99292d29, 0xbb292d29, 0xcc242224, 0xcc242224, 0xdd242224, 0xdd242224, 
+	0xdd242224, 0xcc262726, 0xbb292d29, 0x88262726, 0x33161816, 0x110b0c0b, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffe6e3e6, 0xffece9ec, 0xfff1f0f1, 0xfff7f7f7, 
+	0xfffafafa, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xfffffeff, 0xfffffcff, 0xfff7fbf7, 0xfff1f4f1, 0xfff1f4f1, 0xffe6e7e6, 
+	0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11000000, 0x22101210, 0x44212321, 0x88313531, 0xcc2f332f, 0xee080808, 0xff080808, 0xff080808, 
+	0xff050705, 0xff050705, 0xee0b090b, 0xee100c10, 0xcc212021, 0x99424142, 0x66212021, 0x44101010, 
+	0x33000000, 0x33000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x22000000, 0xcc191c19, 
+	0xffa7a9a7, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffecedec, 0xfff1f4f1, 0xfff1f4f1, 0xfff7fbf7, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffffbff, 0xfffaf6fa, 0xfffaf6fa, 0xfff4f0f4, 0xffe6e7e6, 0xffe6e7e6, 0xffa2a3a2, 0xdd191c19, 
+	0x44000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080808, 
+	0x22131413, 0x66292d29, 0xaa292d29, 0xcc1e201e, 0xdd242224, 0xdd242224, 0xdd242224, 0xdd211c21, 
+	0xdd211c21, 0xcc242224, 0xbb292d29, 0x99292d29, 0x55212421, 0x220b0c0b, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffece9ec, 0xfff1f0f1, 0xfff1f0f1, 0xfff7f7f7, 
+	0xfffafafa, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xfffffeff, 0xfffffcff, 0xfff7fbf7, 0xfff1f4f1, 0xfff1f4f1, 0xffecedec, 
+	0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x11000000, 0x22101210, 0x55313531, 0x99424942, 0xdd1b1e1b, 0xff080808, 0xff080808, 
+	0xff000400, 0xff050705, 0xff050705, 0xee100c10, 0xcc313131, 0x99424142, 0x66212021, 0x44101010, 
+	0x33050505, 0x33000000, 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x33000000, 0xdd191c19, 
+	0xffa7a9a7, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffecedec, 0xfff1f4f1, 0xfff1f4f1, 0xfff7fbf7, 
+	0xfffcfcfc, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, 
+	0xfffffbff, 0xfffffbff, 0xfffaf6fa, 0xfff4f0f4, 0xffe6e7e6, 0xffe6e7e6, 0xffa2a3a2, 0xdd191c19, 
+	0x55000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080808, 
+	0x33131413, 0x77292d29, 0xbb292d29, 0xcc1e201e, 0xdd211c21, 0xdd242224, 0xdd242224, 0xdd242224, 
+	0xdd211c21, 0xdd242224, 0xcc292d29, 0xaa292d29, 0x66212421, 0x330b0c0b, 0x11000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x33101010, 0xcc101010, 0xeea5a2a5, 0xffefebef, 0xffe6e7e6, 0xffececec, 0xfff1f2f1, 0xfff7f7f7, 
+	0xfff7fbf7, 0xfffafcfa, 0xfffcfefc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xfffffeff, 0xfffffcff, 0xfff7fbf7, 0xfff4f6f4, 0xfff1f0f1, 0xffefebef, 
+	0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00080408, 0x11080408, 0x22191619, 0x553a393a, 0xaa424542, 0xee1b1c1b, 0xff080808, 0xff080808, 
+	0xff000400, 0xff000400, 0xff000400, 0xee0e100e, 0xee1e1e1e, 0xbb3a393a, 0x882c2b2c, 0x551e1e1e, 
+	0x440e0d0e, 0x33000000, 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x22000000, 0xcc191c19, 
+	0xffb8bab8, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffefefef, 0xfff1f3f1, 0xfff4f7f4, 0xfff7fbf7, 
+	0xfffffcff, 0xfffffeff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xfffcfbfc, 0xfffcfbfc, 0xfffaf7fa, 0xfff7f3f7, 0xffe6e7e6, 0xffe6e7e6, 0xffa2a2a2, 0xdd191819, 
+	0x55000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080808, 
+	0x22131713, 0x77292d29, 0xbb292d29, 0xcc1e221e, 0xdd242224, 0xdd242224, 0xdd211c21, 0xdd211c21, 
+	0xdd191c19, 0xdd1e221e, 0xcc292d29, 0xaa292d29, 0x66292429, 0x330e0c0e, 0x11000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x33101010, 0xcc101010, 0xeea5a2a5, 0xffefebef, 0xffe6e7e6, 0xffececec, 0xfff1f2f1, 0xfff7f7f7, 
+	0xfff7fbf7, 0xfffafcfa, 0xfffcfefc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xfffffeff, 0xfffffcff, 0xfff7fbf7, 0xfff4f6f4, 0xfff1f0f1, 0xffefebef, 
+	0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00080408, 0x11080408, 0x33292729, 0x773a393a, 0xdd1b1c1b, 0xee080808, 0xff080808, 0xff080808, 
+	0xff000400, 0xff000400, 0xff000400, 0xee0e100e, 0xee101010, 0xdd1e1e1e, 0xbb3a393a, 0x772c2b2c, 
+	0x441b1b1b, 0x330e0d0e, 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x22000000, 0xbb191c19, 
+	0xff919291, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffefefef, 0xfff1f3f1, 0xfff4f7f4, 0xfff7fbf7, 
+	0xfffffeff, 0xfffffeff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xfffcfbfc, 0xfffcfbfc, 0xfffaf7fa, 0xfff7f3f7, 0xffe6e7e6, 0xffe6e7e6, 0xffa2a2a2, 0xcc191819, 
+	0x44000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00050505, 
+	0x22131713, 0x661e221e, 0xaa292d29, 0xcc292d29, 0xdd242224, 0xdd242224, 0xdd211c21, 0xdd211c21, 
+	0xdd1e221e, 0xdd242724, 0xcc292d29, 0x99242724, 0x551b181b, 0x330e0c0e, 0x11000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x33101010, 0xcc101010, 0xeea5a2a5, 0xffefebef, 0xffe6e7e6, 0xffececec, 0xfff1f2f1, 0xfff7f7f7, 
+	0xfff7fbf7, 0xfffafcfa, 0xfffcfefc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xfffffeff, 0xfffffcff, 0xfff7fbf7, 0xfff4f6f4, 0xfff1f0f1, 0xffefebef, 
+	0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x00030103, 
+	0x11080408, 0x22191619, 0x663a393a, 0xcc292729, 0xee080808, 0xff080808, 0xff080808, 0xff080808, 
+	0xee0e100e, 0xee0e100e, 0xee0e100e, 0xee0e100e, 0xee101010, 0xee101010, 0xdd1e1e1e, 0xaa2c2b2c, 
+	0x66292829, 0x330e0d0e, 0x220e0d0e, 0x11000000, 0x11000000, 0x00000000, 0x22000000, 0x99101310, 
+	0xee919291, 0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffefefef, 0xfff1f3f1, 0xfff4f7f4, 0xfff7fbf7, 
+	0xfffffcff, 0xfffffeff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xfffcfbfc, 0xfffcfbfc, 0xfffaf7fa, 0xfff7f3f7, 0xffe6e7e6, 0xffe6e7e6, 0xeea2a2a2, 0xaa191819, 
+	0x44000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030303, 
+	0x11080c08, 0x441e221e, 0x88292d29, 0xbb292d29, 0xcc262726, 0xdd242224, 0xdd242224, 0xdd242224, 
+	0xdd1e221e, 0xcc292d29, 0xbb292d29, 0x88242724, 0x441b181b, 0x330e0c0e, 0x11000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x33101010, 0xcc101010, 0xeea5a2a5, 0xffefebef, 0xffe6e7e6, 0xffececec, 0xfff1f2f1, 0xfff7f7f7, 
+	0xfff7fbf7, 0xfffafcfa, 0xfffcfefc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xfffffeff, 0xfffffcff, 0xfff7fbf7, 0xfff4f6f4, 0xfff1f0f1, 0xffefebef, 
+	0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00030103, 0x00080408, 
+	0x11191619, 0x44292729, 0xaa3a393a, 0xdd191619, 0xee080808, 0xee080808, 0xee080808, 0xee080808, 
+	0xdd1b1c1b, 0xdd292829, 0xee0e100e, 0xee0e100e, 0xee101010, 0xee1e1e1e, 0xdd1e1e1e, 0xcc2c2b2c, 
+	0x99292829, 0x55292829, 0x220e0d0e, 0x11000000, 0x11080908, 0x11000000, 0x11000000, 0x77080908, 
+	0xee6b696b, 0xffb8bab8, 0xffdee3de, 0xffdee3de, 0xffefefef, 0xfff1f3f1, 0xfff4f7f4, 0xfff7fbf7, 
+	0xfffffcff, 0xfffffeff, 0xfffffeff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xfffcfbfc, 0xfffaf7fa, 0xfffaf7fa, 0xfff7f3f7, 0xffe6e7e6, 0xffe6e7e6, 0xee5d5d5d, 0x88191819, 
+	0x33000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11080c08, 0x22131713, 0x661e221e, 0x99292d29, 0xbb292d29, 0xcc292d29, 0xcc262726, 0xcc292d29, 
+	0xcc292d29, 0xbb292d29, 0x99242724, 0x66191c19, 0x330e0c0e, 0x22000000, 0x11000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffe6e9e6, 0xffe6e9e6, 0xffeff0ef, 0xfff7f7f7, 
+	0xfffaf7fa, 0xfffcfbfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xfff7fbf7, 0xfff1f4f1, 0xfff1f4f1, 0xffe6e7e6, 
+	0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x110b0c0b, 
+	0x33262826, 0x88313531, 0xdd1b1c1b, 0xee101010, 0xee101010, 0xee101010, 0xee101010, 0xdd1e1e1e, 
+	0xaa4a454a, 0x994a454a, 0xcc312f31, 0xdd191a19, 0xee191c19, 0xdd191c19, 0xdd212321, 0xcc292a29, 
+	0xbb262426, 0x88262426, 0x441b181b, 0x22100c10, 0x22080c08, 0x11030403, 0x11000000, 0x44050805, 
+	0xcc504c50, 0xff979397, 0xffdedbde, 0xffdedbde, 0xffececec, 0xffececec, 0xfff7f7f7, 0xfff7f7f7, 
+	0xfffafbfa, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfff7f3f7, 0xfff7f3f7, 0xfff7f3f7, 0xfff7f3f7, 0xffdee3de, 0xff979897, 0xcc504e50, 0x66080408, 
+	0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x110b0b0b, 0x33161616, 0x66212021, 0x88292d29, 0xaa292d29, 0xbb292d29, 0xbb292d29, 
+	0xaa292829, 0x88292829, 0x661b1b1b, 0x440e0d0e, 0x33080408, 0x22030103, 0x11000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffdee3de, 0xffe6e9e6, 0xffeff0ef, 0xfff7f7f7, 
+	0xfffaf7fa, 0xfffcfbfc, 0xfffcfbfc, 0xffffffff, 0xfffcfefc, 0xfffcfefc, 0xfffcfefc, 0xfffcfefc, 
+	0xffffffff, 0xffffffff, 0xfffcfcfc, 0xfffcfcfc, 0xfff7fbf7, 0xfff1f4f1, 0xfff1f4f1, 0xffe6e7e6, 
+	0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x110b0c0b, 0x22161816, 
+	0x66262826, 0xbb262826, 0xdd1b1c1b, 0xee101010, 0xee101010, 0xee101010, 0xdd1e1e1e, 0xaa3a393a, 
+	0x77312f31, 0x77312f31, 0x88312f31, 0xbb312f31, 0xdd212321, 0xdd212321, 0xdd292a29, 0xcc313131, 
+	0xbb313131, 0x99262426, 0x661b181b, 0x33100c10, 0x33080c08, 0x11030403, 0x00000000, 0x22000000, 
+	0x88080408, 0xee979397, 0xffdedbde, 0xffdedbde, 0xffececec, 0xffececec, 0xfff7f7f7, 0xfff7f7f7, 
+	0xfffafbfa, 0xfffafbfa, 0xfffafbfa, 0xfffafbfa, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfff7f3f7, 0xfff7f3f7, 0xfff7f3f7, 0xfff7f3f7, 0xffdee3de, 0xee979897, 0x99080408, 0x44080408, 
+	0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x11000000, 0x110b0b0b, 0x33161616, 0x441e1f1e, 0x661e1f1e, 0x77292d29, 0x771e1f1e, 
+	0x661b1b1b, 0x551b1b1b, 0x440e0d0e, 0x33000000, 0x22030103, 0x22000000, 0x11000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffdee3de, 0xffe6e9e6, 0xffeff0ef, 0xffeff0ef, 
+	0xfffaf7fa, 0xfffaf7fa, 0xfffcfbfc, 0xfffcfbfc, 0xfffafcfa, 0xfffafcfa, 0xfffafcfa, 0xfffafcfa, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffafafa, 0xfff1f4f1, 0xfff1f4f1, 0xffecedec, 0xffe6e7e6, 
+	0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x00000000, 0x110b0c0b, 0x44212421, 
+	0x99262826, 0xcc262826, 0xdd1b1c1b, 0xdd1b1c1b, 0xdd101010, 0xdd1e1e1e, 0xbb3a393a, 0x772c2b2c, 
+	0x66191a19, 0x66191a19, 0x66191a19, 0x88312f31, 0xaa292a29, 0xcc292a29, 0xcc292a29, 0xbb313131, 
+	0xaa313131, 0x99262426, 0x77262426, 0x441b181b, 0x33050805, 0x22030403, 0x00000000, 0x11000000, 
+	0x44080408, 0xbb504c50, 0xee979397, 0xffdedbde, 0xffe1e1e1, 0xffececec, 0xffececec, 0xfff7f7f7, 
+	0xfff4f7f4, 0xfff4f7f4, 0xfffafbfa, 0xfffafbfa, 0xfffafafa, 0xfffafafa, 0xfffafafa, 0xfff7f7f7, 
+	0xfff7f3f7, 0xfff7f3f7, 0xfff7f3f7, 0xffe1dfe1, 0xee979897, 0xcc504e50, 0x66080408, 0x33080408, 
+	0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x11000000, 0x110b0b0b, 0x22131213, 0x33131213, 0x44131213, 0x44131213, 
+	0x440e0d0e, 0x330e0d0e, 0x33000000, 0x22000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x33101010, 0xcc101010, 0xee9f9f9f, 0xffe6e7e6, 0xffdee3de, 0xffe6e9e6, 0xffeff0ef, 0xffeff0ef, 
+	0xfff7f3f7, 0xfffaf7fa, 0xfffaf7fa, 0xfffaf7fa, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 
+	0xfffafafa, 0xfffafafa, 0xfff7f7f7, 0xfff7f7f7, 0xfff1f4f1, 0xfff1f4f1, 0xffecedec, 0xffe6e7e6, 
+	0xffbdbabd, 0xdd080808, 0x55080808, 0x00080808, 0x00000000, 0x000b0c0b, 0x22161816, 0x66212421, 
+	0x99262826, 0xbb262826, 0xcc262826, 0xdd1b1c1b, 0xdd1e1e1e, 0xbb2c2b2c, 0x772c2b2c, 0x551e1e1e, 
+	0x55000400, 0x55000400, 0x55000400, 0x55191a19, 0x66212321, 0x99292a29, 0xaa292a29, 0xaa292a29, 
+	0x99313131, 0x88262426, 0x661b181b, 0x441b181b, 0x22050805, 0x22030403, 0x00000000, 0x00000000, 
+	0x22080408, 0x66080408, 0xcc504c50, 0xff979397, 0xffd6d7d6, 0xffe1e1e1, 0xffececec, 0xffececec, 
+	0xffeff3ef, 0xfff4f7f4, 0xfff4f7f4, 0xfff4f7f4, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 
+	0xfff7f3f7, 0xfff7f3f7, 0xffe1dfe1, 0xffb5b6b5, 0xdd504e50, 0x88080408, 0x44080408, 0x22080408, 
+	0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11080408, 0x22080408, 0x22080408, 0x22080408, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x33080808, 0xcc080808, 0xee919491, 0xffd6dbd6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 
+	0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 
+	0xffa5a6a5, 0xdd080408, 0x55080408, 0x00080408, 0x00000000, 0x110b0b0b, 0x33161616, 0x66212021, 
+	0x88292829, 0xaa292829, 0xbb292829, 0xcc292829, 0xbb292829, 0x77292829, 0x551b1b1b, 0x550e0d0e, 
+	0x44030303, 0x44000000, 0x44030303, 0x44080808, 0x440b0b0b, 0x55212021, 0x77212021, 0x88212021, 
+	0x88212021, 0x77212021, 0x55191819, 0x44101010, 0x22080408, 0x11030103, 0x00000000, 0x00000000, 
+	0x00000000, 0x22000000, 0x771b1b1b, 0xcc525152, 0xee979397, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffdee3de, 0xffdee3de, 0xff979897, 0xdd504e50, 0x88101410, 0x44000000, 0x22000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x22080808, 0xbb080808, 0xee919491, 0xffd6dbd6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 
+	0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xffefebef, 0xffefebef, 0xffefebef, 0xffefebef, 
+	0xeea5a6a5, 0xcc080408, 0x44080408, 0x00080408, 0x00000000, 0x110b0b0b, 0x220b0b0b, 0x44161616, 
+	0x661e1e1e, 0x77292829, 0x88292829, 0x99292829, 0x77292829, 0x551b1b1b, 0x440e0d0e, 0x44000000, 
+	0x44000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x330b0b0b, 0x44161616, 0x66161616, 
+	0x66191819, 0x66191819, 0x55101010, 0x33101010, 0x22030103, 0x11030103, 0x00000000, 0x00000000, 
+	0x00000000, 0x11000000, 0x22000000, 0x771b1b1b, 0xbb504c50, 0xee979397, 0xff979397, 0xffdedbde, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xff979897, 0xee979897, 0xcc504e50, 0x88080408, 0x44000000, 0x22000000, 0x11000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11080808, 0x66080808, 0xbb4d4e4d, 0xee919491, 0xeea5a7a5, 0xffa5a7a5, 0xffa5a7a5, 0xffa5a7a5, 
+	0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, 
+	0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, 0xffb2b1b2, 0xffaaa7aa, 0xffaaa7aa, 0xeeaaa7aa, 0xeeaaa7aa, 
+	0xcc707070, 0x99080408, 0x33080408, 0x00080408, 0x00000000, 0x00000000, 0x110b0b0b, 0x220b0b0b, 
+	0x33131313, 0x441e1e1e, 0x441e1e1e, 0x441e1e1e, 0x440e0d0e, 0x440e0d0e, 0x44000000, 0x44000000, 
+	0x33000000, 0x33000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x220b0b0b, 0x330b0b0b, 
+	0x44101010, 0x44101010, 0x44080808, 0x33080808, 0x11030103, 0x11000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x11000000, 0x22000000, 0x55080408, 0x99080408, 0xcc504c50, 0xee504c50, 
+	0xeeaaa9aa, 0xffaaa9aa, 0xffaaa9aa, 0xffaaa9aa, 0xffa7a9a7, 0xffa7a9a7, 0xeea7a9a7, 0xee606260, 
+	0xcc504e50, 0x99080408, 0x66080408, 0x44080408, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00080808, 0x22080808, 0x77080808, 0xbb080808, 0xdd212021, 0xdd212021, 0xdd212021, 0xdd212021, 
+	0xdd292429, 0xdd292429, 0xdd292429, 0xdd292429, 0xdd292429, 0xdd292429, 0xdd292429, 0xdd292429, 
+	0xdd292429, 0xdd292429, 0xdd292429, 0xdd292429, 0xdd212021, 0xdd212021, 0xdd212021, 0xcc212021, 
+	0x99080408, 0x44080408, 0x22080408, 0x00080408, 0x00000000, 0x00000000, 0x00000000, 0x110b0b0b, 
+	0x11080808, 0x11080808, 0x22080808, 0x22080808, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 
+	0x33000000, 0x22000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x22000000, 
+	0x22080808, 0x33080808, 0x33080808, 0x22080808, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11080408, 0x33080408, 0x55080408, 0x88080408, 
+	0xaa211c21, 0xcc211c21, 0xdd211c21, 0xdd211c21, 0xdd191c19, 0xcc191c19, 0xaa191c19, 0x88191c19, 
+	0x66080408, 0x44080408, 0x33080408, 0x22080408, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x11000000, 0x22000000, 0x33000000, 0x44000000, 0x55000000, 0x55000000, 0x55000000, 
+	0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 
+	0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x44000000, 
+	0x33000000, 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x22000000, 0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x22000000, 0x22000000, 
+	0x33000000, 0x44000000, 0x44000000, 0x55000000, 0x55000000, 0x44000000, 0x44000000, 0x33000000, 
+	0x22000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x33000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 
+	0x22000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x11000000, 0x22000000, 0x22000000, 0x33000300, 0x33000300, 0x44000400, 0x44000400, 
+	0x55080808, 0x55101010, 0x66101010, 0x66191819, 0x661b1e1b, 0x661b1e1b, 0x66292d29, 0x66292d29, 
+	0x77313531, 0x77313531, 0x77313531, 0x77313531, 0x773a3d3a, 0x773a3d3a, 0x773a3d3a, 0x773a3d3a, 
+	0x77424142, 0x77424142, 0x77424142, 0x77424142, 0x77424542, 0x77424542, 0x77424542, 0x77424542, 
+	0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x88424542, 0x88424542, 0x88424542, 0x88424542, 
+	0x88424542, 0x88424542, 0x88424542, 0x88424542, 0x88424542, 0x88424542, 0x88424542, 0x88424542, 
+	0x88424142, 0x88424142, 0x88424142, 0x88424142, 0x88424142, 0x88424142, 0x88424142, 0x88424142, 
+	0x88424142, 0x88424142, 0x88424142, 0x88424142, 0x883a3d3a, 0x883a3d3a, 0x883a3d3a, 0x883a3d3a, 
+	0x883a3d3a, 0x883a3d3a, 0x883a3d3a, 0x883a3d3a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 
+	0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 
+	0x88313531, 0x88313531, 0x88313531, 0x88313531, 0x88313131, 0x88313131, 0x88313131, 0x88313131, 
+	0x88313131, 0x88313131, 0x88313131, 0x88313131, 0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, 
+	0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 
+	0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 
+	0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 
+	0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 0x88292d29, 
+	0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, 
+	0x88313131, 0x88313131, 0x88313131, 0x88313131, 0x88313131, 0x88313131, 0x88313131, 0x88313131, 
+	0x88313131, 0x88313131, 0x88313131, 0x88313131, 0x88313531, 0x88313531, 0x88313531, 0x88313531, 
+	0x88313531, 0x88313531, 0x88313531, 0x88313531, 0x88313531, 0x88313531, 0x88313531, 0x88313531, 
+	0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 
+	0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 
+	0x883a393a, 0x883a393a, 0x883a393a, 0x883a393a, 0x88313531, 0x88313531, 0x88313531, 0x88313531, 
+	0x88313531, 0x77313531, 0x77313531, 0x88313531, 0x88313131, 0x77313131, 0x77313131, 0x77313131, 
+	0x77292d29, 0x77292d29, 0x77292d29, 0x77292d29, 0x77292829, 0x77292829, 0x77292829, 0x77292829, 
+	0x77212021, 0x77212021, 0x77212021, 0x77212021, 0x77191819, 0x77191819, 0x77191819, 0x66101010, 
+	0x66101010, 0x660b0b0b, 0x660b0b0b, 0x660b0b0b, 0x55080808, 0x55080808, 0x55050505, 0x44050505, 
+	0x33000400, 0x33000400, 0x22000400, 0x22000300, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080408, 0x22080408, 0x44080408, 0x55080408, 
+	0x66191419, 0x66191419, 0x77423f42, 0x77423f42, 0x77424542, 0x77424542, 0x77606260, 0x77606260, 
+	0x77636163, 0x77636163, 0x88636163, 0x88636163, 0x886b696b, 0x886b696b, 0x886b696b, 0x886b696b, 
+	0x99737173, 0x99737173, 0x99737173, 0x99737173, 0x9973797b, 0x9973797b, 0x9973797b, 0x9973797b, 
+	0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 
+	0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 
+	0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 
+	0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b797b, 0xaa7b7573, 0xaa7b7573, 0xaa7b7573, 0xaa7b7573, 
+	0xaa737573, 0xaa737573, 0xaa737573, 0xaa737573, 0xaa737573, 0xaa737573, 0xaa737573, 0xaa737573, 
+	0xaa737573, 0xaa737573, 0xaa737573, 0xaa737573, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 
+	0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 
+	0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 
+	0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 
+	0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 
+	0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b696b, 0xaa6b696b, 0xaa6b696b, 0xaa6b696b, 
+	0xaa6b696b, 0xaa6b696b, 0xaa6b696b, 0xaa6b696b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 
+	0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 
+	0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 
+	0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 
+	0xaa736d73, 0xaa736d73, 0xaa736d73, 0xaa736d73, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 
+	0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 
+	0xaa737573, 0xaa737573, 0xbb737573, 0xbb737573, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 
+	0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 
+	0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 
+	0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b696b, 0xaa6b696b, 0xaa6b696b, 0xaa6b696b, 
+	0xaa6b696b, 0xaa6b696b, 0xaa6b696b, 0xaa6b696b, 0xaa636563, 0xaa636563, 0xaa636563, 0xaa636563, 
+	0x995a5d5a, 0x995a5d5a, 0x995a5d5a, 0x995a5d5a, 0x99525552, 0x99525552, 0x99525552, 0x88525552, 
+	0x88424542, 0x88424542, 0x88424542, 0x88424542, 0x88312d31, 0x88312d31, 0x88312d31, 0x88312d31, 
+	0x88191c19, 0x77191c19, 0x77191c19, 0x77191c19, 0x66080c08, 0x44080c08, 0x33080c08, 0x22080c08, 
+	0x11080408, 0x00080408, 0x00080408, 0x00080408, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x55080408, 0x77343134, 0x88605d60, 0x88605d60, 
+	0x886b6b6b, 0x886b6b6b, 0x886b6b6b, 0x996b6b6b, 0x997e807e, 0x997e807e, 0xaa7e807e, 0xaa7e807e, 
+	0xaa898a89, 0xaa898a89, 0xaa898a89, 0xaa898a89, 0xbb8c8f8c, 0xbb8c8f8c, 0xbb8c8f8c, 0xbb8c8f8c, 
+	0xbb949494, 0xbb949494, 0xbb949494, 0xcc949494, 0xcc949797, 0xcc949797, 0xcc949797, 0xcc949797, 
+	0xcc979a97, 0xcc979a97, 0xcc979a97, 0xcc979a97, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 
+	0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 
+	0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 
+	0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9b9a, 0xcc9c9b9a, 0xcc9c9b9a, 0xcc9c9b9a, 
+	0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 
+	0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 
+	0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 
+	0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 
+	0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 
+	0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 
+	0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9d9c, 
+	0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9d9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 
+	0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 
+	0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 
+	0xcc9c9b9c, 0xcc9c9b9c, 0xcc9c9b9c, 0xcc9c9b9c, 0xcc9c9b9c, 0xcc9c9b9c, 0xcc9c9b9c, 0xcc9c9b9c, 
+	0xcc9f9b9f, 0xcc9f9b9f, 0xcc9f9b9f, 0xcc9f9b9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 0xcc9f9d9f, 
+	0xcc9a9d9f, 0xcc9a9d9f, 0xcc9a9d9f, 0xcc9a9d9f, 0xcc9a9a9a, 0xcc9a9a9a, 0xcc9a9a9a, 0xcc9a9a9a, 
+	0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9b9a, 0xcc9a9a9a, 0xcc9a9a9a, 0xcc9a9a9a, 0xcc9a9a9a, 
+	0xcc9a979a, 0xcc9a979a, 0xcc9a979a, 0xcc9a979a, 0xcc9a979a, 0xcc9a979a, 0xcc9a979a, 0xcc9a979a, 
+	0xcc9a979a, 0xcc9a979a, 0xcc9a979a, 0xcc9a979a, 0xcc94979a, 0xcc94979a, 0xcc94979a, 0xcc94979a, 
+	0xcc979697, 0xcc979697, 0xcc979697, 0xcc979697, 0xcc919291, 0xcc919291, 0xcc919291, 0xcc919291, 
+	0xcc919291, 0xcc919291, 0xcc919291, 0xcc919291, 0xcc8f908f, 0xcc8f908f, 0xcc8f908f, 0xcc8f908f, 
+	0xcc8c8b8c, 0xcc8c8b8c, 0xcc8c8b8c, 0xcc8c8b8c, 0xbb848884, 0xbb848884, 0xbb848884, 0xbb848884, 
+	0xbb7e7d7e, 0xbb7e7d7e, 0xbb7e7d7e, 0xbb7e7d7e, 0xaa737073, 0xaa737073, 0xaa737073, 0xaa737073, 
+	0xaa6b6b6b, 0x996b6b6b, 0x99424342, 0x99424342, 0x99373937, 0x88373937, 0x77373937, 0x66080c08, 
+	0x66080408, 0x22080408, 0x00080408, 0x00080408, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x33000000, 0x77262626, 0x88605d60, 0x88605d60, 0x998c8a8c, 0xaa8c8a8c, 
+	0xaa949694, 0xaa949694, 0xbb949694, 0xbb949694, 0xbb9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 
+	0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9ca29c, 0xcc9ca29c, 0xdd9ca29c, 0xdd9ca29c, 
+	0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 
+	0xdda5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 
+	0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 
+	0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 
+	0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 
+	0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 
+	0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 
+	0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 
+	0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 
+	0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 
+	0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 
+	0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 
+	0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 
+	0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 
+	0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xdda5aaad, 0xdda5aaad, 0xdda5aaad, 0xdda5aaad, 
+	0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 
+	0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 
+	0xdda5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xdd9ca29c, 0xdd9ca29c, 0xdd9ca29c, 0xdd9ca29c, 
+	0xdd9c9a9c, 0xdd9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc949294, 0xcc949294, 0xcc949294, 0xcc949294, 
+	0xcc949294, 0xcc949294, 0xcc949294, 0xbb6b6b6b, 0xbb656565, 0xbb656565, 0xaa656565, 0xaa656565, 
+	0xbb656265, 0x77373337, 0x44080408, 0x11080408, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x33000000, 0x884d4c4d, 0x99737173, 0xaa8c8a8c, 0xaa8c8a8c, 0xcc8c8a8c, 0xcc8c8a8c, 
+	0xcc949694, 0xcc949694, 0xdd949694, 0xdd949694, 0xdd9c9e9c, 0xdd9c9e9c, 0xdd9c9e9c, 0xdd9c9e9c, 
+	0xdd9c9e9c, 0xdd9c9e9c, 0xdd9c9e9c, 0xdd9c9e9c, 0xdd9ca29c, 0xdd9ca29c, 0xdd9ca29c, 0xdd9ca29c, 
+	0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 
+	0xdda5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 
+	0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 
+	0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 
+	0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 
+	0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 
+	0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 
+	0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 
+	0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 
+	0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 
+	0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 
+	0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 
+	0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 
+	0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 
+	0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xdda5aaad, 0xdda5aaad, 0xdda5aaad, 0xdda5aaad, 
+	0xddadaaad, 0xddadaaad, 0xddadaaad, 0xddadaaad, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 
+	0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 
+	0xdda5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xdd9ca29c, 0xdd9ca29c, 0xdd9ca29c, 0xdd9ca29c, 
+	0xdd9c9a9c, 0xdd9c9a9c, 0xdd9c9a9c, 0xdd9c9a9c, 0xdd949294, 0xdd949294, 0xdd949294, 0xdd949294, 
+	0xdd949294, 0xdd949294, 0xdd949294, 0xdd949294, 0xdd949294, 0xcc949294, 0xcc949294, 0xcc949294, 
+	0xee949294, 0xbb656265, 0x99373337, 0x55080408, 0x11080808, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11100c10, 0x773c393a, 0x9994928c, 0xbb94928c, 0xcc8f908f, 0xcc8f908f, 0xdd9ca29c, 0xdd9ca29c, 
+	0xdda5a1a2, 0xdda5a1a2, 0xdda5a1a2, 0xdda5a1a2, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 
+	0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 
+	0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 
+	0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 
+	0xdda7a6a7, 0xddb5b2b5, 0xddb5b2b5, 0xdda7a6a7, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 
+	0xddb5aead, 0xddb5aead, 0xddb5aead, 0xddb5aead, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 
+	0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 
+	0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 
+	0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 
+	0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 
+	0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 
+	0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 
+	0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 
+	0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 
+	0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb2b3b2, 0xddb2b3b2, 0xddb2b3b2, 0xddb2b3b2, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xdda7a6a7, 
+	0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 
+	0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 
+	0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 
+	0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdd9a9a9a, 0xdd9a9a9a, 0xdd9a9a9a, 
+	0xdd9a9a9a, 0xdd9a9a9a, 0xdd9a9a9a, 0xdd9a9a9a, 0xdd9a979a, 0xdd9a979a, 0xdd9a979a, 0xdd9a979a, 
+	0xeea5a2a5, 0xdd8c8b8c, 0xbb8c8b8c, 0xaa5a5d5a, 0x662c2d2c, 0x11000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x44100c10, 0x99686563, 0xbb94928c, 0xcc94928c, 0xdd9ca29c, 0xcc8f908f, 0xdd9ca29c, 0xdd9ca29c, 
+	0xdda5a1a2, 0xdda5a1a2, 0xdda5a1a2, 0xdda5a1a2, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 
+	0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 
+	0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 
+	0xddb5b2b5, 0xddb5b2b5, 0xdda7a6a7, 0xdda7a6a7, 0xddb5b2b5, 0xdda7a6a7, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 
+	0xddb5aead, 0xddb5aead, 0xddb5aead, 0xddb5aead, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 
+	0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 
+	0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 
+	0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 
+	0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 
+	0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 
+	0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 
+	0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 
+	0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 
+	0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb2b3b2, 0xddb2b3b2, 0xddb2b3b2, 0xddb2b3b2, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xdda7a6a7, 0xddb5b2b5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 
+	0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a9a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 
+	0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdda7a6a7, 0xdd9a9a9a, 
+	0xdd9a9a9a, 0xdd9a9a9a, 0xdd9a9a9a, 0xdd9a9a9a, 0xdd9a979a, 0xdd9a979a, 0xdd9a979a, 0xdd9a979a, 
+	0xeea5a2a5, 0xeea5a2a5, 0xdd8c8b8c, 0xcc8c8b8c, 0xbb585958, 0x332c2d2c, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00050405, 
+	0x773c393a, 0xbb94928c, 0xcc94928c, 0xdd94928c, 0xdd9ca29c, 0xdd817f81, 0xff736d73, 0xff817f81, 
+	0xff847d7b, 0xff948f8f, 0xff948f8f, 0xff948f8f, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c928c, 0xff8c928c, 0xff8c928c, 0xff8c928c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c928c, 0xff8c928c, 0xff8c928c, 0xff8c928c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8a8c, 0xff8c8a8c, 0xff8c8a8c, 0xff8c8a8c, 
+	0xffa5a2a5, 0xeea5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xdd848684, 0x77585958, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11100c10, 
+	0x88686563, 0xcc94928c, 0xdd94928c, 0xdd94928c, 0xdd9ca29c, 0xdd817f81, 0xff817f81, 0xff8f908f, 
+	0xffa5a1a2, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 
+	0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 
+	0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 
+	0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 
+	0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 
+	0xffb5aead, 0xffb5aead, 0xffb5aead, 0xffb5aead, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 
+	0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 
+	0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 
+	0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 
+	0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 
+	0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 
+	0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 
+	0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 
+	0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 
+	0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 
+	0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 
+	0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 
+	0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffbdbabd, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 
+	0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb5bab5, 0xffb2b3b2, 0xffb2b3b2, 0xffb2b3b2, 0xffb2b3b2, 
+	0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 
+	0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 
+	0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 
+	0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 
+	0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 
+	0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 
+	0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 
+	0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 
+	0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffb5b2b5, 0xffa7a5a7, 
+	0xffa5a2a5, 0xeea5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xdd848684, 0xaa585958, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22191419, 
+	0x99636163, 0xcc898a89, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda7a6a7, 0xdd949294, 0xff949294, 0xffa7a6a7, 
+	0xffbdbebd, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffd0d2d0, 0xffd0d2d0, 0xffd0d2d0, 0xffbdbebd, 
+	0xffb2b2b2, 0xee9c9a9c, 0xdd9c9a9c, 0xdd9c9a9c, 0xdd9c9e9c, 0xbb686968, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33191419, 
+	0xaa636163, 0xdd898a89, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda7a6a7, 0xdd949294, 0xffa7a6a7, 0xffbababa, 
+	0xffd0d2d0, 0xffe4e7e4, 0xffe4e7e4, 0xffe4e7e4, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 
+	0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffeff0ef, 0xffe4e7e4, 0xffe4e7e4, 0xffe4e7e4, 0xffd0d2d0, 
+	0xffb2b2b2, 0xeea7a6a7, 0xdd9c9a9c, 0xdd9c9a9c, 0xdd9c9e9c, 0xcc686968, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33100d10, 
+	0xaa636163, 0xdd898a89, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda7a6a7, 0xdd949294, 0xffa7a6a7, 0xffcecece, 
+	0xffe4e7e4, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xffe4e7e4, 
+	0xffbdbebd, 0xeea7a6a7, 0xdd9c9a9c, 0xdd9c9a9c, 0xdd9c9e9c, 0xcc686968, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33100d10, 
+	0xaa636163, 0xdd898a89, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda7a6a7, 0xdd949294, 0xffbababa, 0xffcecece, 
+	0xffe4e7e4, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7fbf7, 0xfff7fbf7, 0xfff7fbf7, 0xffe4e7e4, 
+	0xffbdbebd, 0xeea7a6a7, 0xdd9c9a9c, 0xdd9c9a9c, 0xdd9c9e9c, 0xcc9c9e9c, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33101010, 
+	0xaa4a5152, 0xdd868a89, 0xdda5a6a5, 0xdda5a6a5, 0xddadadad, 0xdd9c9a9c, 0xffadadad, 0xffced2ce, 
+	0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, 
+	0xffbdbebd, 0xeea7a9a7, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda5aaa5, 0xcc6e736e, 0x00000400, 0x00000300, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22191819, 
+	0x994a5152, 0xdd868a89, 0xdda5a6a5, 0xdda5a6a5, 0xddadadad, 0xdd9c9a9c, 0xffadadad, 0xffced2ce, 
+	0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, 
+	0xffbdbebd, 0xeea7a9a7, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda5aaa5, 0xbb6e736e, 0x00000400, 0x00000400, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101010, 
+	0x994a5152, 0xcc868a89, 0xdda5a6a5, 0xdda5a6a5, 0xddadadad, 0xdd9c9a9c, 0xffadadad, 0xffced2ce, 
+	0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, 
+	0xffbdbebd, 0xeea7a9a7, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda5aaa5, 0xbb6e736e, 0x00000400, 0x00000400, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101010, 
+	0x994a5152, 0xcc868a89, 0xdda5a6a5, 0xdda5a6a5, 0xddadadad, 0xdd9c9a9c, 0xffadadad, 0xffced2ce, 
+	0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, 
+	0xffbdbebd, 0xeea7a9a7, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda5aaa5, 0xbb6e736e, 0x00000400, 0x00000400, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101010, 
+	0x884a494a, 0xcc868486, 0xdda5a2a5, 0xdda5a2a5, 0xddadaead, 0xdd9c9a9c, 0xffadaead, 0xffced7ce, 
+	0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, 
+	0xffc5c2c5, 0xeeaaaaaa, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda5aaa5, 0xaa6e716e, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11101010, 
+	0x884a494a, 0xcc868486, 0xdda5a2a5, 0xdda5a2a5, 0xddadaead, 0xdd9c9a9c, 0xffadaead, 0xffced7ce, 
+	0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, 
+	0xffc5c2c5, 0xeeaaaaaa, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda5aaa5, 0xaa6e716e, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101010, 
+	0x884a494a, 0xcca5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xddadaead, 0xdd9c9a9c, 0xffadaead, 0xffced7ce, 
+	0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, 
+	0xffc5c2c5, 0xeeaaaaaa, 0xdd9c9e9c, 0xdd9c9e9c, 0xdda5aaa5, 0xaa6e716e, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101010, 
+	0x994a494a, 0xcca5a2a5, 0xdda5a2a5, 0xdda5a2a5, 0xddadaead, 0xdd9c9a9c, 0xffadaead, 0xffced7ce, 
+	0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, 
+	0xffc5c2c5, 0xeeaaaaaa, 0xdd9c9e9c, 0xddaaaaaa, 0xdda5aaa5, 0xaa6e716e, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101310, 
+	0x995a595a, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xddafaeaf, 0xdd9c9a9c, 0xffafaeaf, 0xffd6d7d6, 
+	0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, 
+	0xffc5c2c5, 0xeeafadaf, 0xdda5a2a5, 0xdda5a2a5, 0xddb5b6b5, 0xbb797b79, 0x00000400, 0x00000400, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101310, 
+	0x995a595a, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xddafaeaf, 0xdd9c9a9c, 0xffafaeaf, 0xffd6d7d6, 
+	0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, 
+	0xffc5c2c5, 0xeeafadaf, 0xdda5a2a5, 0xdda5a2a5, 0xddb5b6b5, 0xbb797b79, 0x00000400, 0x00000400, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101310, 
+	0xaa5a595a, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xddafaeaf, 0xdd9c9a9c, 0xffafaeaf, 0xffd6d7d6, 
+	0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, 
+	0xffc5c2c5, 0xeeafadaf, 0xdda5a2a5, 0xddafadaf, 0xddb5b6b5, 0xcc797b79, 0x00000400, 0x00000400, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33101310, 
+	0xaa737373, 0xdda5a6a5, 0xdda5a6a5, 0xdda5a6a5, 0xddafaeaf, 0xdd9c9a9c, 0xffafaeaf, 0xffd6d7d6, 
+	0xffe6ebe6, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xffe6ebe6, 
+	0xffc5c2c5, 0xeeafadaf, 0xdda5a2a5, 0xddafadaf, 0xddb5b6b5, 0xcc797b79, 0x00000400, 0x00000400, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33101010, 
+	0xaa606060, 0xddada6ad, 0xddada6ad, 0xddada6ad, 0xddbab7ba, 0xdd949294, 0xffbab7ba, 0xffcecace, 
+	0xffeff0ef, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffeff0ef, 
+	0xffc5c2c5, 0xeea5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xddadaeb5, 0xcc737479, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33080808, 
+	0xaa606060, 0xddada6ad, 0xddada6ad, 0xddada6ad, 0xddbab7ba, 0xdd949294, 0xffbab7ba, 0xffcecace, 
+	0xffeff0ef, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffeff0ef, 
+	0xffc5c2c5, 0xeea5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xddadaeb5, 0xbb737479, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33191819, 
+	0x99606060, 0xccada6ad, 0xddada6ad, 0xddada6ad, 0xddbab7ba, 0xdd949294, 0xffa7a5a7, 0xffcecace, 
+	0xffdee1de, 0xffeff0ef, 0xffffffff, 0xffffffff, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xfff7f8f7, 0xffffffff, 0xffffffff, 0xffeff0ef, 0xffdee1de, 
+	0xffc5c2c5, 0xeea5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xddadaeb5, 0xbb737479, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22101010, 
+	0x883a3d3a, 0xbb868386, 0xddada6ad, 0xddada6ad, 0xddbab7ba, 0xdd949294, 0xffa7a5a7, 0xffbab7ba, 
+	0xffced2ce, 0xffdee1de, 0xffeff0ef, 0xffeff0ef, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffeff0ef, 0xffeff0ef, 0xffdee1de, 0xffced2ce, 
+	0xffbababa, 0xeea5aaa5, 0xdda5aaa5, 0xdda5aaa5, 0xddadaeb5, 0x99737479, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11080808, 
+	0x773a3a3a, 0xaa6b6c6b, 0xcc9c9e9c, 0xdd9c9e9c, 0xddadaaad, 0xdd949294, 0xff949294, 0xffadaaad, 
+	0xffbdbebd, 0xffcecece, 0xffcecece, 0xffcecece, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced0ce, 
+	0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced1d3, 0xffced1d3, 0xffced1d3, 0xffced1d3, 
+	0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 0xffd0d1d0, 
+	0xffced1ce, 0xffced1ce, 0xffced1ce, 0xffced1ce, 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced0ce, 
+	0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced0ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 
+	0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffced2ce, 0xffb8bcb8, 
+	0xffadaead, 0xeeadaead, 0xddadaead, 0xddadaead, 0xcc848a84, 0x772c2e2c, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x66080808, 0x883a3a3a, 0xaa6b6c6b, 0xcc9c9e9c, 0xddadaaad, 0xccadaaad, 0xddadaaad, 0xddadaaad, 
+	0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddb2b2b2, 0xddb2b2b2, 0xddb2b2b2, 0xddb2b2b2, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 
+	0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 
+	0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 
+	0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 
+	0xddc3c2c3, 0xddc3c2c3, 0xddc3c2c3, 0xddc3c2c3, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 
+	0xddc5c2c5, 0xddc5c2c5, 0xddc8c8c8, 0xddc8c8c8, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 
+	0xddc5c6c5, 0xddc5c6c5, 0xddc8cac8, 0xddc8cac8, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 
+	0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 
+	0xddd0d1d0, 0xddd3d0d3, 0xddd0d1d0, 0xddd0d1d0, 0xddd6d2d6, 0xddd6d2d6, 0xddd6d2d6, 0xddd6d2d6, 
+	0xddd0d4d0, 0xddd0d4d0, 0xddd0d4d0, 0xddd0d4d0, 0xddd0d4d0, 0xddd0d4d0, 0xddd6d7d6, 0xddd6d7d6, 
+	0xddd3d8d3, 0xddd3d8d3, 0xddd3d8d3, 0xddd3d8d3, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 
+	0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd3d7d3, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 
+	0xddd9d8d9, 0xdddedbde, 0xddd9d8d9, 0xddd9d8d9, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 
+	0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 
+	0xdddedbde, 0xdddedbde, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 
+	0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd3d8d3, 0xddd3d8d3, 0xddd3d8d3, 0xddd3d8d3, 
+	0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd3d5d3, 0xddd3d5d3, 0xddd0d4d0, 0xddd0d4d0, 0xddd0d4d0, 
+	0xddd3d5d3, 0xddd3d5d3, 0xddced2ce, 0xddced2ce, 0xddd0d1d0, 0xddd0d1d0, 0xddd0d1d0, 0xddd0d1d0, 
+	0xddcecece, 0xddced0ce, 0xddcecece, 0xddcecece, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 
+	0xddcecdce, 0xddcecdce, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 
+	0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 
+	0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 
+	0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 
+	0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 
+	0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 
+	0xddadadad, 0xddadadad, 0xddadadad, 0xddadadad, 0xdda2a5a2, 0xdda2a5a2, 0xdda2a5a2, 0xdda2a5a2, 
+	0xeeadaead, 0xeeadaead, 0xcc818381, 0xbb818381, 0xaa585c58, 0x442c2e2c, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x33080808, 0x883a3a3a, 0x883a3a3a, 0xaa6b6c6b, 0xcc949294, 0xbb949294, 0xccadaaad, 0xddadaaad, 
+	0xddadaead, 0xddadaead, 0xddadaead, 0xddadaead, 0xddb2b2b2, 0xddb2b2b2, 0xddb2b2b2, 0xddb2b2b2, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 
+	0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 
+	0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddc3c2c3, 
+	0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 
+	0xddc3c2c3, 0xddc3c2c3, 0xddc3c2c3, 0xddc3c2c3, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc8c8c8, 
+	0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc8cac8, 
+	0xddc8cac8, 0xddc8cac8, 0xddc8cac8, 0xddcbcecb, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 
+	0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddced0d0, 0xddced0d0, 0xddced0d0, 0xddced2d6, 
+	0xddced2ce, 0xddd0d1d0, 0xddd0d1d0, 0xddd0d1d0, 0xddd6d2d6, 0xddd6d2d6, 0xddd6d2d6, 0xddd3d4d3, 
+	0xddd3d5d3, 0xddd3d5d3, 0xddd3d5d3, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 
+	0xddd3d8d3, 0xddd3d8d3, 0xddd3d8d3, 0xddd6dbd6, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 
+	0xddd9d8d9, 0xddd9d8d9, 0xdddedbde, 0xdddedbde, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 
+	0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 
+	0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 
+	0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd9d8d9, 0xddd9d8d9, 
+	0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd9d8d9, 0xddd3d8d3, 0xddd6dbd6, 0xddd3d8d3, 0xddd6dbd6, 
+	0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd3d5d3, 0xddd3d5d3, 0xddd3d5d3, 
+	0xddd3d5d3, 0xddd6d7d6, 0xddd3d5d3, 0xddd0d4d0, 0xddd0d1d0, 0xddd0d1d0, 0xddd0d1d0, 0xddd0d1d0, 
+	0xddced0ce, 0xddced0ce, 0xddced0ce, 0xddced0ce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 
+	0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcec6ce, 
+	0xddc8cac8, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 
+	0xddc8c8c8, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 
+	0xddc3c5c3, 0xddbfc0bf, 0xddc2c4c2, 0xddbebfbe, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 
+	0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 
+	0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 
+	0xddadadad, 0xddadadad, 0xddadadad, 0xddadadad, 0xdda2a5a2, 0xdda2a5a2, 0xdda2a5a2, 0xdda2a5a2, 
+	0xeeadaead, 0xdd818381, 0xbb818381, 0x99555855, 0x772c2e2c, 0x11000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11080808, 0x66080808, 0x773a3a3a, 0x773a3a3a, 0x99636163, 0x997b797b, 0xbb949294, 0xbb949294, 
+	0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcc9c9e9c, 0xcca5a2a5, 0xddb2b2b2, 0xddb2b2b2, 0xddb2b2b2, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 
+	0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 
+	0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddc3c2c3, 0xddc3c2c3, 
+	0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddc3c5c3, 0xddc3c5c3, 
+	0xddc3c2c3, 0xddc3c2c3, 0xddc3c2c3, 0xddc3c2c3, 0xddc5c2c5, 0xddc8c8c8, 0xddc5c2c5, 0xddc8c8c8, 
+	0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8, 0xddc8cac8, 0xddc5c6c5, 0xddc8cac8, 0xddcbcecb, 
+	0xddcbcecb, 0xddc8cac8, 0xddc8cac8, 0xddcbcecb, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 
+	0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddced0d0, 0xddced1d3, 0xddced1d3, 0xddced2d6, 
+	0xddced2ce, 0xddced2ce, 0xddced2ce, 0xddced2ce, 0xddd3d4d3, 0xddd3d4d3, 0xddd3d4d3, 0xddd0d5d0, 
+	0xddd6d7d6, 0xddd3d5d3, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 
+	0xddd6dbd6, 0xddd3d8d3, 0xddd6dbd6, 0xddd6dbd6, 0xddd9d8d9, 0xdddedbde, 0xdddedbde, 0xdddedbde, 
+	0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd9dbd9, 0xdddedfde, 0xdddedfde, 0xddd9dbd9, 
+	0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd9dbd9, 0xddd9dbd9, 0xdddedfde, 0xdddedfde, 
+	0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd9dbd9, 0xddd9dbd9, 0xddd9dbd9, 0xdddedfde, 
+	0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 
+	0xdddedbde, 0xdddedbde, 0xdddedbde, 0xdddedbde, 0xddd6dbd6, 0xddd6dbd6, 0xddd3d8d3, 0xddd6dbd6, 
+	0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd6d7d6, 0xddd3d5d3, 0xddd6d7d6, 
+	0xddd3d5d3, 0xddd6d7d6, 0xddd3d5d3, 0xddd0d4d0, 0xddd6d2d6, 0xddd6d2d6, 0xddd0d1d0, 0xddd0d1d0, 
+	0xddced2ce, 0xddced1ce, 0xddced0ce, 0xddced0ce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 
+	0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecdce, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 
+	0xddc8cac8, 0xddc5c6c5, 0xddc8cac8, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 
+	0xddc8c8c8, 0xddc8c8c8, 0xddc8c8c8, 0xddc5c3c6, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 
+	0xddc4c4c3, 0xddc4c4c3, 0xddc4c4c2, 0xddc1c0c1, 0xddbfc1bf, 0xddbdbebe, 0xddbdbebe, 0xddbdbebd, 
+	0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 
+	0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 0xddb5bab5, 
+	0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddb5b2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 0xddadb2b5, 
+	0xddadadad, 0xddadadad, 0xdd9c9a9c, 0xcc9c9a9c, 0xcca2a5a2, 0xcc8c8e8c, 0xcc8c8e8c, 0xcc8c8e8c, 
+	0xdd818381, 0xaa555855, 0x77292d29, 0x55292d29, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x22000000, 0x77101010, 0x77313131, 0x773f3f3f, 0x773f3f3f, 0x885a5d5a, 0x995a5d5a, 
+	0x99737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa8c8a8c, 0xbb8c8a8c, 0xbb8c8a8c, 0xbb8c8a8c, 
+	0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcc9c9a9c, 0xcca5a6a5, 0xcca5a6a5, 0xcca5a6a5, 0xcca5a6a5, 
+	0xccadaead, 0xccadaead, 0xccadaead, 0xccadaead, 0xccb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 
+	0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 
+	0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 0xddb5b6b5, 
+	0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbabd, 0xddbdbebd, 0xddbdbebd, 0xddbec0bf, 0xddc0c2c1, 
+	0xddc7cacc, 0xddc8cccd, 0xddc0c3c5, 0xddc2c6c9, 0xddc3c5c7, 0xddc3c3c4, 0xddc0c3c2, 0xddbfc2c0, 
+	0xddc3c2c3, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 
+	0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 
+	0xddc5cac5, 0xddc5cac5, 0xddc5cac5, 0xddc5cac5, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 
+	0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 
+	0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 
+	0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 0xddcecece, 
+	0xddced2ce, 0xddced2ce, 0xddced2ce, 0xddced2ce, 0xddced2ce, 0xddced2ce, 0xddced2ce, 0xddced2ce, 
+	0xddcecfce, 0xddcfd0cf, 0xddd2d0d0, 0xddd1d3d2, 0xddd7d9d7, 0xddd9dad8, 0xdddbdddb, 0xdddde0de, 
+	0xdde0e3e2, 0xdde2e2e3, 0xdde2e3e1, 0xdde3e3e4, 0xdde5e3e5, 0xdde4e3e4, 0xdde3e0e2, 0xdddfdcdf, 
+	0xddd3d1d0, 0xddcecece, 0xddcfd0cf, 0xddd1d0d0, 0xddd5d6d4, 0xddd5d4d5, 0xddd5d4d4, 0xddd2d1d2, 
+	0xddd0cdd0, 0xddcfccd0, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 0xddcecace, 
+	0xddc5cace, 0xddc5cace, 0xddc5cace, 0xddc5cace, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 
+	0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 
+	0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddc5c2c5, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 
+	0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 0xddbdbebd, 
+	0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc5c6c5, 0xddc8c8c9, 0xddc9c8ca, 0xddc9cbcb, 0xddcacdcc, 
+	0xddc9c7c8, 0xddc8c8c9, 0xddcac8ca, 0xddc8c7c9, 0xddc6c7c6, 0xddc2c6c3, 0xddc2c3c1, 0xddc4c7c3, 
+	0xddb9bab9, 0xddb8b6b8, 0xddb7b7b7, 0xddbababa, 0xddbcbfbc, 0xddbcc0bc, 0xddbdc2bd, 0xddbdc2bd, 
+	0xddb5b6b5, 0xddb5b6b5, 0xccb5b6b5, 0xccb5b6b5, 0xccadb2ad, 0xccadb2ad, 0xccadb2ad, 0xccadb2ad, 
+	0xcca5a6a5, 0xcca5a6a5, 0xcca5a6a5, 0xcca5a6a5, 0xcc9c9a94, 0xcc9c9a94, 0xcc9c9a94, 0xcc9c9a94, 
+	0xbb84827b, 0xbb84827b, 0xbb84827b, 0xaa84827b, 0xaa6b6d6b, 0xaa6b6d6b, 0x996b6d6b, 0x99474947, 
+	0xbb524d52, 0x661b1a1b, 0x44000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x22000000, 0x66101010, 0x77242224, 0x663f3f3f, 0x663f3f3f, 0x663f3f3f, 
+	0x77504e50, 0x77504e50, 0x77504e50, 0x77504e50, 0x88656565, 0x88656565, 0x88656565, 0x99656565, 
+	0x99767476, 0x99767476, 0x99767476, 0xaa767476, 0xaa7e7f7e, 0xaa7e7f7e, 0xaa7e7f7e, 0xaa7e7f7e, 
+	0xaa868786, 0xaa868786, 0xbb868786, 0xbb868786, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 
+	0xbb949494, 0xbb949494, 0xbb949494, 0xbb949494, 0xcc9c989c, 0xcc9c989c, 0xcc9c989c, 0xcc9c989c, 
+	0xccb5b6b5, 0xccb5b6b5, 0xccb5b6b5, 0xccb5b6b5, 0xccb5b6b5, 0xccb5b6b5, 0xccb5b6b5, 0xccb5b6b5, 
+	0xccbdbabd, 0xccbdbabd, 0xccbdbabd, 0xccbdbabd, 0xccbdbebd, 0xccbdbebd, 0xccbcbdbc, 0xccb9baba, 
+	0xccb1b3b4, 0xccb2b4b4, 0xccb2b5b5, 0xccb3b5b6, 0xccb1b4b6, 0xccb3b5b6, 0xccb4b8b8, 0xccb7b9b9, 
+	0xccc0c0c2, 0xccc5c2c5, 0xccc5c2c5, 0xccc5c2c5, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 
+	0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccc5c6c5, 0xccc5c6c5, 0xccc5c6c5, 0xccc5c6c5, 
+	0xccc5cac5, 0xccc5cac5, 0xccc5cac5, 0xccc5cac5, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, 
+	0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, 
+	0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 
+	0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 0xcccecece, 
+	0xccced2ce, 0xccced2ce, 0xccced2ce, 0xccced2ce, 0xccced2ce, 0xccced2ce, 0xccced2ce, 0xccced2ce, 
+	0xcccecfce, 0xcccdcecd, 0xcccdcdcd, 0xcccbcbca, 0xccc7c8c7, 0xccc3c5c5, 0xccc3c4c4, 0xccc2c3c2, 
+	0xccbec1bf, 0xccbbbdbc, 0xccb7b8b6, 0xccb0b2b0, 0xccaeb1af, 0xccb0b1b0, 0xccb5b4b4, 0xccbcbabb, 
+	0xcca3a6a3, 0xccb8bab7, 0xccc9c9c7, 0xccc9c7c8, 0xccacacac, 0xccb5b3b7, 0xccb8b5b7, 0xccb7b5b5, 
+	0xccb0aeb1, 0xccb7b6b5, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, 0xcccecace, 
+	0xccc5cace, 0xccc5cace, 0xccc5cace, 0xccc5cace, 0xccc5c6c5, 0xccc5c6c5, 0xccc5c6c5, 0xccc5c6c5, 
+	0xccc5c6c5, 0xccc5c6c5, 0xccc5c6c5, 0xccc5c6c5, 0xccc5c2c5, 0xccc5c2c5, 0xccc5c2c5, 0xccc5c2c5, 
+	0xccc5c2c5, 0xccc5c2c5, 0xccc5c2c5, 0xccc5c2c5, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 
+	0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 0xccbdbebd, 
+	0xccc5c6c5, 0xccc5c6c5, 0xccabaeac, 0xcca5a6a5, 0xcca8a9a8, 0xccaeadac, 0xccaeacab, 0xccb5b5b4, 
+	0xccbcbdbd, 0xccb0b1b2, 0xcca9a9a9, 0xcca5a4a6, 0xcc9f9fa1, 0xcc9da09f, 0xcc9ca09e, 0xccafb3b1, 
+	0xccacadab, 0xcca8a9a7, 0xcca0a09f, 0xcc999a99, 0xbb939492, 0xbb8d918e, 0xbb8c908c, 0xbb8c908c, 
+	0xbb868686, 0xbb868686, 0xbb868686, 0xbb868686, 0xbb7b7f7b, 0xbb7b7f7b, 0xaa7b7f7b, 0xaa7b7f7b, 
+	0xaa737370, 0xaa737370, 0xaa737370, 0xaa737370, 0x99686763, 0x99686763, 0x99686763, 0x99686763, 
+	0x995a5955, 0x885a5955, 0x885a5955, 0x8831312f, 0x77242424, 0x77242424, 0x77242424, 0x66242424, 
+	0x661b1a1b, 0x33000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x44080408, 0x66080408, 0x66242224, 0x66242224, 
+	0x662c2b2c, 0x662c2b2c, 0x662c2b2c, 0x662c2b2c, 0x663f413f, 0x663f413f, 0x663f413f, 0x663f413f, 
+	0x77504e50, 0x77504e50, 0x77504e50, 0x77504e50, 0x77585858, 0x77585858, 0x77585858, 0x77585858, 
+	0x88606060, 0x88606060, 0x88606060, 0x88606060, 0x88636563, 0x88636563, 0x88636563, 0x88636563, 
+	0x886b6b6b, 0x886b6b6b, 0x996b6b6b, 0x996b6b6b, 0x99736f73, 0x99736f73, 0x99736f73, 0x99736f73, 
+	0x996e6d6e, 0x996e6d6e, 0x996e6d6e, 0x996e6d6e, 0x996e706e, 0x996e706e, 0x996e706e, 0x996e706e, 
+	0x99707170, 0x99707170, 0x99707170, 0x99707170, 0xaa767576, 0x99767576, 0xaa767576, 0xaa767576, 
+	0xaa7b7c7e, 0xaa7b7c7e, 0xaa7b7c7f, 0xaa7d7e80, 0xaa7a7a7c, 0xaa7b7a7c, 0xaa787979, 0xaa777677, 
+	0xaa797979, 0xaa797979, 0xaa797979, 0xaa797979, 0xaa979694, 0xaa979694, 0xaa979694, 0xaa979694, 
+	0xaa949694, 0xaa949694, 0xaa949694, 0xaa949694, 0xaa797b79, 0xaa797b79, 0xaa797b79, 0xaa797b79, 
+	0xaa797979, 0xaa797979, 0xaa797979, 0xaa797979, 0xaa7b7976, 0xaa7b7976, 0xaa7b7976, 0xaa7b7976, 
+	0xaa767776, 0xaa767776, 0xaa767776, 0xaa767776, 0xaa767776, 0xaa767776, 0xaa767776, 0xaa767776, 
+	0xaa767576, 0x99767576, 0x99767576, 0x99767576, 0x99767876, 0x99767876, 0x99767876, 0x99767876, 
+	0x99767576, 0x99767576, 0x99767576, 0x99767576, 0x99767576, 0x99767576, 0x99767576, 0x99767576, 
+	0x99767776, 0x99767776, 0x99767776, 0x99767776, 0x99707770, 0x99707770, 0x99707770, 0x99707770, 
+	0x99707370, 0x99707370, 0x99707370, 0x99717571, 0x99787c79, 0x99787d79, 0x99787d79, 0x99797d79, 
+	0x99787d79, 0x99797d79, 0x99797d78, 0x99797d79, 0x99797c79, 0x99797c79, 0x99797c79, 0x99797c78, 
+	0x99747672, 0x99727672, 0x99727371, 0x99707371, 0x99797879, 0x99797878, 0x99797879, 0x99787879, 
+	0x99777577, 0xaa777676, 0xaa767476, 0xaa767476, 0xaa767476, 0xaa767476, 0xaa767476, 0xaa767476, 
+	0xaa6e7170, 0xaa6e7170, 0xaa6e7170, 0xaa6e7170, 0xaa737373, 0xaa737373, 0xaa737373, 0xaa737373, 
+	0xaa737373, 0xaa737373, 0xaa737373, 0xaa737373, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 
+	0xaa737173, 0xaa737173, 0xaa737173, 0xaa737173, 0xaa707070, 0xaa707070, 0xaa707070, 0xaa707070, 
+	0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 0xaa6b6d6b, 
+	0x996e706e, 0xaa6f716f, 0x99747673, 0x99757774, 0x99767676, 0x99777876, 0x99737373, 0x99737272, 
+	0x99757577, 0x996e6e72, 0x996b6c70, 0x996b6c70, 0x99686c68, 0x99686c68, 0x99686c68, 0x996b6f6b, 
+	0x99636563, 0x995d5e5d, 0x995d5e5d, 0x995d5e5d, 0x995a5e5a, 0x885a5e5a, 0x885a5e5a, 0x885a5e5a, 
+	0x88585558, 0x88585558, 0x88585558, 0x88585558, 0x884a4c4a, 0x884a4c4a, 0x884a4c4a, 0x884a4c4a, 
+	0x77423f3c, 0x77423f3c, 0x77423f3c, 0x77423f3c, 0x77343331, 0x77343331, 0x77343331, 0x77343331, 
+	0x6631312f, 0x66080808, 0x66080808, 0x66080808, 0x66000000, 0x66000000, 0x55000000, 0x33000000, 
+	0x44000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080408, 0x11080408, 0x22080408, 0x33080408, 
+	0x44080808, 0x55080808, 0x55080808, 0x66080808, 0x66191c19, 0x66191c19, 0x66191c19, 0x66191c19, 
+	0x66292829, 0x66292829, 0x66292829, 0x66292829, 0x66313131, 0x66313131, 0x66313131, 0x66313131, 
+	0x663a393a, 0x663a393a, 0x663a393a, 0x663a393a, 0x663a3d3a, 0x663a3d3a, 0x663a3d3a, 0x663a3d3a, 
+	0x66424142, 0x66424142, 0x66424142, 0x66424142, 0x664a454a, 0x664a454a, 0x664a454a, 0x664a454a, 
+	0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 
+	0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x77525152, 0x77525152, 0x77525152, 0x77525152, 
+	0x77525152, 0x77525152, 0x77525152, 0x77525152, 0x77525152, 0x77525152, 0x77525152, 0x77525152, 
+	0x77525552, 0x77525552, 0x77525552, 0x77525552, 0x774a4542, 0x774a4542, 0x774a4542, 0x774a4542, 
+	0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x77525552, 0x77525552, 0x77525552, 0x77525552, 
+	0x77525152, 0x77525152, 0x77525152, 0x77525152, 0x7752514a, 0x7752514a, 0x7752514a, 0x7752514a, 
+	0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 
+	0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 0x774a4d4a, 
+	0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 
+	0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x77424942, 0x77424942, 0x77424942, 0x77424942, 
+	0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x77424942, 0x77424942, 0x77424942, 0x77424942, 
+	0x77424942, 0x77424942, 0x77424942, 0x77424942, 0x77424942, 0x77424942, 0x77424942, 0x77424942, 
+	0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 
+	0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 
+	0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 
+	0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 
+	0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 0x774a494a, 
+	0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x77424542, 
+	0x77424542, 0x77424542, 0x77424542, 0x77424542, 0x77424142, 0x77424142, 0x77424142, 0x77424142, 
+	0x773a3d42, 0x773a3d42, 0x773a3d42, 0x773a3d42, 0x773a3d3a, 0x773a3d3a, 0x773a3d3a, 0x773a3d3a, 
+	0x66313531, 0x66313531, 0x66313531, 0x66313531, 0x66292d29, 0x66292d29, 0x66292d29, 0x66292d29, 
+	0x66292429, 0x66292429, 0x66292429, 0x66292429, 0x66191819, 0x66191819, 0x66191819, 0x66191819, 
+	0x66100c08, 0x66100c08, 0x66100c08, 0x66100c08, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 
+	0x66080808, 0x66080808, 0x66080808, 0x55080808, 0x44000000, 0x22000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x22000000, 0x22000000, 0x33000000, 0x44000000, 
+	0x44000000, 0x44000000, 0x55000000, 0x55000000, 0x55000400, 0x55000400, 0x55000400, 0x55000400, 
+	0x55080808, 0x66080808, 0x66080808, 0x66080808, 0x662f2f2f, 0x662f2f2f, 0x662f2f2f, 0x662f2f2f, 
+	0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 
+	0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 
+	0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 
+	0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 
+	0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 
+	0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 0x66312f31, 
+	0x662f2f2f, 0x662f2f2f, 0x662f2f2f, 0x662f2f2f, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 
+	0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 
+	0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 0x66080808, 
+	0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 
+	0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 
+	0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 
+	0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 
+	0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 
+	0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 
+	0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 
+	0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 
+	0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 
+	0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080408, 
+	0x66080408, 0x66080408, 0x66080408, 0x66080408, 0x66080400, 0x66080400, 0x66080400, 0x66080400, 
+	0x66000400, 0x66000400, 0x66000400, 0x66000400, 0x66000400, 0x66000400, 0x66000400, 0x66000400, 
+	0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x66000000, 
+	0x66000000, 0x66000000, 0x66000000, 0x66000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 
+	0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x44000000, 0x44000000, 0x33000000, 0x33000000, 
+	0x22000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000400, 0x11000400, 0x11000400, 0x22000400, 
+	0x22080808, 0x22080808, 0x22080808, 0x22080808, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 
+	0x33000000, 0x33000000, 0x33000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 
+	0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 
+	0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x55000000, 0x44000000, 0x44000000, 0x44000000, 
+	0x44000000, 0x44000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 
+	0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 
+	0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55000000, 
+	0x55000000, 0x55000000, 0x55000000, 0x55000000, 0x55080808, 0x44080808, 0x44080808, 0x44080808, 
+	0x55080808, 0x44080808, 0x44080808, 0x55080808, 0x55080808, 0x44080808, 0x44080808, 0x44080808, 
+	0x44080808, 0x44080808, 0x44080808, 0x44080808, 0x44080808, 0x44080808, 0x44080808, 0x44080808, 
+	0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 
+	0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 
+	0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 
+	0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 
+	0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 
+	0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 
+	0x44080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 
+	0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 
+	0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x55080408, 
+	0x55080408, 0x55080408, 0x55080408, 0x55080408, 0x44080408, 0x44080408, 0x44080408, 0x44080408, 
+	0x44080408, 0x44080408, 0x44080408, 0x44080408, 0x44080400, 0x44080400, 0x44080400, 0x44080400, 
+	0x44000400, 0x44000400, 0x44000400, 0x44000400, 0x44000400, 0x44000400, 0x44000400, 0x44000400, 
+	0x44000000, 0x44000000, 0x44000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 
+	0x33000000, 0x33000000, 0x22000000, 0x22000000, 0x22000000, 0x22000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 
+	0x00080808, 0x00080808, 0x00080808, 0x00080808, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11080808, 0x11080808, 0x11080808, 0x11080808, 
+	0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, 
+	0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, 0x11080808, 
+	0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 
+	0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 
+	0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 
+	0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 
+	0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 
+	0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 
+	0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 
+	0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 
+	0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 
+	0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080408, 
+	0x11080408, 0x11080408, 0x11080408, 0x11080408, 0x11080400, 0x11080400, 0x11080400, 0x11080400, 
+	0x11000400, 0x11000400, 0x11000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000400, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xbb4d4e4d, 0xbb737573, 0xbb737573, 
+	0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 
+	0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 
+	0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 
+	0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 
+	0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 
+	0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 
+	0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 
+	0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 
+	0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 0xbb948e94, 
+	0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 
+	0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 
+	0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 
+	0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 
+	0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 
+	0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 
+	0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 
+	0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 
+	0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 
+	0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 
+	0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 
+	0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 
+	0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 
+	0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 
+	0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 
+	0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 
+	0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 
+	0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 
+	0xbb949294, 0xbb949294, 0xbb949294, 0xbb949294, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 0xbb8c8e8c, 
+	0xbb737573, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xcc737573, 0xcc737573, 0xcc737573, 
+	0xcca5a6a5, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 
+	0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xccffffff, 0xcca5a6a5, 0xcca5a6a5, 
+	0xcc737173, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xdd737573, 0xdd737573, 0xddadaead, 
+	0xdda5a6a5, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 
+	0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddffffff, 0xddbabcba, 0xdda5a6a5, 
+	0xddadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xee737573, 0xeeadaead, 0xeeadaead, 
+	0xeebabcba, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeeffffff, 0xeed0d1d0, 0xeebabcba, 
+	0xeeadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xee737573, 0xeeadaead, 0xeeadaead, 
+	0xeed0d1d0, 0xeefffffe, 0xeeffffff, 0xeeffffff, 0xeefefffe, 0xfffefeff, 0xeefffeff, 0xeefefeff, 
+	0xeefeffff, 0xeefeffff, 0xeeffffff, 0xeefeffff, 0xeeffffff, 0xeefffefe, 0xeefffefe, 0xeefeffff, 
+	0xfffefefe, 0xeefefffe, 0xeefffffe, 0xeeffffff, 0xfffefffe, 0xeefffefe, 0xeeffffff, 0xeefffffe, 
+	0xfffefffe, 0xeefffeff, 0xeefeffff, 0xeefffeff, 0xffffffff, 0xeefffffe, 0xfffffefe, 0xfffffeff, 
+	0xeefeffff, 0xffffffff, 0xfffffffe, 0xeefffeff, 0xeefefffe, 0xffffffff, 0xeefffeff, 0xeefefffe, 
+	0xeefffffe, 0xeefffeff, 0xeefeffff, 0xeefeffff, 0xeefffffe, 0xeeffffff, 0xeeffffff, 0xeeffffff, 
+	0xeeffffff, 0xeefffeff, 0xfffeffff, 0xeefffffe, 0xeefffeff, 0xfffefffe, 0xeefffffe, 0xeeffffff, 
+	0xeefffefe, 0xffffffff, 0xeeffffff, 0xeefefefe, 0xeefefefe, 0xeeffffff, 0xeefffefe, 0xeefeffff, 
+	0xfffffffe, 0xeefffffe, 0xeefffefe, 0xeeffffff, 0xeefefeff, 0xeefefeff, 0xfffffeff, 0xfffffeff, 
+	0xffffffff, 0xeefeffff, 0xeefefeff, 0xeefffeff, 0xfffeffff, 0xeefffefe, 0xffffffff, 0xeefffffe, 
+	0xeeffffff, 0xfffffeff, 0xeefffffe, 0xeeffffff, 0xeefeffff, 0xfffefefe, 0xeefffeff, 0xeefffffe, 
+	0xeefffefe, 0xeefffeff, 0xfffefefe, 0xfffffffe, 0xeefffeff, 0xeefefeff, 0xeefffefe, 0xeeffffff, 
+	0xeefffeff, 0xeefefeff, 0xfffefeff, 0xeefefefe, 0xfffffffe, 0xfffefeff, 0xeefefeff, 0xeeffffff, 
+	0xeefefefe, 0xeefffffe, 0xeefefefe, 0xeefffeff, 0xfffefffe, 0xfffefefe, 0xeefefffe, 0xeefefffe, 
+	0xfffffffe, 0xffffffff, 0xeefeffff, 0xfffffefe, 0xeefefefe, 0xeefffefe, 0xfffefefe, 0xeefefeff, 
+	0xfffeffff, 0xeeffffff, 0xfffefefe, 0xfffefefe, 0xeefeffff, 0xeefeffff, 0xfffffefe, 0xeeffffff, 
+	0xeefffefe, 0xeefefffe, 0xeefefffe, 0xeefffeff, 0xfffffefe, 0xeeffffff, 0xfffefeff, 0xfffffefe, 
+	0xeefeffff, 0xeefefeff, 0xeefefeff, 0xeefffffe, 0xfffffefe, 0xeefffeff, 0xeefefffe, 0xeefefefe, 
+	0xeefeffff, 0xeefefefe, 0xeefeffff, 0xeefffeff, 0xeefeffff, 0xeeffffff, 0xfffffeff, 0xeeffffff, 
+	0xeefefffe, 0xfffefffe, 0xfffefffe, 0xeefffeff, 0xfffffeff, 0xeefefefe, 0xeefefffe, 0xeefefffe, 
+	0xeefefffe, 0xeefffeff, 0xeefffeff, 0xfffeffff, 0xeefffffe, 0xeeffffff, 0xeefffefe, 0xeefefefe, 
+	0xeefefeff, 0xeefefefe, 0xeefefeff, 0xeeffffff, 0xeeffffff, 0xfffefffe, 0xfffeffff, 0xeefffefe, 
+	0xeefffffe, 0xeefefefe, 0xeefffefe, 0xeefeffff, 0xeefffffe, 0xeefefefe, 0xeefefffe, 0xeefeffff, 
+	0xeefffeff, 0xfffffffe, 0xeefeffff, 0xeefeffff, 0xeefffffe, 0xeefffffe, 0xeefefffe, 0xeefffeff, 
+	0xeefefeff, 0xfffffffe, 0xeefefeff, 0xeefefffe, 0xeeffffff, 0xeefffefe, 0xeefefeff, 0xeefffffe, 
+	0xeefefffe, 0xeefffeff, 0xeefefeff, 0xfffeffff, 0xeefefeff, 0xeefffeff, 0xeefffffe, 0xeefffeff, 
+	0xeefffefe, 0xeefefeff, 0xeefefffe, 0xeefefeff, 0xeefffeff, 0xeefffffe, 0xeefffffe, 0xeefefeff, 
+	0xeefefefe, 0xfffffeff, 0xeefffefe, 0xeefefeff, 0xeefefefe, 0xfffeffff, 0xeee6e7e6, 0xeed0d1d0, 
+	0xeeadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848384, 0xffc5c2c5, 0xffc5c2c5, 
+	0xffdedfde, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefeff, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefffe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefeff, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefffe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 
+	0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xffe9e9e9, 0xffdedfde, 
+	0xffdedfde, 0x00060306, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848384, 0xffc5c2c5, 0xffc5c2c5, 
+	0xffdedfde, 0xfffefdfd, 0xfffdfdfd, 0xfffdfefd, 0xfffdfdfd, 0xfffdfdfe, 0xfffdfdfd, 0xfffefefd, 
+	0xfffdfefe, 0xfffdfefd, 0xfffefefd, 0xfffefefd, 0xfffefefd, 0xfffdfefd, 0xfffdfdfd, 0xfffdfdfd, 
+	0xfffefefe, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfe, 0xfffefdfd, 0xfffefefd, 0xfffdfefd, 0xfffdfdfd, 
+	0xfffdfdfd, 0xfffdfefe, 0xfffdfdfd, 0xfffdfefd, 0xfffdfefe, 0xfffefdfd, 0xfffefdfd, 0xfffdfdfe, 
+	0xfffdfdfd, 0xfffdfefd, 0xfffdfdfe, 0xfffdfdfd, 0xfffdfdfe, 0xfffdfefd, 0xfffefdfe, 0xfffefdfd, 
+	0xfffdfefd, 0xfffefdfe, 0xfffefdfd, 0xfffefefd, 0xfffefefe, 0xfffefdfe, 0xfffefefe, 0xfffdfdfd, 
+	0xfffdfefd, 0xfffdfefd, 0xfffdfdfd, 0xfffdfdfd, 0xfffefdfe, 0xfffdfefe, 0xfffefdfd, 0xfffdfefd, 
+	0xfffdfdfd, 0xfffdfefe, 0xfffdfefd, 0xfffefdfd, 0xfffdfefe, 0xfffdfdfe, 0xfffdfefd, 0xfffefdfe, 
+	0xfffdfefd, 0xfffefefd, 0xfffdfefd, 0xfffdfefd, 0xfffdfefd, 0xfffdfefe, 0xfffefdfe, 0xfffdfefd, 
+	0xfffefefe, 0xfffdfdfe, 0xfffefefd, 0xfffdfdfd, 0xfffefefd, 0xfffefdfe, 0xfffefdfd, 0xfffefefd, 
+	0xfffdfefd, 0xfffdfefd, 0xfffdfdfe, 0xfffdfdfd, 0xfffefdfe, 0xfffdfefe, 0xfffdfdfd, 0xfffdfefd, 
+	0xfffdfdfe, 0xfffefdfe, 0xfffdfdfe, 0xfffdfefe, 0xfffefefe, 0xfffefefd, 0xfffefdfe, 0xfffdfdfe, 
+	0xfffdfdfd, 0xfffdfefd, 0xfffefdfd, 0xfffdfdfd, 0xfffdfdfe, 0xfffdfdfd, 0xfffefefe, 0xfffefdfd, 
+	0xfffefdfd, 0xfffdfefe, 0xfffdfdfe, 0xfffefdfd, 0xfffefdfd, 0xfffefdfe, 0xfffdfdfd, 0xfffdfdfd, 
+	0xfffefefe, 0xfffdfefe, 0xfffefdfd, 0xfffefefe, 0xfffdfdfd, 0xfffefdfd, 0xfffdfdfd, 0xfffefdfd, 
+	0xfffefdfe, 0xfffdfefd, 0xfffdfdfd, 0xfffdfefe, 0xfffdfdfd, 0xfffdfefe, 0xfffdfdfe, 0xfffdfdfd, 
+	0xfffefefe, 0xfffdfefd, 0xfffdfefe, 0xfffdfdfe, 0xfffdfdfe, 0xfffefefd, 0xfffefdfe, 0xfffdfdfd, 
+	0xfffdfdfd, 0xfffefefe, 0xfffdfdfe, 0xfffefdfe, 0xfffdfdfd, 0xfffdfefd, 0xfffefefe, 0xfffefdfd, 
+	0xfffdfefe, 0xfffdfefe, 0xfffefefe, 0xfffdfdfe, 0xfffdfdfd, 0xfffefdfd, 0xfffdfdfd, 0xfffdfdfd, 
+	0xfffdfdfd, 0xfffdfefd, 0xfffdfdfd, 0xfffefdfd, 0xfffefefe, 0xfffdfefd, 0xfffefdfd, 0xfffdfefe, 
+	0xfffefdfd, 0xfffefdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffefdfe, 0xfffefdfd, 0xfffefdfd, 0xfffdfefe, 
+	0xfffdfefd, 0xfffdfefd, 0xfffdfdfd, 0xfffefefe, 0xfffdfefd, 0xfffefdfd, 0xfffdfdfd, 0xfffefefd, 
+	0xfffefefd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfefd, 0xfffdfdfe, 0xfffefdfe, 0xfffefdfd, 
+	0xfffdfdfd, 0xfffefefd, 0xfffefefd, 0xfffdfefd, 0xfffefefd, 0xfffefdfd, 0xfffdfefe, 0xfffdfefd, 
+	0xfffdfdfd, 0xfffdfdfe, 0xfffdfdfe, 0xfffdfdfd, 0xfffdfdfe, 0xfffefdfe, 0xfffefdfd, 0xfffdfefe, 
+	0xfffdfdfd, 0xfffefefd, 0xfffdfdfd, 0xfffefdfe, 0xfffdfefe, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfe, 
+	0xfffefdfe, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffefdfe, 0xfffefdfe, 0xfffdfdfd, 0xfffdfdfe, 
+	0xfffefefd, 0xfffdfdfd, 0xfffefefe, 0xfffdfefd, 0xfffdfdfe, 0xfffdfdfe, 0xfff4f4f4, 0xffdedfde, 
+	0xffdedfde, 0x00060306, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848384, 0xffc5c2c5, 0xffc5c2c5, 
+	0xffe9e9e9, 0xfffdfcfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfc, 0xfffcfcfd, 0xfffdfdfd, 0xfffdfdfd, 
+	0xfffcfdfd, 0xfffdfdfc, 0xfffcfdfd, 0xfffcfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfcfd, 0xfffdfdfc, 
+	0xfffdfcfd, 0xfffdfcfd, 0xfffdfcfc, 0xfffcfcfc, 0xfffdfcfd, 0xfffdfdfd, 0xfffdfcfd, 0xfffdfdfd, 
+	0xfffdfdfd, 0xfffdfcfc, 0xfffdfcfd, 0xfffcfcfd, 0xfffdfdfc, 0xfffdfcfd, 0xfffdfdfc, 0xfffdfdfd, 
+	0xfffdfdfc, 0xfffcfdfd, 0xfffdfdfc, 0xfffdfcfd, 0xfffcfcfd, 0xfffdfdfd, 0xfffdfdfc, 0xfffdfdfd, 
+	0xfffdfdfd, 0xfffdfdfd, 0xfffcfcfc, 0xfffdfdfd, 0xfffcfdfd, 0xfffdfdfc, 0xfffdfdfc, 0xfffdfcfd, 
+	0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffcfdfd, 
+	0xfffdfcfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffcfdfd, 0xfffcfcfc, 0xfffcfdfd, 0xfffdfdfc, 0xfffdfcfd, 
+	0xfffdfcfd, 0xfffdfcfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffcfdfd, 0xfffdfcfd, 0xfffdfdfd, 
+	0xfffdfdfd, 0xfffdfdfc, 0xfffdfdfd, 0xfffdfcfd, 0xfffcfdfd, 0xfffdfcfc, 0xfffdfcfd, 0xfffdfdfd, 
+	0xfffcfdfc, 0xfffdfdfd, 0xfffdfcfc, 0xfffdfcfc, 0xfffcfdfc, 0xfffcfdfd, 0xfffdfdfd, 0xfffcfcfd, 
+	0xfffdfcfd, 0xfffcfcfc, 0xfffdfdfc, 0xfffcfcfd, 0xfffcfdfd, 0xfffdfdfd, 0xfffcfcfd, 0xfffdfdfd, 
+	0xfffdfcfd, 0xfffcfdfd, 0xfffdfdfd, 0xfffdfdfc, 0xfffcfcfc, 0xfffdfcfd, 0xfffcfdfd, 0xfffdfcfc, 
+	0xfffcfdfc, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfc, 0xfffdfdfd, 0xfffdfdfd, 0xfffcfcfd, 0xfffdfdfd, 
+	0xfffdfdfc, 0xfffdfdfd, 0xfffdfdfd, 0xfffcfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfc, 0xfffdfcfd, 
+	0xfffdfdfd, 0xfffcfcfc, 0xfffdfcfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 
+	0xfffdfcfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfcfd, 0xfffdfdfd, 
+	0xfffdfdfd, 0xfffcfdfd, 0xfffdfcfc, 0xfffcfdfc, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 
+	0xfffdfdfd, 0xfffdfcfc, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffcfdfd, 0xfffdfcfd, 0xfffdfdfd, 
+	0xfffdfdfc, 0xfffdfdfc, 0xfffcfdfd, 0xfffcfdfd, 0xfffdfdfc, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfdfd, 
+	0xfffdfcfd, 0xfffdfdfd, 0xfffdfdfc, 0xfffdfdfc, 0xfffdfdfc, 0xfffdfdfd, 0xfffcfdfc, 0xfffdfdfd, 
+	0xfffdfdfd, 0xfffcfcfd, 0xfffdfcfd, 0xfffcfdfc, 0xfffdfcfd, 0xfffcfdfc, 0xfffdfdfd, 0xfffdfdfd, 
+	0xfffdfcfc, 0xfffdfdfd, 0xfffcfcfd, 0xfffdfdfc, 0xfffdfdfc, 0xfffdfdfc, 0xfffdfcfd, 0xfffdfdfd, 
+	0xfffcfdfd, 0xfffdfcfd, 0xfffdfcfd, 0xfffdfdfc, 0xfffdfdfd, 0xfffcfdfd, 0xfffdfdfd, 0xfffcfdfd, 
+	0xfffdfcfd, 0xfffcfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfcfd, 0xfffdfdfd, 0xfffcfdfd, 0xfffdfcfc, 
+	0xfffcfcfd, 0xfffdfcfd, 0xfffdfdfc, 0xfffcfdfd, 0xfffdfdfd, 0xfffdfdfd, 0xfffdfcfd, 0xfffdfdfc, 
+	0xfffdfdfd, 0xfffdfdfd, 0xfffdfcfc, 0xfffdfdfd, 0xfffdfcfd, 0xfffcfdfd, 0xfffcfdfc, 0xfffdfdfd, 
+	0xfffdfdfc, 0xfffdfdfd, 0xfffdfdfd, 0xfffcfdfd, 0xfffcfdfd, 0xfffdfcfd, 0xfff4f4f4, 0xffe9e9e9, 
+	0xffdedfde, 0x00060306, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848384, 0xffc5c2c5, 0xffc5c2c5, 
+	0xffe9e9e9, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfbfc, 
+	0xfffbfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffbfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfbfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfbfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfb, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfb, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfb, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfb, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 
+	0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfffcfcfc, 0xfff4f4f4, 0xffe9e9e9, 
+	0xffdedfde, 0x00060306, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848684, 0xffc5c6c5, 0xffc5c6c5, 
+	0xffe6ebe6, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 
+	0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffcfbfb, 
+	0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfbfb, 
+	0xfffbfcfc, 0xfffcfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfbfc, 
+	0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffcfcfc, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfcfb, 0xfffbfbfb, 
+	0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 
+	0xfffcfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffcfbfb, 
+	0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfc, 0xfffbfcfb, 0xfffbfcfb, 
+	0xfffbfcfc, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfcfb, 0xfffbfbfc, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 
+	0xfffcfbfb, 0xfffcfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfc, 0xfffbfbfb, 0xfffbfbfb, 
+	0xfffbfbfc, 0xfffbfbfb, 0xfffbfcfc, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfb, 
+	0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfb, 
+	0xfffbfcfb, 0xfffbfcfb, 0xfffcfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfc, 0xfffcfbfb, 0xfffbfbfc, 
+	0xfffbfbfb, 0xfffcfbfb, 0xfffbfbfc, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 
+	0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfc, 0xfffcfbfb, 
+	0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfbfb, 
+	0xfffbfbfc, 0xfffbfbfc, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfc, 0xfffcfbfb, 0xfffbfcfb, 
+	0xfffbfbfb, 0xfffcfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 
+	0xfffbfbfc, 0xfffbfcfc, 0xfffcfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfc, 0xfffbfbfb, 
+	0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, 
+	0xfffbfcfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfbfc, 0xfffbfcfc, 0xfffbfbfc, 0xfffbfbfb, 0xfffbfcfc, 
+	0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfc, 
+	0xfffbfcfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffcfbfb, 0xfffbfbfc, 0xfffbfcfc, 
+	0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfc, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfc, 0xfffbfcfb, 0xfffbfbfb, 
+	0xfffbfbfb, 0xfffbfcfb, 0xfffcfbfb, 0xfffbfbfc, 0xfffbfbfb, 0xfffcfbfb, 0xfffcfbfb, 0xfffbfbfb, 
+	0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfcfb, 0xfffbfbfb, 
+	0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffcfbfb, 
+	0xfffbfbfc, 0xfffbfcfb, 0xfffbfcfb, 0xfffbfbfb, 0xfffbfbfb, 0xfffbfbfc, 0xfff7f8f7, 0xffe6ebe6, 
+	0xffdedfde, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848684, 0xffc5c6c5, 0xffc5c6c5, 
+	0xffe6ebe6, 0xfffafafb, 0xfffafafb, 0xfffafafa, 0xfffafbfa, 0xfffbfafb, 0xfffafafa, 0xfffafafa, 
+	0xfffafbfa, 0xfffbfafa, 0xfffbfafa, 0xfffafbfa, 0xfffbfafa, 0xfffbfafb, 0xfffafafa, 0xfffbfafa, 
+	0xfffafafa, 0xfffafafb, 0xfffbfafb, 0xfffafafa, 0xfffbfbfa, 0xfffafafa, 0xfffafbfb, 0xfffafbfb, 
+	0xfffafbfa, 0xfffafafb, 0xfffafbfa, 0xfffbfafa, 0xfffbfbfa, 0xfffafbfa, 0xfffbfafa, 0xfffafbfa, 
+	0xfffafafa, 0xfffbfafa, 0xfffafbfa, 0xfffbfafb, 0xfffafafb, 0xfffafafa, 0xfffafbfa, 0xfffbfbfb, 
+	0xfffafbfa, 0xfffbfafb, 0xfffafafa, 0xfffafbfb, 0xfffafbfa, 0xfffafafa, 0xfffafafb, 0xfffafbfb, 
+	0xfffbfafa, 0xfffafbfa, 0xfffafafb, 0xfffafafb, 0xfffafafb, 0xfffafafb, 0xfffbfbfb, 0xfffafafa, 
+	0xfffafafa, 0xfffafafb, 0xfffbfafa, 0xfffafbfa, 0xfffafbfa, 0xfffafbfa, 0xfffafafa, 0xfffbfbfa, 
+	0xfffafafa, 0xfffbfbfa, 0xfffbfafa, 0xfffbfafb, 0xfffafafa, 0xfffafbfa, 0xfffafafa, 0xfffafbfa, 
+	0xfffafafa, 0xfffafafa, 0xfffbfafb, 0xfffafafa, 0xfffafbfa, 0xfffafafa, 0xfffafafa, 0xfffafafa, 
+	0xfffbfbfa, 0xfffafafa, 0xfffbfafa, 0xfffafafb, 0xfffbfbfa, 0xfffafbfa, 0xfffafbfa, 0xfffafafa, 
+	0xfffafbfb, 0xfffbfbfa, 0xfffafafa, 0xfffafafa, 0xfffbfafb, 0xfffafafb, 0xfffafbfa, 0xfffafbfa, 
+	0xfffbfbfa, 0xfffbfbfb, 0xfffafbfa, 0xfffafafa, 0xfffbfbfa, 0xfffbfafa, 0xfffafbfa, 0xfffafafa, 
+	0xfffbfafb, 0xfffafafa, 0xfffbfafb, 0xfffbfbfb, 0xfffbfafb, 0xfffafafa, 0xfffafafa, 0xfffafbfa, 
+	0xfffafafa, 0xfffafafb, 0xfffafafb, 0xfffafafb, 0xfffbfafb, 0xfffbfafb, 0xfffafbfa, 0xfffbfafa, 
+	0xfffafafa, 0xfffafbfb, 0xfffbfafa, 0xfffafafb, 0xfffafbfb, 0xfffafbfa, 0xfffafafa, 0xfffbfbfa, 
+	0xfffafbfa, 0xfffafafa, 0xfffafafb, 0xfffbfafa, 0xfffafafa, 0xfffbfafa, 0xfffbfafb, 0xfffbfafb, 
+	0xfffafafa, 0xfffafbfa, 0xfffbfbfa, 0xfffafbfa, 0xfffbfbfa, 0xfffafbfa, 0xfffafbfb, 0xfffafbfa, 
+	0xfffbfbfb, 0xfffafbfb, 0xfffbfafb, 0xfffafafa, 0xfffafafa, 0xfffbfafa, 0xfffbfafa, 0xfffbfafb, 
+	0xfffbfbfa, 0xfffafbfa, 0xfffafafa, 0xfffafbfa, 0xfffbfafa, 0xfffafafb, 0xfffafbfa, 0xfffafafb, 
+	0xfffbfbfa, 0xfffbfafa, 0xfffbfbfa, 0xfffbfafb, 0xfffbfafa, 0xfffafafa, 0xfffafafa, 0xfffbfafb, 
+	0xfffafafa, 0xfffbfbfb, 0xfffbfafb, 0xfffafafb, 0xfffafafa, 0xfffbfafa, 0xfffbfafb, 0xfffbfafb, 
+	0xfffbfafa, 0xfffafafb, 0xfffbfafa, 0xfffafafb, 0xfffafafa, 0xfffafbfb, 0xfffbfbfa, 0xfffbfafa, 
+	0xfffafbfa, 0xfffafafa, 0xfffafbfa, 0xfffbfbfa, 0xfffafbfb, 0xfffafbfb, 0xfffbfafb, 0xfffafafa, 
+	0xfffafbfb, 0xfffafafb, 0xfffbfbfa, 0xfffafafa, 0xfffafafb, 0xfffafafa, 0xfffafafb, 0xfffafbfa, 
+	0xfffbfafa, 0xfffbfbfb, 0xfffafafb, 0xfffafbfb, 0xfffafbfb, 0xfffbfafa, 0xfffafbfb, 0xfffafafa, 
+	0xfffafafa, 0xfffafbfa, 0xfffbfafa, 0xfffafbfa, 0xfffbfafa, 0xfffbfafa, 0xfffafbfa, 0xfffbfafb, 
+	0xfffafbfa, 0xfffafafb, 0xfffbfafa, 0xfffbfafb, 0xfffafbfb, 0xfffbfbfa, 0xfff7f8f7, 0xffe6ebe6, 
+	0xffdedfde, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848684, 0xffc5c6c5, 0xffc5c6c5, 
+	0xffe6ebe6, 0xfffafafa, 0xfff9f9fa, 0xfffaf9fa, 0xfff9faf9, 0xfff9faf9, 0xfffafafa, 0xfff9f9f9, 
+	0xfffaf9f9, 0xfff9f9f9, 0xfff9f9f9, 0xfffaf9f9, 0xfff9fafa, 0xfff9fafa, 0xfff9f9fa, 0xfffafaf9, 
+	0xfff9faf9, 0xfffafafa, 0xfff9f9fa, 0xfff9f9f9, 0xfff9f9f9, 0xfffaf9fa, 0xfffaf9fa, 0xfff9f9f9, 
+	0xfffafaf9, 0xfff9f9f9, 0xfff9faf9, 0xfffaf9f9, 0xfffafaf9, 0xfffaf9f9, 0xfff9f9fa, 0xfff9f9f9, 
+	0xfffafafa, 0xfff9faf9, 0xfff9f9f9, 0xfff9fafa, 0xfffafaf9, 0xfff9f9fa, 0xfffaf9f9, 0xfff9f9fa, 
+	0xfff9faf9, 0xfffafafa, 0xfffafafa, 0xfffafaf9, 0xfff9faf9, 0xfff9f9f9, 0xfff9fafa, 0xfffafaf9, 
+	0xfffafaf9, 0xfffafafa, 0xfff9f9fa, 0xfffaf9fa, 0xfffafaf9, 0xfff9f9f9, 0xfffaf9f9, 0xfff9fafa, 
+	0xfff9fafa, 0xfff9faf9, 0xfffaf9f9, 0xfffaf9fa, 0xfffaf9f9, 0xfff9f9fa, 0xfffaf9f9, 0xfff9f9f9, 
+	0xfff9faf9, 0xfffaf9fa, 0xfffaf9f9, 0xfffaf9f9, 0xfff9faf9, 0xfffafafa, 0xfff9f9f9, 0xfff9f9fa, 
+	0xfffafafa, 0xfff9f9f9, 0xfffafaf9, 0xfffaf9f9, 0xfff9faf9, 0xfff9f9f9, 0xfffafaf9, 0xfff9f9fa, 
+	0xfff9faf9, 0xfff9fafa, 0xfffaf9fa, 0xfffafaf9, 0xfffafaf9, 0xfffaf9fa, 0xfff9f9fa, 0xfffaf9f9, 
+	0xfffaf9fa, 0xfff9fafa, 0xfffaf9f9, 0xfff9f9f9, 0xfffaf9f9, 0xfff9f9fa, 0xfffafafa, 0xfff9fafa, 
+	0xfff9f9fa, 0xfffaf9f9, 0xfffafaf9, 0xfffafaf9, 0xfff9faf9, 0xfff9f9fa, 0xfff9fafa, 0xfffaf9fa, 
+	0xfff9f9fa, 0xfffaf9f9, 0xfffafafa, 0xfff9faf9, 0xfffafaf9, 0xfffaf9f9, 0xfff9faf9, 0xfffaf9fa, 
+	0xfffafafa, 0xfffafaf9, 0xfff9faf9, 0xfffafaf9, 0xfffafafa, 0xfffafafa, 0xfff9f9f9, 0xfff9f9fa, 
+	0xfffaf9fa, 0xfff9f9f9, 0xfffafaf9, 0xfffafaf9, 0xfffafaf9, 0xfffaf9f9, 0xfffafafa, 0xfff9f9fa, 
+	0xfff9fafa, 0xfff9faf9, 0xfffaf9f9, 0xfffaf9fa, 0xfff9f9f9, 0xfff9fafa, 0xfff9f9fa, 0xfff9f9fa, 
+	0xfff9f9f9, 0xfffafaf9, 0xfff9f9f9, 0xfff9faf9, 0xfff9f9fa, 0xfffaf9fa, 0xfff9faf9, 0xfffafafa, 
+	0xfff9f9fa, 0xfffaf9fa, 0xfffafaf9, 0xfffaf9f9, 0xfffafafa, 0xfff9f9fa, 0xfffafaf9, 0xfffaf9f9, 
+	0xfff9faf9, 0xfffafaf9, 0xfff9faf9, 0xfff9f9f9, 0xfff9f9f9, 0xfff9f9f9, 0xfffafaf9, 0xfffaf9fa, 
+	0xfff9faf9, 0xfffaf9f9, 0xfffafaf9, 0xfffafaf9, 0xfff9fafa, 0xfffafafa, 0xfffaf9f9, 0xfff9fafa, 
+	0xfff9f9f9, 0xfffafaf9, 0xfffaf9fa, 0xfff9f9f9, 0xfff9faf9, 0xfffafaf9, 0xfff9f9fa, 0xfff9f9fa, 
+	0xfffafaf9, 0xfffaf9fa, 0xfff9fafa, 0xfff9f9f9, 0xfff9faf9, 0xfff9f9f9, 0xfff9f9fa, 0xfff9fafa, 
+	0xfff9f9fa, 0xfffafafa, 0xfff9f9fa, 0xfffaf9fa, 0xfff9f9fa, 0xfffafaf9, 0xfff9fafa, 0xfff9f9fa, 
+	0xfff9faf9, 0xfff9f9fa, 0xfff9fafa, 0xfffaf9f9, 0xfff9f9f9, 0xfffafafa, 0xfff9f9f9, 0xfff9faf9, 
+	0xfffafaf9, 0xfff9faf9, 0xfff9f9fa, 0xfffaf9f9, 0xfffaf9fa, 0xfff9f9fa, 0xfff9f9f9, 0xfff9fafa, 
+	0xfffafafa, 0xfffafafa, 0xfff9f9f9, 0xfffafafa, 0xfff9f9f9, 0xfffaf9fa, 0xfff9f9f9, 0xfff9fafa, 
+	0xfff9f9f9, 0xfff9f9f9, 0xfffaf9fa, 0xfffaf9f9, 0xfffaf9f9, 0xfffaf9f9, 0xfff7f8f7, 0xffe6ebe6, 
+	0xffdedfde, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff848684, 0xffc5c6c5, 0xffc5c6c5, 
+	0xffe6ebe6, 0xfff8f9f9, 0xfff9f8f8, 0xfff8f9f9, 0xfff9f8f9, 0xfff8f9f9, 0xfff9f8f9, 0xfff9f8f8, 
+	0xfff8f8f9, 0xfff9f9f9, 0xfff8f9f9, 0xfff8f8f9, 0xfff8f8f8, 0xfff9f8f8, 0xfff9f9f9, 0xfff9f9f8, 
+	0xfff9f9f9, 0xfff9f8f9, 0xfff8f9f9, 0xfff8f9f9, 0xfff9f9f8, 0xfff9f8f8, 0xfff8f9f8, 0xfff8f8f9, 
+	0xfff9f8f9, 0xfff8f9f8, 0xfff9f8f8, 0xfff9f9f8, 0xfff9f8f8, 0xfff9f8f8, 0xfff8f9f9, 0xfff9f9f9, 
+	0xfff9f8f8, 0xfff8f9f9, 0xfff8f8f9, 0xfff9f8f9, 0xfff9f9f8, 0xfff9f8f8, 0xfff8f9f8, 0xfff8f8f9, 
+	0xfff9f9f9, 0xfff9f9f9, 0xfff8f9f9, 0xfff8f9f8, 0xfff9f8f9, 0xfff9f9f9, 0xfff8f9f9, 0xfff8f9f8, 
+	0xfff9f8f9, 0xfff8f8f8, 0xfff8f9f9, 0xfff9f9f9, 0xfff8f8f8, 0xfff9f8f9, 0xfff8f8f8, 0xfff9f9f9, 
+	0xfff8f9f9, 0xfff8f9f9, 0xfff8f9f9, 0xfff8f9f9, 0xfff8f8f9, 0xfff8f8f9, 0xfff8f9f8, 0xfff8f8f8, 
+	0xfff9f8f8, 0xfff8f9f9, 0xfff8f9f9, 0xfff8f9f9, 0xfff8f9f9, 0xfff9f9f9, 0xfff9f9f8, 0xfff8f8f8, 
+	0xfff8f8f8, 0xfff9f9f9, 0xfff9f8f8, 0xfff9f8f8, 0xfff8f8f9, 0xfff9f8f9, 0xfff9f9f9, 0xfff9f9f8, 
+	0xfff9f8f8, 0xfff8f8f8, 0xfff8f9f9, 0xfff9f9f9, 0xfff8f9f8, 0xfff9f9f8, 0xfff8f9f9, 0xfff8f9f9, 
+	0xfff9f8f8, 0xfff9f9f9, 0xfff8f8f8, 0xfff8f8f8, 0xfff9f9f8, 0xfff9f9f8, 0xfff9f9f9, 0xfff9f9f8, 
+	0xfff8f9f9, 0xfff9f8f8, 0xfff8f8f8, 0xfff9f9f8, 0xfff8f8f8, 0xfff8f8f9, 0xfff8f8f9, 0xfff8f9f9, 
+	0xfff9f9f9, 0xfff9f9f9, 0xfff8f8f9, 0xfff9f8f9, 0xfff8f8f9, 0xfff8f8f9, 0xfff9f8f8, 0xfff9f9f9, 
+	0xfff9f9f9, 0xfff8f9f9, 0xfff9f9f8, 0xfff9f9f9, 0xfff9f8f8, 0xfff8f8f8, 0xfff9f8f9, 0xfff8f8f8, 
+	0xfff9f8f9, 0xfff9f8f9, 0xfff9f9f8, 0xfff8f8f8, 0xfff8f8f9, 0xfff9f8f9, 0xfff9f8f9, 0xfff8f8f8, 
+	0xfff8f8f9, 0xfff9f9f9, 0xfff8f8f8, 0xfff8f9f8, 0xfff9f9f8, 0xfff9f8f8, 0xfff9f8f9, 0xfff9f9f9, 
+	0xfff9f9f9, 0xfff9f9f8, 0xfff9f8f8, 0xfff9f9f9, 0xfff9f9f9, 0xfff9f8f8, 0xfff8f8f9, 0xfff8f9f8, 
+	0xfff8f9f8, 0xfff9f8f9, 0xfff9f9f8, 0xfff9f9f8, 0xfff9f8f8, 0xfff8f9f9, 0xfff8f8f9, 0xfff8f8f9, 
+	0xfff9f8f8, 0xfff9f8f9, 0xfff8f8f9, 0xfff9f9f9, 0xfff9f8f9, 0xfff8f8f8, 0xfff8f9f8, 0xfff9f8f9, 
+	0xfff9f8f8, 0xfff9f9f9, 0xfff8f8f8, 0xfff9f8f8, 0xfff9f9f9, 0xfff8f9f9, 0xfff8f9f9, 0xfff9f8f8, 
+	0xfff8f9f9, 0xfff8f9f8, 0xfff8f8f9, 0xfff9f8f8, 0xfff8f8f8, 0xfff9f9f9, 0xfff8f9f8, 0xfff8f9f8, 
+	0xfff9f8f8, 0xfff8f9f9, 0xfff8f8f8, 0xfff9f9f8, 0xfff9f9f8, 0xfff8f9f8, 0xfff9f8f8, 0xfff8f8f8, 
+	0xfff9f8f8, 0xfff9f9f9, 0xfff9f9f9, 0xfff9f8f8, 0xfff9f8f8, 0xfff9f9f8, 0xfff8f9f9, 0xfff9f8f9, 
+	0xfff8f8f9, 0xfff9f9f9, 0xfff9f9f8, 0xfff8f9f9, 0xfff8f9f9, 0xfff9f9f8, 0xfff9f8f9, 0xfff9f9f8, 
+	0xfff9f9f9, 0xfff9f8f9, 0xfff9f9f9, 0xfff8f8f9, 0xfff9f9f8, 0xfff8f9f9, 0xfff9f8f9, 0xfff9f9f9, 
+	0xfff9f9f8, 0xfff9f8f9, 0xfff8f8f8, 0xfff9f8f8, 0xfff8f8f9, 0xfff8f9f8, 0xfff8f8f8, 0xfff8f8f9, 
+	0xfff8f9f9, 0xfff9f9f9, 0xfff9f9f9, 0xfff8f9f8, 0xfff9f9f9, 0xfff9f8f8, 0xfff7f8f7, 0xffe6ebe6, 
+	0xffdedfde, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797d79, 0xffb5bab5, 0xffb5bab5, 
+	0xffdedbde, 0xfff7f8f7, 0xfff7f7f8, 0xfff8f8f8, 0xfff7f7f7, 0xfff8f7f8, 0xfff7f7f8, 0xfff8f8f8, 
+	0xfff8f8f8, 0xfff7f8f8, 0xfff7f7f8, 0xfff8f7f8, 0xfff7f8f8, 0xfff8f8f8, 0xfff8f7f7, 0xfff8f8f7, 
+	0xfff7f8f8, 0xfff7f7f7, 0xfff7f7f8, 0xfff8f7f8, 0xfff8f8f7, 0xfff8f7f7, 0xfff7f8f7, 0xfff8f8f8, 
+	0xfff8f7f7, 0xfff8f7f8, 0xfff8f7f8, 0xfff8f8f7, 0xfff8f7f7, 0xfff8f8f8, 0xfff7f8f7, 0xfff8f8f7, 
+	0xfff8f8f7, 0xfff7f8f8, 0xfff7f7f7, 0xfff8f7f8, 0xfff8f7f7, 0xfff7f8f8, 0xfff8f8f8, 0xfff7f7f7, 
+	0xfff7f8f8, 0xfff7f7f8, 0xfff7f8f8, 0xfff7f8f8, 0xfff7f8f8, 0xfff7f7f8, 0xfff8f8f8, 0xfff7f8f8, 
+	0xfff7f8f8, 0xfff8f8f8, 0xfff7f8f7, 0xfff8f8f7, 0xfff7f7f7, 0xfff8f8f8, 0xfff7f7f8, 0xfff8f7f7, 
+	0xfff7f8f7, 0xfff8f8f7, 0xfff7f8f7, 0xfff8f8f8, 0xfff7f7f7, 0xfff8f7f7, 0xfff8f8f7, 0xfff7f8f8, 
+	0xfff7f8f7, 0xfff8f7f8, 0xfff7f8f8, 0xfff8f8f7, 0xfff7f8f7, 0xfff8f8f7, 0xfff7f7f8, 0xfff8f7f8, 
+	0xfff8f8f8, 0xfff8f7f8, 0xfff7f8f8, 0xfff7f7f7, 0xfff7f8f7, 0xfff8f8f8, 0xfff7f7f8, 0xfff8f7f8, 
+	0xfff7f8f8, 0xfff8f8f7, 0xfff8f7f8, 0xfff8f8f8, 0xfff7f8f7, 0xfff8f7f8, 0xfff8f8f7, 0xfff7f8f8, 
+	0xfff7f7f8, 0xfff8f8f7, 0xfff8f8f7, 0xfff8f7f7, 0xfff7f7f7, 0xfff7f7f8, 0xfff7f8f8, 0xfff8f8f7, 
+	0xfff7f8f8, 0xfff8f7f8, 0xfff7f8f8, 0xfff8f8f8, 0xfff7f7f7, 0xfff7f8f7, 0xfff8f7f7, 0xfff8f7f8, 
+	0xfff8f8f7, 0xfff8f7f8, 0xfff8f7f7, 0xfff7f8f8, 0xfff7f7f8, 0xfff7f7f8, 0xfff8f7f8, 0xfff8f7f7, 
+	0xfff7f7f8, 0xfff8f8f8, 0xfff7f7f8, 0xfff7f7f7, 0xfff8f8f7, 0xfff7f8f8, 0xfff8f7f8, 0xfff7f8f8, 
+	0xfff8f7f7, 0xfff8f7f8, 0xfff8f8f7, 0xfff7f8f8, 0xfff8f8f7, 0xfff8f8f7, 0xfff7f8f8, 0xfff8f8f7, 
+	0xfff8f8f8, 0xfff7f7f8, 0xfff7f7f8, 0xfff8f8f8, 0xfff7f7f7, 0xfff8f8f7, 0xfff7f7f8, 0xfff7f8f8, 
+	0xfff7f7f7, 0xfff7f7f7, 0xfff7f8f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff8f8f8, 0xfff7f7f8, 0xfff8f8f8, 
+	0xfff7f8f8, 0xfff8f8f8, 0xfff7f8f8, 0xfff7f8f7, 0xfff8f7f8, 0xfff7f8f8, 0xfff8f7f8, 0xfff7f8f7, 
+	0xfff7f8f7, 0xfff8f8f7, 0xfff8f7f7, 0xfff8f7f8, 0xfff8f7f8, 0xfff7f8f8, 0xfff8f7f7, 0xfff8f8f8, 
+	0xfff8f7f8, 0xfff8f8f7, 0xfff8f7f8, 0xfff8f7f7, 0xfff7f8f8, 0xfff8f8f7, 0xfff8f7f7, 0xfff8f8f7, 
+	0xfff7f8f7, 0xfff7f8f8, 0xfff7f8f8, 0xfff8f8f8, 0xfff8f8f7, 0xfff7f8f8, 0xfff7f8f8, 0xfff7f8f7, 
+	0xfff8f8f8, 0xfff8f8f7, 0xfff8f8f8, 0xfff7f7f7, 0xfff7f7f8, 0xfff8f7f8, 0xfff8f8f8, 0xfff8f7f8, 
+	0xfff8f8f8, 0xfff7f8f7, 0xfff7f8f7, 0xfff8f7f7, 0xfff8f7f7, 0xfff8f8f8, 0xfff7f7f8, 0xfff8f7f7, 
+	0xfff8f8f8, 0xfff8f8f7, 0xfff8f7f7, 0xfff7f7f8, 0xfff7f8f8, 0xfff8f7f7, 0xfff8f7f7, 0xfff8f8f7, 
+	0xfff8f7f7, 0xfff8f8f8, 0xfff8f8f8, 0xfff8f7f7, 0xfff8f8f8, 0xfff7f8f8, 0xfff7f8f8, 0xfff7f7f8, 
+	0xfff7f8f7, 0xfff7f8f7, 0xfff8f8f7, 0xfff8f8f8, 0xfff8f8f8, 0xfff7f7f8, 0xfff7f8f8, 0xfff8f7f7, 
+	0xfff7f7f8, 0xfff8f7f7, 0xfff8f8f8, 0xfff7f8f7, 0xfff7f8f7, 0xfff8f8f8, 0xffe9e8e9, 0xffdedbde, 
+	0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797d79, 0xffb5bab5, 0xffb5bab5, 
+	0xffdedbde, 0xfff6f7f7, 0xfff7f6f7, 0xfff7f6f7, 0xfff6f7f6, 0xfff7f6f7, 0xfff6f6f7, 0xfff6f7f7, 
+	0xfff6f6f7, 0xfff7f6f7, 0xfff7f7f7, 0xfff6f7f6, 0xfff7f7f7, 0xfff6f7f7, 0xfff7f6f6, 0xfff7f7f6, 
+	0xfff6f6f6, 0xfff7f7f7, 0xfff6f6f6, 0xfff6f7f6, 0xfff7f7f6, 0xfff7f7f7, 0xfff6f6f7, 0xfff7f7f6, 
+	0xfff7f7f7, 0xfff7f7f6, 0xfff6f6f6, 0xfff6f7f6, 0xfff7f7f6, 0xfff7f7f6, 0xfff7f6f7, 0xfff7f6f7, 
+	0xfff6f7f6, 0xfff6f6f7, 0xfff7f7f7, 0xfff6f6f6, 0xfff6f7f7, 0xfff6f6f6, 0xfff6f7f6, 0xfff6f7f7, 
+	0xfff7f6f7, 0xfff6f6f6, 0xfff7f7f6, 0xfff6f7f6, 0xfff6f7f7, 0xfff7f7f7, 0xfff7f7f6, 0xfff7f7f7, 
+	0xfff6f6f6, 0xfff6f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f6f7, 0xfff7f6f7, 0xfff7f7f7, 0xfff6f7f7, 
+	0xfff6f7f6, 0xfff6f6f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f6f6, 0xfff7f7f6, 0xfff7f7f7, 
+	0xfff7f7f6, 0xfff6f6f7, 0xfff6f6f7, 0xfff7f7f6, 0xfff7f6f7, 0xfff7f6f6, 0xfff7f7f6, 0xfff6f7f7, 
+	0xfff7f6f7, 0xfff7f6f7, 0xfff7f6f7, 0xfff6f6f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f6, 0xfff6f6f6, 
+	0xfff6f7f6, 0xfff6f6f7, 0xfff7f6f7, 0xfff7f7f6, 0xfff6f6f7, 0xfff7f7f7, 0xfff7f6f6, 0xfff7f6f7, 
+	0xfff6f6f6, 0xfff6f7f7, 0xfff7f6f7, 0xfff7f7f6, 0xfff7f6f7, 0xfff7f6f6, 0xfff7f6f7, 0xfff7f7f6, 
+	0xfff6f7f7, 0xfff7f6f6, 0xfff7f6f6, 0xfff7f6f6, 0xfff7f6f6, 0xfff6f7f7, 0xfff6f6f7, 0xfff7f6f7, 
+	0xfff6f7f7, 0xfff6f7f7, 0xfff6f7f6, 0xfff7f6f7, 0xfff7f7f6, 0xfff7f7f6, 0xfff6f7f7, 0xfff7f6f7, 
+	0xfff7f7f7, 0xfff7f7f6, 0xfff6f6f6, 0xfff7f7f7, 0xfff6f6f7, 0xfff7f7f7, 0xfff6f6f7, 0xfff6f6f6, 
+	0xfff6f6f7, 0xfff6f6f7, 0xfff7f6f7, 0xfff7f6f6, 0xfff7f6f6, 0xfff7f6f7, 0xfff7f7f6, 0xfff6f6f7, 
+	0xfff7f7f7, 0xfff6f7f6, 0xfff6f7f6, 0xfff7f7f7, 0xfff7f6f7, 0xfff6f6f6, 0xfff7f7f7, 0xfff7f6f7, 
+	0xfff7f7f6, 0xfff6f6f7, 0xfff7f6f7, 0xfff6f6f7, 0xfff6f7f6, 0xfff6f7f6, 0xfff6f6f7, 0xfff7f6f7, 
+	0xfff7f6f6, 0xfff7f6f6, 0xfff6f7f6, 0xfff7f7f7, 0xfff6f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f6f6, 
+	0xfff6f7f6, 0xfff7f6f6, 0xfff6f7f7, 0xfff6f6f6, 0xfff7f6f7, 0xfff6f7f7, 0xfff7f6f7, 0xfff7f7f7, 
+	0xfff6f6f6, 0xfff6f6f6, 0xfff6f7f6, 0xfff7f7f6, 0xfff7f6f7, 0xfff6f7f7, 0xfff6f6f6, 0xfff6f6f7, 
+	0xfff6f6f7, 0xfff6f7f7, 0xfff6f7f7, 0xfff6f7f7, 0xfff6f6f6, 0xfff6f7f7, 0xfff7f6f7, 0xfff7f7f7, 
+	0xfff6f7f7, 0xfff7f6f7, 0xfff6f6f6, 0xfff7f6f7, 0xfff6f7f6, 0xfff7f6f6, 0xfff6f7f7, 0xfff6f7f7, 
+	0xfff6f7f7, 0xfff6f7f6, 0xfff6f7f7, 0xfff6f7f7, 0xfff7f7f7, 0xfff7f6f6, 0xfff7f6f6, 0xfff7f6f7, 
+	0xfff7f7f6, 0xfff7f7f6, 0xfff7f6f7, 0xfff6f6f7, 0xfff7f6f7, 0xfff7f6f6, 0xfff7f7f7, 0xfff7f6f7, 
+	0xfff6f6f7, 0xfff7f7f6, 0xfff6f7f6, 0xfff6f7f6, 0xfff7f7f7, 0xfff7f6f7, 0xfff6f7f6, 0xfff7f6f6, 
+	0xfff6f6f7, 0xfff6f7f7, 0xfff7f6f7, 0xfff7f6f6, 0xfff6f6f7, 0xfff7f7f6, 0xfff6f6f7, 0xfff7f6f6, 
+	0xfff6f6f7, 0xfff6f6f7, 0xfff7f7f6, 0xfff6f7f7, 0xfff7f6f6, 0xfff7f7f7, 0xffe9e8e9, 0xffdedbde, 
+	0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797d79, 0xffb5bab5, 0xffb5bab5, 
+	0xffdedbde, 0xfff6f6f6, 0xfff6f6f5, 0xfff6f5f6, 0xfff5f5f6, 0xfff6f5f6, 0xfff6f6f6, 0xfff5f6f5, 
+	0xfff6f6f5, 0xfff5f6f6, 0xfff6f6f5, 0xfff6f5f6, 0xfff6f5f5, 0xfff6f5f6, 0xfff5f6f6, 0xfff6f5f6, 
+	0xfff6f5f6, 0xfff5f5f6, 0xfff6f6f6, 0xfff6f5f6, 0xfff5f6f6, 0xfff6f5f5, 0xfff6f6f6, 0xfff6f5f6, 
+	0xfff6f5f6, 0xfff5f5f6, 0xfff6f6f5, 0xfff5f6f5, 0xfff6f6f6, 0xfff6f5f6, 0xfff6f6f6, 0xfff6f6f5, 
+	0xfff6f5f5, 0xfff5f5f6, 0xfff5f6f5, 0xfff5f6f5, 0xfff6f6f5, 0xfff5f5f6, 0xfff6f5f6, 0xfff6f6f6, 
+	0xfff5f6f6, 0xfff6f5f6, 0xfff5f5f6, 0xfff5f6f6, 0xfff5f6f5, 0xfff5f6f5, 0xfff6f6f6, 0xfff6f6f6, 
+	0xfff5f5f5, 0xfff5f6f6, 0xfff6f6f5, 0xfff5f5f6, 0xfff5f6f5, 0xfff6f6f6, 0xfff6f6f6, 0xfff5f6f6, 
+	0xfff5f5f6, 0xfff5f6f6, 0xfff5f5f6, 0xfff5f5f5, 0xfff6f5f5, 0xfff6f6f6, 0xfff5f5f5, 0xfff5f6f6, 
+	0xfff6f5f6, 0xfff6f6f5, 0xfff5f6f5, 0xfff5f6f5, 0xfff6f6f6, 0xfff5f6f6, 0xfff6f5f6, 0xfff5f5f5, 
+	0xfff6f5f6, 0xfff6f6f6, 0xfff6f6f6, 0xfff5f5f6, 0xfff6f5f6, 0xfff5f6f5, 0xfff6f5f6, 0xfff6f6f5, 
+	0xfff6f6f6, 0xfff6f5f6, 0xfff6f6f5, 0xfff5f6f6, 0xfff5f6f6, 0xfff5f6f5, 0xfff5f5f5, 0xfff6f6f5, 
+	0xfff6f6f6, 0xfff6f6f6, 0xfff5f6f5, 0xfff5f6f5, 0xfff5f5f6, 0xfff6f6f5, 0xfff6f5f5, 0xfff6f6f6, 
+	0xfff5f5f6, 0xfff6f5f6, 0xfff6f5f6, 0xfff6f5f6, 0xfff5f5f6, 0xfff6f6f5, 0xfff6f5f5, 0xfff6f6f5, 
+	0xfff6f6f6, 0xfff6f5f6, 0xfff5f6f6, 0xfff5f6f5, 0xfff6f6f6, 0xfff6f6f6, 0xfff6f5f6, 0xfff5f5f5, 
+	0xfff5f6f5, 0xfff5f5f6, 0xfff5f6f5, 0xfff6f6f6, 0xfff5f6f5, 0xfff6f5f5, 0xfff6f6f5, 0xfff6f6f5, 
+	0xfff5f6f6, 0xfff6f5f5, 0xfff6f6f6, 0xfff6f5f5, 0xfff5f5f6, 0xfff6f6f5, 0xfff5f6f6, 0xfff6f6f6, 
+	0xfff5f6f5, 0xfff5f5f5, 0xfff5f6f6, 0xfff6f6f6, 0xfff5f6f6, 0xfff6f6f5, 0xfff5f6f6, 0xfff5f6f5, 
+	0xfff6f5f6, 0xfff6f5f5, 0xfff5f6f6, 0xfff6f6f5, 0xfff5f6f5, 0xfff6f5f5, 0xfff5f5f5, 0xfff6f6f6, 
+	0xfff5f6f6, 0xfff5f6f5, 0xfff6f6f6, 0xfff5f6f6, 0xfff5f6f6, 0xfff6f5f6, 0xfff5f6f6, 0xfff6f6f6, 
+	0xfff6f5f5, 0xfff6f6f6, 0xfff6f6f6, 0xfff5f6f5, 0xfff6f6f6, 0xfff6f5f5, 0xfff6f6f5, 0xfff6f5f6, 
+	0xfff6f6f5, 0xfff5f6f5, 0xfff6f5f6, 0xfff5f6f5, 0xfff6f5f6, 0xfff5f6f5, 0xfff6f6f6, 0xfff6f6f5, 
+	0xfff6f5f6, 0xfff6f6f6, 0xfff5f6f6, 0xfff5f6f6, 0xfff6f6f5, 0xfff5f5f6, 0xfff5f6f5, 0xfff6f6f6, 
+	0xfff6f6f6, 0xfff6f6f5, 0xfff6f6f6, 0xfff6f5f6, 0xfff5f6f6, 0xfff5f5f6, 0xfff6f5f5, 0xfff5f6f6, 
+	0xfff5f6f6, 0xfff6f5f6, 0xfff5f5f5, 0xfff5f5f6, 0xfff5f6f6, 0xfff6f6f5, 0xfff6f6f6, 0xfff5f6f5, 
+	0xfff5f6f5, 0xfff6f5f6, 0xfff6f5f6, 0xfff6f6f6, 0xfff6f5f6, 0xfff6f6f5, 0xfff6f6f6, 0xfff6f5f6, 
+	0xfff6f6f5, 0xfff5f5f5, 0xfff5f6f5, 0xfff6f6f6, 0xfff6f5f6, 0xfff6f5f6, 0xfff6f6f5, 0xfff6f6f5, 
+	0xfff6f6f6, 0xfff5f6f5, 0xfff6f6f5, 0xfff6f6f5, 0xfff6f5f6, 0xfff6f6f6, 0xfff6f6f5, 0xfff5f6f6, 
+	0xfff6f6f6, 0xfff6f6f5, 0xfff6f5f5, 0xfff6f5f5, 0xfff6f6f6, 0xfff6f6f6, 0xffe9e8e9, 0xffdedbde, 
+	0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797d79, 0xffb5bab5, 0xffb5bab5, 
+	0xffdedbde, 0xfff4f4f4, 0xfff5f5f5, 0xfff5f5f4, 0xfff5f4f5, 0xfff5f4f4, 0xfff5f4f4, 0xfff5f4f5, 
+	0xfff4f5f4, 0xfff4f4f5, 0xfff5f4f4, 0xfff5f4f4, 0xfff4f5f5, 0xfff5f5f4, 0xfff4f5f4, 0xfff4f4f5, 
+	0xfff5f4f5, 0xfff4f5f5, 0xfff5f4f4, 0xfff5f5f5, 0xfff4f5f5, 0xfff4f5f5, 0xfff4f4f5, 0xfff4f5f4, 
+	0xfff4f5f4, 0xfff5f5f4, 0xfff5f5f4, 0xfff4f5f4, 0xfff5f4f5, 0xfff5f5f5, 0xfff4f5f5, 0xfff4f5f5, 
+	0xfff5f5f4, 0xfff4f4f4, 0xfff4f5f4, 0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff4f5f4, 0xfff5f5f5, 
+	0xfff4f4f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff4f4f5, 0xfff4f5f4, 0xfff5f5f4, 0xfff5f5f5, 0xfff5f4f4, 
+	0xfff5f4f5, 0xfff5f4f5, 0xfff4f5f4, 0xfff5f4f5, 0xfff5f5f4, 0xfff5f5f5, 0xfff4f4f5, 0xfff4f5f4, 
+	0xfff4f4f4, 0xfff4f5f4, 0xfff5f5f4, 0xfff5f5f4, 0xfff4f4f5, 0xfff4f5f5, 0xfff4f5f5, 0xfff4f5f4, 
+	0xfff5f5f5, 0xfff4f5f5, 0xfff4f5f5, 0xfff5f4f5, 0xfff4f4f5, 0xfff5f4f5, 0xfff4f5f5, 0xfff4f5f4, 
+	0xfff5f5f5, 0xfff5f5f5, 0xfff5f5f5, 0xfff4f5f5, 0xfff4f4f5, 0xfff4f4f4, 0xfff5f5f5, 0xfff5f5f5, 
+	0xfff4f5f5, 0xfff5f4f5, 0xfff4f5f5, 0xfff4f5f5, 0xfff5f4f5, 0xfff5f5f5, 0xfff5f4f5, 0xfff4f5f5, 
+	0xfff5f5f4, 0xfff4f4f4, 0xfff4f5f5, 0xfff4f4f4, 0xfff4f5f5, 0xfff5f5f4, 0xfff5f5f4, 0xfff4f5f5, 
+	0xfff4f4f4, 0xfff4f5f4, 0xfff4f5f5, 0xfff5f5f4, 0xfff4f5f5, 0xfff4f4f5, 0xfff5f5f4, 0xfff4f4f5, 
+	0xfff5f5f4, 0xfff4f4f5, 0xfff4f5f5, 0xfff4f5f4, 0xfff5f4f5, 0xfff5f5f5, 0xfff4f4f5, 0xfff5f4f5, 
+	0xfff5f5f5, 0xfff4f5f4, 0xfff5f5f5, 0xfff5f5f5, 0xfff4f5f5, 0xfff4f5f4, 0xfff4f4f5, 0xfff4f4f5, 
+	0xfff4f4f5, 0xfff5f4f5, 0xfff4f4f4, 0xfff5f5f5, 0xfff4f4f5, 0xfff5f5f5, 0xfff4f4f5, 0xfff5f4f4, 
+	0xfff4f4f4, 0xfff5f4f4, 0xfff5f5f5, 0xfff5f5f4, 0xfff5f5f5, 0xfff4f5f4, 0xfff5f5f5, 0xfff4f5f5, 
+	0xfff4f5f4, 0xfff5f4f4, 0xfff4f4f4, 0xfff5f5f4, 0xfff4f4f5, 0xfff5f4f5, 0xfff5f4f5, 0xfff5f4f5, 
+	0xfff5f5f5, 0xfff5f4f4, 0xfff4f5f4, 0xfff4f4f5, 0xfff5f5f5, 0xfff5f4f4, 0xfff5f5f5, 0xfff5f4f5, 
+	0xfff4f5f5, 0xfff4f5f5, 0xfff5f4f4, 0xfff5f5f5, 0xfff5f5f4, 0xfff5f4f4, 0xfff4f5f4, 0xfff5f4f4, 
+	0xfff5f5f4, 0xfff4f4f5, 0xfff5f4f4, 0xfff5f4f5, 0xfff4f5f5, 0xfff4f5f5, 0xfff5f5f5, 0xfff4f5f5, 
+	0xfff4f5f4, 0xfff4f5f5, 0xfff5f5f5, 0xfff4f4f5, 0xfff4f5f5, 0xfff4f5f5, 0xfff4f4f5, 0xfff4f5f5, 
+	0xfff5f4f4, 0xfff5f5f5, 0xfff4f5f4, 0xfff5f5f4, 0xfff5f4f4, 0xfff4f5f5, 0xfff4f5f5, 0xfff5f5f5, 
+	0xfff4f4f4, 0xfff5f5f5, 0xfff5f5f5, 0xfff4f5f5, 0xfff5f5f5, 0xfff4f4f5, 0xfff5f5f5, 0xfff4f5f5, 
+	0xfff4f5f4, 0xfff5f5f4, 0xfff5f5f5, 0xfff5f4f5, 0xfff5f4f4, 0xfff4f4f4, 0xfff5f5f4, 0xfff5f5f4, 
+	0xfff5f4f5, 0xfff5f5f4, 0xfff4f5f4, 0xfff4f5f4, 0xfff5f5f5, 0xfff4f4f5, 0xfff5f4f5, 0xfff4f5f5, 
+	0xfff5f5f4, 0xfff5f4f5, 0xfff5f5f5, 0xfff4f5f5, 0xfff4f4f5, 0xfff5f4f5, 0xfff4f4f5, 0xfff5f5f4, 
+	0xfff5f5f5, 0xfff4f5f5, 0xfff4f4f5, 0xfff5f5f5, 0xfff4f5f4, 0xfff4f5f5, 0xffe9e8e9, 0xffdedbde, 
+	0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff797c79, 0xffb5bab5, 0xffb5bab5, 
+	0xffdedbde, 0xfff3f4f4, 0xfff4f3f3, 0xfff3f4f4, 0xfff4f4f4, 0xfff3f4f4, 0xfff3f3f4, 0xfff4f3f3, 
+	0xfff3f3f4, 0xfff3f3f3, 0xfff4f4f4, 0xfff4f4f3, 0xfff3f4f4, 0xfff4f3f4, 0xfff3f4f4, 0xfff3f3f4, 
+	0xfff3f3f3, 0xfff3f4f3, 0xfff4f4f3, 0xfff4f4f3, 0xfff4f4f4, 0xfff4f4f3, 0xfff4f4f4, 0xfff3f3f4, 
+	0xfff4f4f4, 0xfff3f3f3, 0xfff3f4f3, 0xfff3f4f3, 0xfff4f4f3, 0xfff3f4f4, 0xfff4f4f4, 0xfff4f4f3, 
+	0xfff4f4f3, 0xfff3f3f3, 0xfff3f3f4, 0xfff4f3f3, 0xfff4f4f4, 0xfff4f3f4, 0xfff3f3f3, 0xfff4f4f3, 
+	0xfff4f3f4, 0xfff3f4f3, 0xfff3f4f3, 0xfff4f3f4, 0xfff3f4f3, 0xfff4f4f4, 0xfff4f4f4, 0xfff4f3f4, 
+	0xfff4f4f4, 0xfff4f4f3, 0xfff4f3f3, 0xfff3f4f3, 0xfff3f4f3, 0xfff4f3f4, 0xfff3f4f4, 0xfff3f4f3, 
+	0xfff4f3f3, 0xfff4f3f4, 0xfff3f3f4, 0xfff4f4f4, 0xfff3f3f3, 0xfff4f3f3, 0xfff3f3f4, 0xfff3f3f3, 
+	0xfff4f3f3, 0xfff3f3f4, 0xfff4f3f3, 0xfff3f3f4, 0xfff3f4f4, 0xfff4f3f3, 0xfff3f3f3, 0xfff4f3f4, 
+	0xfff4f4f4, 0xfff3f4f4, 0xfff4f3f3, 0xfff3f3f4, 0xfff3f3f3, 0xfff4f4f3, 0xfff4f4f4, 0xfff4f3f3, 
+	0xfff3f4f4, 0xfff3f3f4, 0xfff3f3f4, 0xfff3f4f3, 0xfff3f4f3, 0xfff3f4f4, 0xfff4f3f4, 0xfff4f3f3, 
+	0xfff4f4f4, 0xfff4f4f4, 0xfff4f4f4, 0xfff3f4f4, 0xfff4f4f4, 0xfff3f4f3, 0xfff4f4f4, 0xfff4f3f4, 
+	0xfff3f3f3, 0xfff4f3f3, 0xfff4f3f3, 0xfff3f3f3, 0xfff3f4f3, 0xfff4f4f3, 0xfff3f3f3, 0xfff3f3f3, 
+	0xfff4f4f3, 0xfff3f3f3, 0xfff4f3f3, 0xfff4f4f4, 0xfff4f4f4, 0xfff3f3f4, 0xfff3f4f3, 0xfff4f3f4, 
+	0xfff4f3f4, 0xfff4f4f4, 0xfff3f3f3, 0xfff4f4f3, 0xfff4f3f3, 0xfff3f3f3, 0xfff4f4f4, 0xfff3f4f4, 
+	0xfff3f3f4, 0xfff3f3f4, 0xfff4f4f4, 0xfff3f4f4, 0xfff3f3f3, 0xfff4f3f4, 0xfff3f4f4, 0xfff4f4f4, 
+	0xfff4f4f4, 0xfff3f4f3, 0xfff3f4f4, 0xfff3f4f4, 0xfff3f4f3, 0xfff4f4f4, 0xfff4f4f3, 0xfff3f3f4, 
+	0xfff4f3f4, 0xfff3f3f3, 0xfff3f3f4, 0xfff4f4f4, 0xfff4f3f4, 0xfff3f3f3, 0xfff3f4f4, 0xfff3f3f3, 
+	0xfff4f3f4, 0xfff3f4f4, 0xfff4f3f4, 0xfff4f3f4, 0xfff4f4f4, 0xfff3f3f4, 0xfff4f3f3, 0xfff4f4f4, 
+	0xfff4f3f3, 0xfff3f4f4, 0xfff4f4f4, 0xfff3f4f3, 0xfff4f3f4, 0xfff4f4f4, 0xfff4f3f3, 0xfff3f3f4, 
+	0xfff4f3f3, 0xfff4f4f3, 0xfff3f4f3, 0xfff3f4f3, 0xfff4f4f3, 0xfff3f4f3, 0xfff4f4f4, 0xfff4f4f3, 
+	0xfff4f4f4, 0xfff4f4f3, 0xfff4f3f3, 0xfff4f3f4, 0xfff3f3f4, 0xfff3f4f3, 0xfff3f3f3, 0xfff4f4f4, 
+	0xfff3f3f4, 0xfff4f4f4, 0xfff4f3f3, 0xfff4f4f4, 0xfff4f4f3, 0xfff3f3f3, 0xfff4f4f4, 0xfff3f3f4, 
+	0xfff4f3f3, 0xfff4f3f3, 0xfff3f4f4, 0xfff3f4f3, 0xfff3f4f3, 0xfff4f4f4, 0xfff3f3f4, 0xfff4f4f3, 
+	0xfff3f3f4, 0xfff4f3f4, 0xfff3f4f4, 0xfff3f3f3, 0xfff3f3f4, 0xfff3f3f3, 0xfff4f4f4, 0xfff4f4f4, 
+	0xfff3f3f4, 0xfff3f4f3, 0xfff4f4f3, 0xfff3f4f3, 0xfff3f3f4, 0xfff4f4f4, 0xfff4f4f3, 0xfff3f4f4, 
+	0xfff3f3f3, 0xfff4f3f4, 0xfff4f3f3, 0xfff3f3f4, 0xfff4f4f3, 0xfff3f4f3, 0xfff3f3f4, 0xfff3f4f3, 
+	0xfff4f3f4, 0xfff4f3f4, 0xfff4f4f3, 0xfff4f3f3, 0xfff3f4f4, 0xfff3f4f3, 0xffe9e8e9, 0xffdedbde, 
+	0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff797c79, 0xffb5bab5, 0xffb5bab5, 
+	0xffdedbde, 0xfff3f3f3, 0xfff2f3f2, 0xfff3f2f3, 0xfff2f3f2, 0xfff2f3f3, 0xfff3f2f2, 0xfff2f3f2, 
+	0xfff2f3f3, 0xfff3f3f2, 0xfff3f3f2, 0xfff3f2f3, 0xfff2f3f3, 0xfff3f2f3, 0xfff2f2f2, 0xfff2f3f3, 
+	0xfff2f3f3, 0xfff2f2f2, 0xfff2f3f2, 0xfff2f3f2, 0xfff2f2f3, 0xfff2f3f3, 0xfff2f3f2, 0xfff2f2f3, 
+	0xfff3f2f3, 0xfff3f2f3, 0xfff3f3f3, 0xfff2f2f2, 0xfff3f3f2, 0xfff3f2f3, 0xfff3f2f3, 0xfff2f2f3, 
+	0xfff2f3f3, 0xfff3f3f3, 0xfff3f2f3, 0xfff3f3f3, 0xfff2f3f2, 0xfff3f3f3, 0xfff3f2f3, 0xfff3f2f2, 
+	0xfff2f3f3, 0xfff2f2f3, 0xfff3f3f3, 0xfff2f2f3, 0xfff2f3f2, 0xfff2f2f3, 0xfff2f2f2, 0xfff3f2f3, 
+	0xfff2f2f3, 0xfff3f2f2, 0xfff2f3f2, 0xfff2f2f2, 0xfff2f3f3, 0xfff2f3f2, 0xfff2f2f3, 0xfff3f2f3, 
+	0xfff3f2f3, 0xfff2f3f2, 0xfff3f2f2, 0xfff3f2f3, 0xfff2f2f2, 0xfff3f2f2, 0xfff3f3f3, 0xfff3f3f2, 
+	0xfff2f3f3, 0xfff2f3f2, 0xfff3f3f2, 0xfff3f3f2, 0xfff2f2f2, 0xfff2f3f2, 0xfff2f3f3, 0xfff2f3f3, 
+	0xfff3f2f2, 0xfff3f2f2, 0xfff3f2f3, 0xfff3f3f3, 0xfff3f2f3, 0xfff2f3f2, 0xfff2f2f3, 0xfff2f2f2, 
+	0xfff3f3f2, 0xfff2f3f3, 0xfff2f3f3, 0xfff2f3f3, 0xfff3f2f3, 0xfff2f2f3, 0xfff2f2f3, 0xfff2f3f2, 
+	0xfff2f3f3, 0xfff2f3f2, 0xfff2f3f3, 0xfff3f2f2, 0xfff3f3f3, 0xfff2f2f2, 0xfff2f2f3, 0xfff2f2f3, 
+	0xfff3f2f2, 0xfff3f3f2, 0xfff3f3f3, 0xfff3f3f3, 0xfff3f3f2, 0xfff2f2f2, 0xfff3f3f3, 0xfff3f2f2, 
+	0xfff3f2f2, 0xfff2f3f3, 0xfff3f2f3, 0xfff2f3f2, 0xfff2f2f2, 0xfff2f2f2, 0xfff3f3f3, 0xfff3f2f3, 
+	0xfff3f2f3, 0xfff2f2f3, 0xfff3f2f2, 0xfff3f3f3, 0xfff2f3f3, 0xfff3f2f2, 0xfff3f2f3, 0xfff3f3f3, 
+	0xfff2f3f3, 0xfff2f2f3, 0xfff2f2f3, 0xfff2f2f2, 0xfff3f3f2, 0xfff3f2f2, 0xfff3f2f2, 0xfff2f2f3, 
+	0xfff2f3f2, 0xfff2f3f2, 0xfff3f2f3, 0xfff2f2f2, 0xfff3f2f3, 0xfff2f2f3, 0xfff2f3f2, 0xfff3f3f2, 
+	0xfff2f3f3, 0xfff3f2f3, 0xfff2f2f3, 0xfff3f3f3, 0xfff3f2f2, 0xfff2f2f3, 0xfff3f3f2, 0xfff3f2f2, 
+	0xfff3f2f3, 0xfff2f2f3, 0xfff3f3f2, 0xfff3f3f2, 0xfff3f2f3, 0xfff2f3f2, 0xfff2f2f2, 0xfff3f2f2, 
+	0xfff2f3f3, 0xfff3f2f2, 0xfff2f2f3, 0xfff3f3f2, 0xfff3f2f2, 0xfff3f2f2, 0xfff3f3f3, 0xfff2f3f2, 
+	0xfff2f3f3, 0xfff2f3f3, 0xfff2f3f2, 0xfff3f2f3, 0xfff2f2f2, 0xfff2f3f2, 0xfff2f2f3, 0xfff3f3f3, 
+	0xfff3f2f3, 0xfff2f3f2, 0xfff3f2f2, 0xfff3f2f2, 0xfff3f2f2, 0xfff3f3f3, 0xfff3f3f3, 0xfff3f3f2, 
+	0xfff3f3f3, 0xfff3f2f2, 0xfff2f3f2, 0xfff3f2f3, 0xfff3f2f2, 0xfff2f2f3, 0xfff3f2f2, 0xfff3f2f3, 
+	0xfff2f2f3, 0xfff2f3f3, 0xfff2f2f2, 0xfff2f3f3, 0xfff2f2f3, 0xfff3f3f3, 0xfff2f3f2, 0xfff3f2f2, 
+	0xfff2f2f2, 0xfff3f2f3, 0xfff3f2f2, 0xfff2f2f3, 0xfff2f2f3, 0xfff3f2f3, 0xfff2f2f3, 0xfff2f3f2, 
+	0xfff3f3f3, 0xfff3f3f3, 0xfff3f2f2, 0xfff2f2f2, 0xfff2f3f3, 0xfff3f2f3, 0xfff2f3f2, 0xfff3f3f2, 
+	0xfff2f2f2, 0xfff3f3f2, 0xfff2f2f2, 0xfff2f3f3, 0xfff2f2f3, 0xfff3f2f3, 0xfff3f2f3, 0xfff3f2f3, 
+	0xfff3f3f2, 0xfff3f3f2, 0xfff3f3f2, 0xfff3f2f3, 0xfff3f2f3, 0xfff2f3f3, 0xffe9e8e9, 0xffdedbde, 
+	0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff797c79, 0xffb5bab5, 0xffb5bab5, 
+	0xffdedbde, 0xfff2f1f2, 0xfff1f1f1, 0xfff2f2f1, 0xfff1f2f2, 0xfff2f2f2, 0xfff1f2f1, 0xfff1f1f2, 
+	0xfff2f2f2, 0xfff1f2f1, 0xfff1f2f2, 0xfff1f2f2, 0xfff1f2f2, 0xfff2f1f1, 0xfff2f1f2, 0xfff1f2f1, 
+	0xfff2f2f1, 0xfff1f1f1, 0xfff2f2f1, 0xfff1f1f1, 0xfff2f1f1, 0xfff2f1f1, 0xfff1f1f1, 0xfff2f1f2, 
+	0xfff1f2f2, 0xfff2f1f1, 0xfff1f2f2, 0xfff1f1f2, 0xfff1f1f1, 0xfff1f1f2, 0xfff1f2f1, 0xfff2f1f1, 
+	0xfff2f2f1, 0xfff1f1f1, 0xfff1f2f2, 0xfff1f2f2, 0xfff1f1f2, 0xfff1f2f2, 0xfff1f2f1, 0xfff1f1f1, 
+	0xfff1f2f2, 0xfff2f1f1, 0xfff2f2f2, 0xfff1f2f2, 0xfff2f2f1, 0xfff2f1f2, 0xfff2f1f2, 0xfff1f2f1, 
+	0xfff1f2f2, 0xfff1f1f2, 0xfff2f2f2, 0xfff1f1f2, 0xfff2f2f1, 0xfff1f2f1, 0xfff2f2f1, 0xfff1f2f2, 
+	0xfff1f2f1, 0xfff2f2f2, 0xfff1f1f1, 0xfff1f1f2, 0xfff1f1f2, 0xfff2f1f2, 0xfff1f1f2, 0xfff2f1f1, 
+	0xfff1f2f1, 0xfff2f1f1, 0xfff1f2f1, 0xfff1f2f2, 0xfff2f1f2, 0xfff1f1f1, 0xfff2f1f1, 0xfff2f1f2, 
+	0xfff1f2f1, 0xfff2f2f1, 0xfff2f1f1, 0xfff1f2f2, 0xfff1f1f1, 0xfff1f1f1, 0xfff2f1f2, 0xfff2f1f2, 
+	0xfff1f2f2, 0xfff1f1f2, 0xfff2f2f2, 0xfff2f1f1, 0xfff2f2f1, 0xfff2f2f1, 0xfff2f1f1, 0xfff1f2f1, 
+	0xfff2f1f1, 0xfff1f2f1, 0xfff2f1f1, 0xfff2f2f1, 0xfff1f1f2, 0xfff2f1f1, 0xfff2f1f2, 0xfff1f1f1, 
+	0xfff1f2f1, 0xfff2f1f1, 0xfff1f2f2, 0xfff2f2f2, 0xfff1f1f1, 0xfff1f1f1, 0xfff1f2f1, 0xfff1f1f1, 
+	0xfff1f1f2, 0xfff1f2f2, 0xfff1f2f1, 0xfff2f1f1, 0xfff1f1f1, 0xfff1f2f1, 0xfff1f1f2, 0xfff1f1f2, 
+	0xfff2f1f1, 0xfff1f1f1, 0xfff1f2f2, 0xfff1f1f2, 0xfff2f1f1, 0xfff2f2f1, 0xfff2f2f2, 0xfff2f1f1, 
+	0xfff1f1f1, 0xfff1f1f2, 0xfff1f1f1, 0xfff2f1f2, 0xfff1f1f1, 0xfff1f1f2, 0xfff1f2f1, 0xfff2f1f1, 
+	0xfff1f2f2, 0xfff1f1f2, 0xfff2f1f2, 0xfff1f1f2, 0xfff2f1f1, 0xfff2f1f1, 0xfff2f2f1, 0xfff1f1f1, 
+	0xfff2f2f1, 0xfff1f1f1, 0xfff1f2f2, 0xfff2f1f2, 0xfff2f1f1, 0xfff1f1f1, 0xfff1f2f1, 0xfff1f2f1, 
+	0xfff2f2f1, 0xfff1f1f1, 0xfff2f1f1, 0xfff1f2f2, 0xfff1f1f1, 0xfff1f2f2, 0xfff2f2f2, 0xfff2f1f2, 
+	0xfff2f1f1, 0xfff2f2f1, 0xfff1f1f2, 0xfff1f2f2, 0xfff2f2f1, 0xfff2f1f2, 0xfff2f1f1, 0xfff1f2f1, 
+	0xfff1f2f2, 0xfff2f2f1, 0xfff2f2f1, 0xfff2f1f2, 0xfff1f1f2, 0xfff2f2f2, 0xfff1f2f2, 0xfff2f1f2, 
+	0xfff1f2f1, 0xfff1f2f2, 0xfff1f2f2, 0xfff1f2f1, 0xfff1f2f1, 0xfff1f2f2, 0xfff1f1f1, 0xfff2f2f2, 
+	0xfff1f1f2, 0xfff2f1f2, 0xfff1f1f1, 0xfff1f2f1, 0xfff1f1f1, 0xfff1f2f1, 0xfff1f2f2, 0xfff2f1f1, 
+	0xfff2f1f1, 0xfff1f2f2, 0xfff1f2f2, 0xfff2f1f1, 0xfff2f1f2, 0xfff1f2f2, 0xfff2f1f1, 0xfff1f1f1, 
+	0xfff2f1f1, 0xfff2f1f2, 0xfff2f1f1, 0xfff1f1f2, 0xfff2f2f1, 0xfff1f1f1, 0xfff1f1f2, 0xfff2f1f1, 
+	0xfff2f1f2, 0xfff2f2f2, 0xfff1f2f2, 0xfff2f2f2, 0xfff1f2f1, 0xfff1f1f2, 0xfff2f2f2, 0xfff1f1f1, 
+	0xfff1f2f2, 0xfff2f1f1, 0xfff2f1f1, 0xfff2f1f2, 0xfff1f1f2, 0xfff2f1f2, 0xfff1f1f2, 0xfff1f1f1, 
+	0xfff2f1f2, 0xfff1f2f2, 0xfff1f1f2, 0xfff2f1f1, 0xfff2f1f1, 0xfff2f1f2, 0xffe9e8e9, 0xffdedbde, 
+	0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff797c79, 0xffb5bab5, 0xffb5bab5, 
+	0xffdedbde, 0xfff1f0f0, 0xfff1f1f1, 0xfff1f0f0, 0xfff0f1f0, 0xfff0f0f1, 0xfff1f0f1, 0xfff0f0f1, 
+	0xfff0f1f1, 0xfff0f1f0, 0xfff1f1f1, 0xfff0f1f1, 0xfff1f1f1, 0xfff1f0f0, 0xfff1f0f0, 0xfff0f1f1, 
+	0xfff0f0f0, 0xfff0f1f0, 0xfff0f1f0, 0xfff1f1f0, 0xfff0f0f0, 0xfff1f0f0, 0xfff0f1f1, 0xfff1f1f0, 
+	0xfff0f1f0, 0xfff1f0f1, 0xfff0f1f1, 0xfff1f0f0, 0xfff1f1f1, 0xfff1f0f0, 0xfff1f0f0, 0xfff1f0f1, 
+	0xfff0f1f1, 0xfff1f1f1, 0xfff1f1f0, 0xfff1f0f1, 0xfff0f0f0, 0xfff1f1f1, 0xfff0f0f1, 0xfff0f1f0, 
+	0xfff1f1f0, 0xfff0f0f0, 0xfff0f1f1, 0xfff0f1f1, 0xfff1f1f0, 0xfff0f1f1, 0xfff1f1f1, 0xfff1f0f0, 
+	0xfff1f0f1, 0xfff1f0f1, 0xfff0f0f1, 0xfff1f1f0, 0xfff0f0f0, 0xfff0f1f0, 0xfff1f1f0, 0xfff0f0f1, 
+	0xfff1f0f0, 0xfff1f1f1, 0xfff1f1f1, 0xfff0f0f0, 0xfff0f0f0, 0xfff1f1f1, 0xfff1f0f0, 0xfff0f1f1, 
+	0xfff1f1f0, 0xfff1f0f0, 0xfff1f0f0, 0xfff1f0f1, 0xfff0f0f1, 0xfff0f0f1, 0xfff1f0f1, 0xfff1f0f1, 
+	0xfff1f1f1, 0xfff0f1f1, 0xfff0f0f1, 0xfff1f0f1, 0xfff0f1f1, 0xfff0f0f0, 0xfff1f1f1, 0xfff1f1f0, 
+	0xfff1f1f1, 0xfff1f0f0, 0xfff0f0f0, 0xfff1f0f1, 0xfff0f0f1, 0xfff0f0f0, 0xfff1f0f1, 0xfff1f1f0, 
+	0xfff1f0f0, 0xfff1f0f0, 0xfff0f0f0, 0xfff1f1f0, 0xfff0f0f1, 0xfff0f0f1, 0xfff1f0f0, 0xfff1f1f1, 
+	0xfff1f0f1, 0xfff0f0f1, 0xfff0f0f1, 0xfff0f0f0, 0xfff1f0f0, 0xfff0f0f0, 0xfff0f0f1, 0xfff1f1f1, 
+	0xfff0f0f0, 0xfff0f1f0, 0xfff0f0f0, 0xfff1f0f1, 0xfff0f0f0, 0xfff0f0f0, 0xfff0f1f0, 0xfff0f1f0, 
+	0xfff1f1f0, 0xfff1f1f1, 0xfff0f1f1, 0xfff1f0f0, 0xfff0f0f0, 0xfff1f0f0, 0xfff0f0f0, 0xfff0f0f1, 
+	0xfff0f0f1, 0xfff1f1f1, 0xfff0f0f0, 0xfff0f0f0, 0xfff0f1f0, 0xfff0f1f1, 0xfff1f0f0, 0xfff1f1f1, 
+	0xfff0f0f0, 0xfff0f1f0, 0xfff0f1f0, 0xfff1f0f0, 0xfff1f0f0, 0xfff0f1f1, 0xfff0f0f1, 0xfff1f0f0, 
+	0xfff0f0f1, 0xfff0f0f1, 0xfff0f0f1, 0xfff1f1f0, 0xfff1f0f0, 0xfff1f0f0, 0xfff0f1f0, 0xfff0f0f0, 
+	0xfff0f1f1, 0xfff0f0f0, 0xfff0f1f1, 0xfff0f0f1, 0xfff0f1f1, 0xfff1f1f0, 0xfff1f0f0, 0xfff1f1f0, 
+	0xfff0f0f0, 0xfff0f0f0, 0xfff0f0f0, 0xfff0f0f1, 0xfff1f0f0, 0xfff0f0f0, 0xfff0f0f0, 0xfff0f1f0, 
+	0xfff0f1f0, 0xfff0f0f1, 0xfff1f0f1, 0xfff0f1f1, 0xfff1f1f0, 0xfff1f1f1, 0xfff1f0f0, 0xfff0f0f0, 
+	0xfff0f0f1, 0xfff0f0f0, 0xfff0f0f0, 0xfff0f1f0, 0xfff1f0f1, 0xfff0f1f0, 0xfff0f1f1, 0xfff0f0f0, 
+	0xfff0f0f0, 0xfff0f0f0, 0xfff1f0f0, 0xfff0f1f1, 0xfff1f1f0, 0xfff0f0f0, 0xfff0f0f0, 0xfff0f0f1, 
+	0xfff0f0f1, 0xfff1f0f0, 0xfff0f1f1, 0xfff0f1f1, 0xfff1f1f0, 0xfff1f1f0, 0xfff0f1f0, 0xfff1f0f1, 
+	0xfff0f0f1, 0xfff1f1f0, 0xfff0f0f1, 0xfff0f1f0, 0xfff0f1f1, 0xfff1f0f0, 0xfff0f0f1, 0xfff1f1f0, 
+	0xfff0f1f0, 0xfff0f0f0, 0xfff0f0f1, 0xfff0f1f1, 0xfff0f0f1, 0xfff1f0f1, 0xfff1f1f0, 0xfff1f0f1, 
+	0xfff1f0f0, 0xfff0f0f1, 0xfff0f1f0, 0xfff0f0f1, 0xfff1f0f1, 0xfff1f0f0, 0xfff1f0f0, 0xfff0f0f1, 
+	0xfff0f0f0, 0xfff0f0f1, 0xfff1f0f0, 0xfff0f0f0, 0xfff0f0f0, 0xfff0f1f1, 0xffe9e8e9, 0xffdedbde, 
+	0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, 
+	0xffd6dbd6, 0xfff0eff0, 0xffefeff0, 0xfff0f0ef, 0xfff0eff0, 0xfff0eff0, 0xffefefef, 0xffeff0f0, 
+	0xfff0efef, 0xffefefef, 0xffefefef, 0xfff0efef, 0xffefeff0, 0xfff0efef, 0xffeff0f0, 0xfff0efef, 
+	0xffefefef, 0xffefefef, 0xffeff0f0, 0xfff0efef, 0xffefefef, 0xffeff0f0, 0xffefeff0, 0xffefefef, 
+	0xfff0f0f0, 0xfff0eff0, 0xfff0efef, 0xfff0eff0, 0xfff0efef, 0xfff0f0ef, 0xfff0eff0, 0xfff0efef, 
+	0xffeff0f0, 0xffefeff0, 0xfff0efef, 0xfff0f0ef, 0xffefeff0, 0xffeff0f0, 0xfff0f0f0, 0xfff0efef, 
+	0xfff0f0ef, 0xffefefef, 0xffeff0f0, 0xfff0f0ef, 0xffefefef, 0xffefefef, 0xffefefef, 0xfff0eff0, 
+	0xffefefef, 0xffefefef, 0xfff0eff0, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xfff0efef, 
+	0xfff0efef, 0xfff0f0f0, 0xffeff0ef, 0xffeff0f0, 0xfff0f0f0, 0xffefefef, 0xffefefef, 0xfff0f0f0, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xfff0efef, 0xfff0f0f0, 0xfff0f0f0, 0xfff0efef, 0xffeff0f0, 
+	0xfff0efef, 0xffefeff0, 0xfff0eff0, 0xffeff0ef, 0xfff0eff0, 0xfff0eff0, 0xfff0eff0, 0xffeff0f0, 
+	0xffeff0ef, 0xfff0eff0, 0xffeff0f0, 0xfff0eff0, 0xffefefef, 0xfff0efef, 0xfff0f0ef, 0xffefefef, 
+	0xffeff0f0, 0xffeff0ef, 0xffefeff0, 0xffeff0ef, 0xffeff0ef, 0xffefeff0, 0xfff0f0f0, 0xffefefef, 
+	0xffefeff0, 0xfff0f0ef, 0xfff0efef, 0xfff0efef, 0xffefeff0, 0xfff0f0ef, 0xffeff0ef, 0xffefefef, 
+	0xfff0efef, 0xffefefef, 0xffefefef, 0xfff0f0f0, 0xfff0f0ef, 0xfff0f0ef, 0xffeff0f0, 0xfff0f0ef, 
+	0xffefefef, 0xfff0eff0, 0xfff0efef, 0xfff0efef, 0xffefeff0, 0xfff0efef, 0xffeff0f0, 0xfff0f0ef, 
+	0xffeff0f0, 0xffefefef, 0xffefeff0, 0xfff0eff0, 0xfff0efef, 0xfff0f0f0, 0xfff0efef, 0xfff0f0ef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffeff0f0, 0xfff0eff0, 0xffefeff0, 0xffeff0ef, 0xffefefef, 
+	0xffeff0f0, 0xffefeff0, 0xffefeff0, 0xffefeff0, 0xffeff0ef, 0xffefeff0, 0xffeff0ef, 0xfff0eff0, 
+	0xffeff0ef, 0xfff0eff0, 0xfff0efef, 0xfff0f0ef, 0xffeff0f0, 0xfff0efef, 0xffeff0f0, 0xfff0f0ef, 
+	0xfff0efef, 0xfff0efef, 0xffefefef, 0xffefeff0, 0xffefefef, 0xfff0efef, 0xffefefef, 0xfff0efef, 
+	0xfff0f0f0, 0xfff0f0ef, 0xfff0efef, 0xfff0eff0, 0xffefeff0, 0xffefefef, 0xffeff0ef, 0xffeff0ef, 
+	0xffefeff0, 0xffeff0ef, 0xfff0f0ef, 0xfff0efef, 0xffeff0ef, 0xfff0f0f0, 0xfff0f0ef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffeff0ef, 0xfff0f0ef, 0xffefeff0, 0xffefeff0, 0xffefefef, 0xffefefef, 
+	0xffefeff0, 0xfff0eff0, 0xffeff0f0, 0xffeff0ef, 0xffefefef, 0xffeff0ef, 0xffeff0ef, 0xfff0f0f0, 
+	0xfff0f0f0, 0xfff0eff0, 0xfff0efef, 0xffefefef, 0xfff0eff0, 0xffeff0f0, 0xffefeff0, 0xffefeff0, 
+	0xfff0f0ef, 0xfff0f0ef, 0xffefefef, 0xffefeff0, 0xfff0efef, 0xfff0f0f0, 0xfff0efef, 0xffefefef, 
+	0xfff0eff0, 0xffefefef, 0xffefeff0, 0xffeff0ef, 0xfff0efef, 0xffefefef, 0xffefeff0, 0xffeff0f0, 
+	0xffeff0ef, 0xfff0f0ef, 0xffeff0ef, 0xffefefef, 0xffefeff0, 0xffefefef, 0xffe6e8e6, 0xffd6dbd6, 
+	0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, 
+	0xffd6dbd6, 0xffefeeee, 0xffeeeeee, 0xffeeefee, 0xffeeeeee, 0xffeeeeef, 0xffeeeeee, 0xffefefee, 
+	0xffeeefef, 0xffeeefee, 0xffefefee, 0xffefefee, 0xffefefee, 0xffeeefee, 0xffeeeeee, 0xffeeeeee, 
+	0xffefefef, 0xffeeeeee, 0xffeeeeee, 0xffeeeeef, 0xffefeeee, 0xffefefee, 0xffeeefee, 0xffeeeeee, 
+	0xffeeeeee, 0xffeeefef, 0xffeeeeee, 0xffeeefee, 0xffeeefef, 0xffefeeee, 0xffefeeee, 0xffeeeeef, 
+	0xffeeeeee, 0xffeeefee, 0xffeeeeef, 0xffeeeeee, 0xffeeeeef, 0xffeeefee, 0xffefeeef, 0xffefeeee, 
+	0xffeeefee, 0xffefeeef, 0xffefeeee, 0xffefefee, 0xffefefef, 0xffefeeef, 0xffefefef, 0xffeeeeee, 
+	0xffeeefee, 0xffeeefee, 0xffeeeeee, 0xffeeeeee, 0xffefeeef, 0xffeeefef, 0xffefeeee, 0xffeeefee, 
+	0xffeeeeee, 0xffeeefef, 0xffeeefee, 0xffefeeee, 0xffeeefef, 0xffeeeeef, 0xffeeefee, 0xffefeeef, 
+	0xffeeefee, 0xffefefee, 0xffeeefee, 0xffeeefee, 0xffeeefee, 0xffeeefef, 0xffefeeef, 0xffeeefee, 
+	0xffefefef, 0xffeeeeef, 0xffefefee, 0xffeeeeee, 0xffefefee, 0xffefeeef, 0xffefeeee, 0xffefefee, 
+	0xffeeefee, 0xffeeefee, 0xffeeeeef, 0xffeeeeee, 0xffefeeef, 0xffeeeeef, 0xffeeeeee, 0xffeeefee, 
+	0xffeeeeef, 0xffefeeef, 0xffeeeeef, 0xffeeefef, 0xffefefef, 0xffefefee, 0xffefeeef, 0xffeeeeef, 
+	0xffeeeeee, 0xffeeefee, 0xffefeeee, 0xffeeeeee, 0xffeeeeef, 0xffeeeeee, 0xffefefef, 0xffefeeee, 
+	0xffefeeee, 0xffeeefef, 0xffeeeeef, 0xffefeeee, 0xffefeeee, 0xffefeeef, 0xffeeeeee, 0xffeeeeee, 
+	0xffefefef, 0xffeeefef, 0xffefeeee, 0xffefefef, 0xffeeeeee, 0xffefeeee, 0xffeeeeee, 0xffeeeeee, 
+	0xffefeeef, 0xffeeefee, 0xffeeeeee, 0xffeeefef, 0xffeeeeee, 0xffeeefef, 0xffeeeeef, 0xffeeeeee, 
+	0xffefefef, 0xffeeefee, 0xffeeefef, 0xffeeeeef, 0xffeeeeef, 0xffefefee, 0xffefeeef, 0xffeeeeee, 
+	0xffeeeeee, 0xffefefef, 0xffeeeeef, 0xffefeeef, 0xffeeeeee, 0xffeeefee, 0xffefefef, 0xffefeeee, 
+	0xffeeefef, 0xffeeefef, 0xffefefef, 0xffeeeeef, 0xffeeeeee, 0xffefeeee, 0xffeeeeee, 0xffeeeeee, 
+	0xffeeeeee, 0xffeeefee, 0xffeeeeee, 0xffefeeee, 0xffefefef, 0xffeeefee, 0xffefeeee, 0xffeeefef, 
+	0xffefeeee, 0xffefeeee, 0xffeeeeee, 0xffeeeeee, 0xffefeeef, 0xffefeeee, 0xffefeeee, 0xffeeefef, 
+	0xffeeefee, 0xffeeefee, 0xffeeeeee, 0xffefefef, 0xffeeefee, 0xffefeeee, 0xffeeeeee, 0xffefefee, 
+	0xffefefee, 0xffeeeeee, 0xffeeeeee, 0xffeeeeee, 0xffeeefee, 0xffeeeeef, 0xffefeeef, 0xffefeeee, 
+	0xffeeeeee, 0xffefefee, 0xffefefee, 0xffeeefee, 0xffefefee, 0xffefeeee, 0xffeeefef, 0xffeeefee, 
+	0xffeeeeee, 0xffeeeeef, 0xffeeeeef, 0xffeeeeee, 0xffeeeeef, 0xffefeeef, 0xffefeeee, 0xffeeefef, 
+	0xffeeeeee, 0xffefefee, 0xffeeeeee, 0xffefeeef, 0xffeeefef, 0xffeeeeee, 0xffeeeeee, 0xffeeeeef, 
+	0xffefeeef, 0xffeeeeee, 0xffeeeeee, 0xffeeeeee, 0xffefeeef, 0xffefeeef, 0xffeeeeee, 0xffeeeeef, 
+	0xffefefee, 0xffeeeeee, 0xffefefef, 0xffeeefee, 0xffeeeeef, 0xffeeeeef, 0xffe6e8e6, 0xffd6dbd6, 
+	0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, 
+	0xffd6dbd6, 0xffeeeded, 0xffeeedee, 0xffeeeded, 0xffeeeded, 0xffededed, 0xffedeeed, 0xffedeeed, 
+	0xffedeeee, 0xffeeeded, 0xffedeeee, 0xffedeeed, 0xffeeedee, 0xffeeeeed, 0xffededed, 0xffeeeded, 
+	0xffeeeded, 0xffededee, 0xffeeeded, 0xffededed, 0xffededed, 0xffedeeed, 0xffeeedee, 0xffeeeded, 
+	0xffededee, 0xffeeeded, 0xffededed, 0xffededee, 0xffeeeeed, 0xffededed, 0xffededed, 0xffeeedee, 
+	0xffeeeded, 0xffedeeed, 0xffedeeed, 0xffededed, 0xffededed, 0xffeeeded, 0xffededed, 0xffededed, 
+	0xffeeeeed, 0xffedeeed, 0xffededed, 0xffedeeed, 0xffededed, 0xffeeeeed, 0xffeeeded, 0xffeeeded, 
+	0xffeeeeed, 0xffeeedee, 0xffeeeded, 0xffeeeeee, 0xffedeeed, 0xffeeeded, 0xffedeeee, 0xffededee, 
+	0xffeeeded, 0xffeeedee, 0xffedeeee, 0xffededee, 0xffededed, 0xffedeeee, 0xffeeeded, 0xffeeedee, 
+	0xffededed, 0xffeeedee, 0xffedeeee, 0xffeeedee, 0xffeeeeee, 0xffededee, 0xffededee, 0xffeeedee, 
+	0xffedeeed, 0xffededed, 0xffeeeded, 0xffeeedee, 0xffededee, 0xffeeeded, 0xffededee, 0xffededed, 
+	0xffedeeed, 0xffedeeed, 0xffededed, 0xffededed, 0xffededed, 0xffededed, 0xffedeeee, 0xffededee, 
+	0xffeeeded, 0xffededed, 0xffeeeded, 0xffededed, 0xffedeeed, 0xffeeedee, 0xffededed, 0xffedeeed, 
+	0xffeeedee, 0xffededed, 0xffeeedee, 0xffededed, 0xffededed, 0xffeeedee, 0xffedeeed, 0xffeeeded, 
+	0xffedeeed, 0xffededee, 0xffeeedee, 0xffeeeeed, 0xffedeeed, 0xffeeeeed, 0xffededee, 0xffededee, 
+	0xffedeeed, 0xffeeeded, 0xffededed, 0xffedeeed, 0xffeeeeee, 0xffeeeded, 0xffeeeeed, 0xffeeeded, 
+	0xffeeedee, 0xffededed, 0xffeeeded, 0xffeeeeed, 0xffededee, 0xffeeeeee, 0xffededed, 0xffeeeeed, 
+	0xffeeeded, 0xffeeedee, 0xffededed, 0xffeeedee, 0xffeeeeed, 0xffedeeee, 0xffeeedee, 0xffededed, 
+	0xffeeeeed, 0xffededed, 0xffeeeded, 0xffededed, 0xffededee, 0xffedeeed, 0xffeeeeed, 0xffeeeeee, 
+	0xffedeeee, 0xffededed, 0xffeeeded, 0xffeeeeee, 0xffeeedee, 0xffededed, 0xffeeedee, 0xffedeeed, 
+	0xffeeeeed, 0xffededed, 0xffededed, 0xffedeeee, 0xffedeeed, 0xffedeeed, 0xffededee, 0xffeeeeee, 
+	0xffededed, 0xffeeeeee, 0xffedeeed, 0xffeeeded, 0xffeeeeed, 0xffeeeeee, 0xffedeeed, 0xffeeedee, 
+	0xffedeeee, 0xffededee, 0xffeeeded, 0xffedeeed, 0xffeeeded, 0xffedeeed, 0xffededee, 0xffededee, 
+	0xffeeeded, 0xffededee, 0xffededed, 0xffeeeded, 0xffedeeed, 0xffeeeeed, 0xffededee, 0xffeeedee, 
+	0xffededed, 0xffeeedee, 0xffeeedee, 0xffededed, 0xffedeeed, 0xffedeeee, 0xffeeeeee, 0xffededee, 
+	0xffededee, 0xffedeeed, 0xffeeeeed, 0xffedeeee, 0xffededed, 0xffeeeeed, 0xffedeeed, 0xffededed, 
+	0xffededee, 0xffeeedee, 0xffeeeeed, 0xffedeeee, 0xffeeedee, 0xffedeeee, 0xffededed, 0xffedeeed, 
+	0xffedeeed, 0xffededed, 0xffeeeded, 0xffedeeed, 0xffeeeded, 0xffedeeed, 0xffededed, 0xffeeeeed, 
+	0xffedeeed, 0xffeeeeee, 0xffedeeee, 0xffedeeed, 0xffedeeed, 0xffeeeded, 0xffe6e8e6, 0xffd6dbd6, 
+	0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, 
+	0xffd6dbd6, 0xffecedec, 0xffedeced, 0xffededec, 0xffececec, 0xffedeced, 0xffeceded, 0xffedeced, 
+	0xffeceded, 0xffededed, 0xffedecec, 0xffecedec, 0xffececec, 0xffeceded, 0xffececec, 0xffededed, 
+	0xffeceded, 0xffeceded, 0xffededec, 0xffedeced, 0xffedeced, 0xffededec, 0xffedeced, 0xffedeced, 
+	0xffecedec, 0xffecedec, 0xffececec, 0xffecedec, 0xffededec, 0xffecedec, 0xffececec, 0xffecedec, 
+	0xffececed, 0xffececec, 0xffededec, 0xffececed, 0xffecedec, 0xffededec, 0xffececed, 0xffedecec, 
+	0xffececec, 0xffecedec, 0xffededec, 0xffecedec, 0xffeceded, 0xffedecec, 0xffedeced, 0xffececed, 
+	0xffecedec, 0xffedecec, 0xffeceded, 0xffececec, 0xffededed, 0xffececed, 0xffedecec, 0xffededec, 
+	0xffeceded, 0xffededed, 0xffededec, 0xffedecec, 0xffececec, 0xffececed, 0xffececed, 0xffeceded, 
+	0xffededec, 0xffececed, 0xffececec, 0xffecedec, 0xffededec, 0xffecedec, 0xffececed, 0xffededed, 
+	0xffececec, 0xffececed, 0xffedeced, 0xffececed, 0xffecedec, 0xffedeced, 0xffececed, 0xffecedec, 
+	0xffececec, 0xffececec, 0xffedecec, 0xffededed, 0xffededec, 0xffececed, 0xffececec, 0xffececed, 
+	0xffececec, 0xffedeced, 0xffececed, 0xffececed, 0xffececec, 0xffededed, 0xffededed, 0xffedecec, 
+	0xffedeced, 0xffedecec, 0xffececec, 0xffedecec, 0xffeceded, 0xffedecec, 0xffececed, 0xffeceded, 
+	0xffececec, 0xffececed, 0xffededec, 0xffeceded, 0xffececed, 0xffececed, 0xffeceded, 0xffededec, 
+	0xffececed, 0xffeceded, 0xffedecec, 0xffececed, 0xffededec, 0xffecedec, 0xffececec, 0xffedecec, 
+	0xffedeced, 0xffececec, 0xffedecec, 0xffececed, 0xffededec, 0xffeceded, 0xffededec, 0xffececec, 
+	0xffedecec, 0xffededec, 0xffededec, 0xffececec, 0xffececed, 0xffecedec, 0xffececec, 0xffecedec, 
+	0xffececec, 0xffededec, 0xffedeced, 0xffedecec, 0xffececec, 0xffededed, 0xffecedec, 0xffededec, 
+	0xffedeced, 0xffedeced, 0xffecedec, 0xffecedec, 0xffececec, 0xffececed, 0xffedecec, 0xffececec, 
+	0xffececec, 0xffedeced, 0xffeceded, 0xffececec, 0xffececec, 0xffececec, 0xffececec, 0xffececec, 
+	0xffedeced, 0xffececed, 0xffededed, 0xffedeced, 0xffededed, 0xffedecec, 0xffececed, 0xffededed, 
+	0xffedeced, 0xffececed, 0xffedecec, 0xffececed, 0xffededec, 0xffededed, 0xffededec, 0xffecedec, 
+	0xffececec, 0xffececed, 0xffececec, 0xffedeced, 0xffededec, 0xffedeced, 0xffedecec, 0xffedeced, 
+	0xffececed, 0xffededed, 0xffececec, 0xffedeced, 0xffececed, 0xffedeced, 0xffececec, 0xffececed, 
+	0xffececed, 0xffececec, 0xffededed, 0xffedecec, 0xffecedec, 0xffecedec, 0xffededec, 0xffededed, 
+	0xffececec, 0xffececec, 0xffedeced, 0xffededec, 0xffececed, 0xffeceded, 0xffeceded, 0xffecedec, 
+	0xffeceded, 0xffececec, 0xffececec, 0xffedecec, 0xffecedec, 0xffeceded, 0xffececec, 0xffedeced, 
+	0xffedeced, 0xffecedec, 0xffededed, 0xffededec, 0xffededed, 0xffededed, 0xffe6e8e6, 0xffd6dbd6, 
+	0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, 
+	0xffd6dbd6, 0xffebebeb, 0xffebebec, 0xffecebeb, 0xffebecec, 0xffebecec, 0xffececeb, 0xffebebec, 
+	0xffebecec, 0xffebebeb, 0xffebecec, 0xffecebec, 0xffecebeb, 0xffebebeb, 0xffecebec, 0xffecebeb, 
+	0xffebeceb, 0xffebebec, 0xffecebeb, 0xffececeb, 0xffecebeb, 0xffebeceb, 0xffebebec, 0xffebecec, 
+	0xffebecec, 0xffecebec, 0xffecebec, 0xffecebec, 0xffecebec, 0xffecebeb, 0xffecebec, 0xffecebec, 
+	0xffecebeb, 0xffebebeb, 0xffebeceb, 0xffececec, 0xffecebeb, 0xffecebec, 0xffebecec, 0xffebeceb, 
+	0xffebebec, 0xffececec, 0xffecebeb, 0xffecebec, 0xffececeb, 0xffececeb, 0xffebeceb, 0xffebebec, 
+	0xffececeb, 0xffebebec, 0xffecebec, 0xffececec, 0xffececeb, 0xffebeceb, 0xffebecec, 0xffecebeb, 
+	0xffebecec, 0xffebecec, 0xffececec, 0xffecebeb, 0xffecebec, 0xffececec, 0xffebecec, 0xffebecec, 
+	0xffececec, 0xffebebeb, 0xffececeb, 0xffececeb, 0xffecebec, 0xffecebeb, 0xffececeb, 0xffebebec, 
+	0xffecebec, 0xffececeb, 0xffececec, 0xffebebec, 0xffebebeb, 0xffececec, 0xffebecec, 0xffebebec, 
+	0xffececec, 0xffebebec, 0xffebecec, 0xffecebec, 0xffebebeb, 0xffecebec, 0xffebebec, 0xffececeb, 
+	0xffecebeb, 0xffececec, 0xffececeb, 0xffebebeb, 0xffecebeb, 0xffebebec, 0xffebebec, 0xffececeb, 
+	0xffececeb, 0xffebeceb, 0xffececeb, 0xffececeb, 0xffebebeb, 0xffebebec, 0xffececeb, 0xffebebec, 
+	0xffececeb, 0xffecebeb, 0xffebebec, 0xffecebec, 0xffecebec, 0xffececec, 0xffebeceb, 0xffececec, 
+	0xffebebec, 0xffebecec, 0xffebebeb, 0xffecebeb, 0xffebebeb, 0xffececec, 0xffebecec, 0xffececeb, 
+	0xffececeb, 0xffebecec, 0xffecebec, 0xffececeb, 0xffebeceb, 0xffececeb, 0xffebecec, 0xffecebec, 
+	0xffebebec, 0xffebecec, 0xffebeceb, 0xffebebeb, 0xffebecec, 0xffecebec, 0xffecebeb, 0xffebeceb, 
+	0xffebeceb, 0xffecebec, 0xffececec, 0xffecebeb, 0xffececeb, 0xffececeb, 0xffecebec, 0xffecebec, 
+	0xffebebec, 0xffebecec, 0xffececec, 0xffebebeb, 0xffecebeb, 0xffececeb, 0xffebebec, 0xffebebec, 
+	0xffecebeb, 0xffebebec, 0xffebebeb, 0xffebebeb, 0xffebecec, 0xffebecec, 0xffebeceb, 0xffececec, 
+	0xffebeceb, 0xffecebeb, 0xffecebeb, 0xffececec, 0xffebecec, 0xffebecec, 0xffebeceb, 0xffebecec, 
+	0xffebecec, 0xffebecec, 0xffebebec, 0xffebeceb, 0xffebebeb, 0xffecebeb, 0xffebebec, 0xffebecec, 
+	0xffececeb, 0xffebebec, 0xffecebec, 0xffebebeb, 0xffececec, 0xffecebeb, 0xffebebec, 0xffebecec, 
+	0xffebebec, 0xffebebeb, 0xffecebec, 0xffecebeb, 0xffebebeb, 0xffecebec, 0xffebecec, 0xffebebeb, 
+	0xffebeceb, 0xffececec, 0xffececec, 0xffecebec, 0xffebebec, 0xffececec, 0xffecebeb, 0xffebeceb, 
+	0xffebebec, 0xffececeb, 0xffebebec, 0xffebecec, 0xffecebec, 0xffebeceb, 0xffebecec, 0xffecebeb, 
+	0xffecebec, 0xffebeceb, 0xffecebec, 0xffebecec, 0xffebeceb, 0xffebeceb, 0xffecebeb, 0xffececeb, 
+	0xffebebec, 0xffececec, 0xffececeb, 0xffecebec, 0xffebebeb, 0xffebebec, 0xffe6e8e6, 0xffd6dbd6, 
+	0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, 
+	0xffd6dbd6, 0xffebebeb, 0xffeaebeb, 0xffeaeaea, 0xffebebeb, 0xffebeaeb, 0xffeaeaea, 0xffebeaeb, 
+	0xffeaebea, 0xffebebea, 0xffebeaea, 0xffeaebea, 0xffebebea, 0xffebeaeb, 0xffeaebea, 0xffebeaea, 
+	0xffeaebea, 0xffeaeaeb, 0xffebeaeb, 0xffeaeaea, 0xffebebea, 0xffeaebeb, 0xffebebeb, 0xffeaebeb, 
+	0xffebebeb, 0xffebebeb, 0xffeaebeb, 0xffebeaea, 0xffebebeb, 0xffebebeb, 0xffebebeb, 0xffeaebea, 
+	0xffeaeaeb, 0xffebebeb, 0xffebebea, 0xffebebeb, 0xffebeaeb, 0xffebebeb, 0xffebebea, 0xffebebeb, 
+	0xffebebeb, 0xffebebeb, 0xffebeaea, 0xffeaebeb, 0xffeaebea, 0xffeaeaeb, 0xffeaeaeb, 0xffebebeb, 
+	0xffebeaeb, 0xffebebea, 0xffeaeaeb, 0xffebebeb, 0xffebeaeb, 0xffeaebeb, 0xffebebeb, 0xffebebea, 
+	0xffeaeaea, 0xffeaeaeb, 0xffebeaeb, 0xffebebeb, 0xffebebea, 0xffebebea, 0xffebeaea, 0xffebebeb, 
+	0xffeaebeb, 0xffebebea, 0xffebebea, 0xffebeaeb, 0xffeaebea, 0xffebebea, 0xffeaeaea, 0xffeaebea, 
+	0xffeaebea, 0xffebebea, 0xffebeaeb, 0xffebebeb, 0xffeaebea, 0xffebebea, 0xffeaeaeb, 0xffeaebeb, 
+	0xffebebeb, 0xffebeaeb, 0xffebeaeb, 0xffeaebeb, 0xffebebea, 0xffeaebea, 0xffebebea, 0xffeaeaeb, 
+	0xffebebeb, 0xffebebeb, 0xffeaeaea, 0xffeaebeb, 0xffebeaeb, 0xffeaebeb, 0xffeaebeb, 0xffebebeb, 
+	0xffebebea, 0xffebebeb, 0xffeaebeb, 0xffeaebea, 0xffebebea, 0xffebebeb, 0xffebebeb, 0xffeaebeb, 
+	0xffebebeb, 0xffebeaeb, 0xffebeaeb, 0xffebebeb, 0xffebeaeb, 0xffeaebea, 0xffeaeaea, 0xffebebea, 
+	0xffeaeaea, 0xffebebeb, 0xffeaeaeb, 0xffebeaeb, 0xffebeaeb, 0xffebeaeb, 0xffeaebea, 0xffebeaea, 
+	0xffeaeaea, 0xffebebeb, 0xffebeaea, 0xffeaeaeb, 0xffeaebeb, 0xffeaebea, 0xffeaeaea, 0xffebebea, 
+	0xffeaebea, 0xffeaebea, 0xffebebeb, 0xffebeaeb, 0xffeaebeb, 0xffebebeb, 0xffebeaeb, 0xffebeaeb, 
+	0xffeaebeb, 0xffebebea, 0xffebebea, 0xffebebea, 0xffebebea, 0xffebebeb, 0xffeaebeb, 0xffeaebea, 
+	0xffebebeb, 0xffebebeb, 0xffebeaeb, 0xffeaebea, 0xffebeaeb, 0xffebebea, 0xffebebea, 0xffebebeb, 
+	0xffebebea, 0xffeaebeb, 0xffebeaeb, 0xffeaebeb, 0xffebeaea, 0xffeaebeb, 0xffeaebea, 0xffeaeaeb, 
+	0xffebebeb, 0xffebeaea, 0xffebebea, 0xffebeaeb, 0xffebebeb, 0xffebeaea, 0xffeaeaeb, 0xffebeaeb, 
+	0xffebebea, 0xffebebeb, 0xffebeaeb, 0xffebeaeb, 0xffebeaea, 0xffebeaea, 0xffebeaeb, 0xffebeaeb, 
+	0xffebeaeb, 0xffeaeaeb, 0xffebeaea, 0xffebeaeb, 0xffeaebeb, 0xffeaebeb, 0xffebebeb, 0xffebebea, 
+	0xffeaebea, 0xffebeaea, 0xffeaebea, 0xffebebeb, 0xffebebeb, 0xffeaebeb, 0xffebebeb, 0xffeaeaeb, 
+	0xffeaebeb, 0xffebebeb, 0xffebebeb, 0xffeaebea, 0xffeaebeb, 0xffeaebeb, 0xffebebeb, 0xffeaebeb, 
+	0xffebebea, 0xffebebeb, 0xffeaeaeb, 0xffebebeb, 0xffebebeb, 0xffebebea, 0xffeaebeb, 0xffeaebea, 
+	0xffeaeaeb, 0xffebebea, 0xffebeaea, 0xffebebea, 0xffebeaea, 0xffebebea, 0xffebebea, 0xffebebeb, 
+	0xffebebea, 0xffebebeb, 0xffebebea, 0xffebebeb, 0xffeaebeb, 0xffebebeb, 0xffe6e8e6, 0xffd6dbd6, 
+	0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, 
+	0xffd6dbd6, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffe9eae9, 0xffeaeaea, 0xffe9eaea, 
+	0xffeae9ea, 0xffeaeae9, 0xffeaeae9, 0xffeae9e9, 0xffeaeaea, 0xffeaeaea, 0xffeae9ea, 0xffeaeaea, 
+	0xffe9eae9, 0xffeaeaea, 0xffe9e9ea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, 
+	0xffeaeae9, 0xffe9e9e9, 0xffe9eaea, 0xffeae9ea, 0xffeaeaea, 0xffeae9e9, 0xffeae9ea, 0xffe9e9e9, 
+	0xffeaeaea, 0xffeaeaea, 0xffe9e9ea, 0xffe9eaea, 0xffeaeae9, 0xffeaeaea, 0xffeae9ea, 0xffe9eaea, 
+	0xffe9eaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffe9eae9, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 
+	0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeae9ea, 0xffeaeaea, 0xffeae9ea, 0xffeae9ea, 0xffe9eaea, 
+	0xffeaeaea, 0xffeaeaea, 0xffeae9e9, 0xffeaeaea, 0xffeaeaea, 0xffeae9ea, 0xffeae9e9, 0xffe9eaea, 
+	0xffeaeaea, 0xffeaeaea, 0xffeaeae9, 0xffeae9e9, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffe9e9ea, 
+	0xffeaeaea, 0xffeaeae9, 0xffeaeaea, 0xffeae9ea, 0xffe9eaea, 0xffeaeae9, 0xffeaeae9, 0xffeaeaea, 
+	0xffeaeaea, 0xffe9eaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, 0xffeaeaea, 0xffe9eaea, 0xffeae9ea, 
+	0xffeaeaea, 0xffeaeaea, 0xffeaeae9, 0xffe9eae9, 0xffeaeaea, 0xffe9eaea, 0xffeaeaea, 0xffeaeaea, 
+	0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, 0xffeaeae9, 0xffe9eaea, 0xffe9eaea, 0xffeaeaea, 
+	0xffeaeaea, 0xffeae9e9, 0xffeaeaea, 0xffeaeae9, 0xffeaeae9, 0xffeaeaea, 0xffeaeae9, 0xffeaeaea, 
+	0xffeaeaea, 0xffeaeae9, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 
+	0xffeaeaea, 0xffeaeaea, 0xffeaeae9, 0xffeaeaea, 0xffeaeae9, 0xffeaeaea, 0xffeaeaea, 0xffe9eaea, 
+	0xffeaeaea, 0xffe9eae9, 0xffeaeae9, 0xffeae9ea, 0xffeaeaea, 0xffe9eaea, 0xffe9eaea, 0xffeae9ea, 
+	0xffeaeae9, 0xffeaeaea, 0xffeae9e9, 0xffeaeaea, 0xffe9eaea, 0xffeae9ea, 0xffeaeaea, 0xffeaeaea, 
+	0xffe9eaea, 0xffeae9ea, 0xffeaeae9, 0xffeae9e9, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, 
+	0xffeaeaea, 0xffeaeaea, 0xffe9eaea, 0xffe9e9ea, 0xffe9eae9, 0xffeaeaea, 0xffeaeae9, 0xffeaeaea, 
+	0xffeaeae9, 0xffeae9ea, 0xffeaeae9, 0xffeaeae9, 0xffe9eaea, 0xffeaeaea, 0xffeaeae9, 0xffe9eaea, 
+	0xffeaeaea, 0xffeaeae9, 0xffeae9ea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffe9eaea, 0xffeae9ea, 
+	0xffeaeae9, 0xffeae9ea, 0xffe9eaea, 0xffeaeae9, 0xffeaeae9, 0xffeae9ea, 0xffeaeaea, 0xffe9eaea, 
+	0xffeaeaea, 0xffeaeaea, 0xffeae9ea, 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, 0xffe9eaea, 0xffe9e9ea, 
+	0xffeaeaea, 0xffe9e9ea, 0xffe9eaea, 0xffeae9ea, 0xffe9e9e9, 0xffeaeaea, 0xffeaeaea, 0xffeaeae9, 
+	0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeae9ea, 0xffeaeaea, 0xffeaeaea, 0xffe9e9ea, 0xffeaeaea, 
+	0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffeaeaea, 0xffe9eaea, 
+	0xffeaeaea, 0xffe9eae9, 0xffeaeaea, 0xffeae9ea, 0xffeaeae9, 0xffeaeaea, 0xffe6e8e6, 0xffd6dbd6, 
+	0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, 
+	0xffd6dbd6, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffeae9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 
+	0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe9e9e9, 0xffe6e8e6, 0xffd6dbd6, 
+	0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, 
+	0xffd6dbd6, 0xffe8e8e8, 0xffe8e8e9, 0xffe9e9e9, 0xffe8e8e8, 0xffe9e8e9, 0xffe8e8e9, 0xffe8e8e9, 
+	0xffe8e8e9, 0xffe8e8e8, 0xffe8e8e9, 0xffe8e8e9, 0xffe8e9e9, 0xffe9e8e8, 0xffe9e8e8, 0xffe8e9e8, 
+	0xffe8e9e9, 0xffe8e8e8, 0xffe8e8e9, 0xffe9e8e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e9e9, 
+	0xffe9e8e8, 0xffe8e8e9, 0xffe9e8e9, 0xffe9e9e8, 0xffe9e8e8, 0xffe8e9e8, 0xffe8e9e8, 0xffe8e8e8, 
+	0xffe8e9e8, 0xffe8e8e9, 0xffe8e8e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e8e9, 0xffe8e9e8, 0xffe8e8e8, 
+	0xffe8e9e8, 0xffe8e8e8, 0xffe8e9e8, 0xffe8e9e8, 0xffe8e9e9, 0xffe8e8e8, 0xffe9e8e9, 0xffe8e8e8, 
+	0xffe8e9e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe9e9e8, 0xffe8e8e8, 0xffe8e9e9, 0xffe8e8e9, 0xffe8e8e8, 
+	0xffe8e9e8, 0xffe9e9e8, 0xffe8e8e8, 0xffe9e9e9, 0xffe8e8e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e8e9, 
+	0xffe8e9e8, 0xffe8e8e9, 0xffe8e9e9, 0xffe9e8e8, 0xffe8e8e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe9e8e9, 
+	0xffe8e8e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e9e8, 0xffe9e8e9, 0xffe8e8e8, 0xffe8e8e9, 
+	0xffe8e8e8, 0xffe9e9e8, 0xffe9e8e9, 0xffe8e8e9, 0xffe8e9e8, 0xffe9e8e9, 0xffe8e9e8, 0xffe8e9e9, 
+	0xffe8e8e8, 0xffe9e9e8, 0xffe8e9e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e8e9, 0xffe8e9e9, 0xffe8e8e8, 
+	0xffe8e8e8, 0xffe8e8e9, 0xffe8e9e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe9e8e8, 0xffe8e8e9, 
+	0xffe8e9e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 
+	0xffe8e8e9, 0xffe8e8e9, 0xffe8e8e8, 0xffe8e8e8, 0xffe9e9e8, 0xffe8e9e9, 0xffe8e8e8, 0xffe8e8e8, 
+	0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe9e9e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e9e8, 
+	0xffe8e8e9, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e9e9, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e9e8, 
+	0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe9e8e8, 0xffe8e8e9, 0xffe9e9e8, 
+	0xffe8e8e8, 0xffe9e9e8, 0xffe8e9e9, 0xffe8e9e8, 0xffe9e8e9, 0xffe8e9e8, 0xffe8e8e8, 0xffe8e8e8, 
+	0xffe8e8e8, 0xffe9e8e8, 0xffe9e8e8, 0xffe9e8e9, 0xffe8e8e9, 0xffe8e9e8, 0xffe9e8e8, 0xffe8e9e9, 
+	0xffe9e8e9, 0xffe9e8e8, 0xffe8e8e9, 0xffe9e8e8, 0xffe8e9e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe9e9e8, 
+	0xffe8e8e8, 0xffe8e8e9, 0xffe8e9e9, 0xffe8e9e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 
+	0xffe8e8e8, 0xffe8e9e8, 0xffe8e9e9, 0xffe8e8e8, 0xffe8e8e9, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e9, 
+	0xffe8e9e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe8e8e8, 
+	0xffe9e8e9, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e9e9, 0xffe9e8e8, 0xffe8e8e8, 0xffe9e8e8, 
+	0xffe9e8e8, 0xffe8e9e8, 0xffe9e8e8, 0xffe8e8e8, 0xffe8e9e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe8e8e8, 
+	0xffe8e8e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe9e8e9, 0xffe9e9e9, 0xffe8e8e8, 0xffe8e9e9, 0xffe9e8e8, 
+	0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e9e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe6e8e6, 0xffd6dbd6, 
+	0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, 
+	0xffd6dbd6, 0xffe7e8e8, 0xffe8e7e8, 0xffe8e7e8, 0xffe7e8e7, 0xffe8e7e8, 0xffe7e7e8, 0xffe7e8e8, 
+	0xffe7e7e8, 0xffe8e7e8, 0xffe8e8e8, 0xffe7e8e7, 0xffe8e8e8, 0xffe7e8e8, 0xffe8e7e7, 0xffe8e8e7, 
+	0xffe7e7e7, 0xffe8e8e8, 0xffe7e7e7, 0xffe7e8e7, 0xffe8e8e7, 0xffe8e8e8, 0xffe7e7e8, 0xffe8e8e7, 
+	0xffe8e8e8, 0xffe8e8e7, 0xffe7e7e7, 0xffe7e8e7, 0xffe8e8e7, 0xffe8e8e7, 0xffe8e7e8, 0xffe8e7e8, 
+	0xffe7e8e7, 0xffe7e7e8, 0xffe8e8e8, 0xffe7e7e7, 0xffe7e8e8, 0xffe7e7e7, 0xffe7e8e7, 0xffe7e8e8, 
+	0xffe8e7e8, 0xffe7e7e7, 0xffe8e8e7, 0xffe7e8e7, 0xffe7e8e8, 0xffe8e8e8, 0xffe8e8e7, 0xffe8e8e8, 
+	0xffe7e7e7, 0xffe7e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e7e8, 0xffe8e7e8, 0xffe8e8e8, 0xffe7e8e8, 
+	0xffe7e8e7, 0xffe7e7e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e7e7, 0xffe8e8e7, 0xffe8e8e8, 
+	0xffe8e8e7, 0xffe7e7e8, 0xffe7e7e8, 0xffe8e8e7, 0xffe8e7e8, 0xffe8e7e7, 0xffe8e8e7, 0xffe7e8e8, 
+	0xffe8e7e8, 0xffe8e7e8, 0xffe8e7e8, 0xffe7e7e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e8e7, 0xffe7e7e7, 
+	0xffe7e8e7, 0xffe7e7e8, 0xffe8e7e8, 0xffe8e8e7, 0xffe7e7e8, 0xffe8e8e8, 0xffe8e7e7, 0xffe8e7e8, 
+	0xffe7e7e7, 0xffe7e8e8, 0xffe8e7e8, 0xffe8e8e7, 0xffe8e7e8, 0xffe8e7e7, 0xffe8e7e8, 0xffe8e8e7, 
+	0xffe7e8e8, 0xffe8e7e7, 0xffe8e7e7, 0xffe8e7e7, 0xffe8e7e7, 0xffe7e8e8, 0xffe7e7e8, 0xffe8e7e8, 
+	0xffe7e8e8, 0xffe7e8e8, 0xffe7e8e7, 0xffe8e7e8, 0xffe8e8e7, 0xffe8e8e7, 0xffe7e8e8, 0xffe8e7e8, 
+	0xffe8e8e8, 0xffe8e8e7, 0xffe7e7e7, 0xffe8e8e8, 0xffe7e7e8, 0xffe8e8e8, 0xffe7e7e8, 0xffe7e7e7, 
+	0xffe7e7e8, 0xffe7e7e8, 0xffe8e7e8, 0xffe8e7e7, 0xffe8e7e7, 0xffe8e7e8, 0xffe8e8e7, 0xffe7e7e8, 
+	0xffe8e8e8, 0xffe7e8e7, 0xffe7e8e7, 0xffe8e8e8, 0xffe8e7e8, 0xffe7e7e7, 0xffe8e8e8, 0xffe8e7e8, 
+	0xffe8e8e7, 0xffe7e7e8, 0xffe8e7e8, 0xffe7e7e8, 0xffe7e8e7, 0xffe7e8e7, 0xffe7e7e8, 0xffe8e7e7, 
+	0xffe8e7e7, 0xffe8e7e7, 0xffe7e8e7, 0xffe8e8e8, 0xffe7e8e8, 0xffe8e8e8, 0xffe8e8e8, 0xffe8e7e7, 
+	0xffe7e8e7, 0xffe8e7e7, 0xffe7e8e8, 0xffe7e7e7, 0xffe8e7e8, 0xffe7e8e8, 0xffe8e7e8, 0xffe8e8e8, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e8e7, 0xffe8e8e7, 0xffe8e7e8, 0xffe7e8e8, 0xffe7e7e7, 0xffe7e7e8, 
+	0xffe7e7e8, 0xffe7e8e8, 0xffe7e8e8, 0xffe7e8e8, 0xffe7e7e7, 0xffe7e8e8, 0xffe8e7e8, 0xffe8e8e8, 
+	0xffe7e8e8, 0xffe8e7e8, 0xffe7e7e7, 0xffe8e7e8, 0xffe7e8e7, 0xffe8e7e7, 0xffe7e8e8, 0xffe7e8e8, 
+	0xffe7e8e8, 0xffe7e8e7, 0xffe7e8e8, 0xffe7e8e8, 0xffe8e8e8, 0xffe8e7e7, 0xffe8e7e7, 0xffe8e7e8, 
+	0xffe8e8e7, 0xffe8e8e7, 0xffe8e7e8, 0xffe7e7e8, 0xffe8e7e8, 0xffe8e7e7, 0xffe8e8e8, 0xffe8e7e8, 
+	0xffe7e7e8, 0xffe8e8e7, 0xffe7e8e7, 0xffe7e8e7, 0xffe8e8e8, 0xffe8e7e8, 0xffe7e8e7, 0xffe8e7e7, 
+	0xffe7e7e8, 0xffe7e8e8, 0xffe8e7e8, 0xffe8e7e7, 0xffe7e7e8, 0xffe8e8e7, 0xffe7e7e8, 0xffe8e7e7, 
+	0xffe7e7e8, 0xffe7e7e8, 0xffe8e8e7, 0xffe7e8e8, 0xffe8e7e7, 0xffe8e8e8, 0xffe6e8e6, 0xffd6dbd6, 
+	0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, 
+	0xffd6dbd6, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e6, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e6e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e6e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e6e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e6, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e6, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e6, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe6e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe6e8e6, 0xffd6dbd6, 
+	0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797b79, 0xffb5b6b5, 0xffb5b6b5, 
+	0xffd6dbd6, 0xffe6e6e6, 0xffe6e7e7, 0xffe6e7e6, 0xffe7e6e7, 0xffe7e6e6, 0xffe7e6e6, 0xffe6e6e7, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe7e6e6, 0xffe7e6e6, 0xffe6e7e7, 0xffe7e6e6, 0xffe6e7e6, 0xffe6e6e7, 
+	0xffe7e6e6, 0xffe6e7e7, 0xffe7e6e6, 0xffe7e7e7, 0xffe6e7e7, 0xffe6e7e7, 0xffe6e6e7, 0xffe6e7e6, 
+	0xffe6e7e6, 0xffe7e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e6e6, 0xffe6e7e7, 0xffe6e7e7, 0xffe6e7e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe7e7e7, 0xffe7e7e7, 0xffe6e7e6, 0xffe6e6e6, 0xffe7e7e7, 
+	0xffe6e6e7, 0xffe7e7e7, 0xffe7e6e7, 0xffe6e6e7, 0xffe6e7e6, 0xffe6e6e6, 0xffe7e7e7, 0xffe7e6e6, 
+	0xffe7e6e7, 0xffe7e6e7, 0xffe6e7e6, 0xffe6e6e7, 0xffe7e7e6, 0xffe7e7e6, 0xffe6e6e7, 0xffe6e7e6, 
+	0xffe6e6e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe7e6e6, 0xffe6e6e7, 0xffe6e7e7, 0xffe6e7e7, 0xffe6e7e6, 
+	0xffe6e6e7, 0xffe6e6e7, 0xffe6e6e7, 0xffe6e6e7, 0xffe6e6e7, 0xffe7e6e6, 0xffe6e7e6, 0xffe6e7e6, 
+	0xffe7e7e7, 0xffe7e7e7, 0xffe7e7e7, 0xffe6e7e7, 0xffe6e6e7, 0xffe6e6e6, 0xffe6e7e7, 0xffe7e7e7, 
+	0xffe6e7e7, 0xffe7e6e6, 0xffe6e6e7, 0xffe6e7e7, 0xffe7e6e7, 0xffe7e7e7, 0xffe6e6e7, 0xffe6e6e6, 
+	0xffe7e7e6, 0xffe6e6e6, 0xffe6e7e7, 0xffe6e6e6, 0xffe6e7e6, 0xffe7e7e6, 0xffe7e7e6, 0xffe6e7e7, 
+	0xffe6e6e6, 0xffe6e7e6, 0xffe6e7e7, 0xffe7e7e6, 0xffe6e7e6, 0xffe6e6e7, 0xffe7e7e6, 0xffe6e6e6, 
+	0xffe7e7e6, 0xffe6e6e7, 0xffe6e7e7, 0xffe6e7e6, 0xffe7e6e7, 0xffe6e7e7, 0xffe6e6e7, 0xffe7e6e7, 
+	0xffe6e7e7, 0xffe6e7e6, 0xffe7e7e7, 0xffe7e7e7, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e6e7, 0xffe6e6e7, 
+	0xffe6e6e6, 0xffe7e6e7, 0xffe6e6e6, 0xffe7e6e7, 0xffe6e6e7, 0xffe7e7e7, 0xffe6e6e7, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe7e6e6, 0xffe7e7e6, 0xffe7e7e7, 0xffe6e6e6, 0xffe7e7e7, 0xffe6e7e7, 
+	0xffe6e7e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe7e7e6, 0xffe6e6e7, 0xffe7e6e6, 0xffe7e6e7, 0xffe6e6e7, 
+	0xffe6e7e7, 0xffe7e6e6, 0xffe6e7e6, 0xffe6e6e7, 0xffe7e7e7, 0xffe7e6e6, 0xffe6e7e6, 0xffe7e6e6, 
+	0xffe6e7e7, 0xffe6e7e7, 0xffe6e6e6, 0xffe7e7e6, 0xffe7e6e6, 0xffe7e6e6, 0xffe6e7e6, 0xffe7e6e6, 
+	0xffe7e7e6, 0xffe6e6e7, 0xffe6e6e6, 0xffe6e6e7, 0xffe6e7e7, 0xffe6e7e7, 0xffe6e6e7, 0xffe6e7e6, 
+	0xffe6e7e6, 0xffe6e7e7, 0xffe7e7e7, 0xffe6e6e7, 0xffe6e7e7, 0xffe6e6e7, 0xffe6e6e7, 0xffe6e7e7, 
+	0xffe7e6e6, 0xffe7e6e7, 0xffe6e6e6, 0xffe7e7e6, 0xffe7e6e6, 0xffe6e7e7, 0xffe6e7e7, 0xffe7e7e7, 
+	0xffe6e6e6, 0xffe7e7e7, 0xffe7e7e7, 0xffe6e7e6, 0xffe7e7e7, 0xffe6e6e7, 0xffe7e7e7, 0xffe6e6e7, 
+	0xffe6e7e6, 0xffe7e7e6, 0xffe7e6e7, 0xffe7e6e7, 0xffe7e6e6, 0xffe6e6e6, 0xffe7e7e6, 0xffe6e7e6, 
+	0xffe7e6e6, 0xffe7e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e6e7, 0xffe7e6e7, 0xffe6e7e7, 
+	0xffe7e7e6, 0xffe7e6e7, 0xffe7e7e7, 0xffe6e6e6, 0xffe6e6e7, 0xffe7e6e6, 0xffe6e6e7, 0xffe7e7e6, 
+	0xffe7e7e7, 0xffe6e7e6, 0xffe6e6e7, 0xffe7e6e6, 0xffe6e7e6, 0xffe6e7e7, 0xffe6e8e6, 0xffd6dbd6, 
+	0xffc5c2c5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797879, 0xffb5b2b5, 0xffb5b2b5, 
+	0xffd9dbd9, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 
+	0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6e6e6, 0xffe6ebe6, 0xffd9dbd9, 
+	0xffbdbebd, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797879, 0xffb5b2b5, 0xffb5b2b5, 
+	0xffd9dbd9, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 
+	0xffefefef, 0xffefefef, 0xffefefef, 0xffefefef, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffd9dbd9, 
+	0xffbdbebd, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff797879, 0xffb5b2b5, 0xffb5b2b5, 
+	0xffcbcacb, 0xffd9dbd9, 0xffe6ebe6, 0xffe6ebe6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 
+	0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6e8e6, 0xffe6ebe6, 0xffe6ebe6, 0xffd9dbd9, 0xffcbcacb, 
+	0xffbdbebd, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x00000400, 0xff797879, 0xffb5b2b5, 
+	0xffbdbabd, 0xffcbcacb, 0xffd9dbd9, 0xffd9dbd9, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 
+	0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd9dbd9, 0xffd9dbd9, 0xffcbcacb, 0xffbdbabd, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff848284, 
+	0xff9c9f9c, 0xff9c9f9c, 0xff9c9f9c, 0xff9c9f9c, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 
+	0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xffa2a5a2, 0xff9c9e9c, 0xff9c9e9c, 0xff9c9e9c, 0x00080408, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff848284, 0xffc5c2c5, 0xffc5c2c5, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffbdbebd, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff848284, 0xff848284, 0xffc5c2c5, 0xffe6ebe6, 
+	0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 
+	0xffeff3ef, 0xffeff3ef, 0xffeff3ef, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffe6ebe6, 0xffbdbebd, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffc5716b, 
+	0xffd07770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd6796b, 
+	0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 
+	0xffd6756b, 0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd6736b, 0xffd6736b, 0xffd6736b, 0xffce7163, 
+	0xffce7163, 0xffce7063, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, 
+	0xffce6c63, 0xffce6b63, 0xffce6963, 0xffce695a, 0xffce685a, 0xffce675a, 0xffce675a, 0xffc5655a, 
+	0xffc5655a, 0xffc5655a, 0xffc5645a, 0xffc5645d, 0xffc56258, 0xffc56258, 0xffc56258, 0xffc56052, 
+	0xffc56052, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55c52, 0xffc55a52, 0xffbd594a, 
+	0xffbd594a, 0xffbd584a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, 
+	0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd5142, 0xffbd5142, 0xffba5042, 0xffba5042, 0xffba4d42, 
+	0xffb84d42, 0xffb84d42, 0xffb84d42, 0xffb54c3f, 0xffb54a3c, 0xffb54a3c, 0xffb5493a, 0xffb5483a, 
+	0xffb5483a, 0xffb5463a, 0xffb5463a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb5433a, 0xffb54237, 
+	0xffb54237, 0xffb54131, 0xffb54131, 0xffad4131, 0xffad4131, 0xffad3f31, 0xffad3f31, 0xffad3f31, 
+	0xffad3e31, 0xffad3e31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b2f, 
+	0xffad3b2f, 0xffad3b2f, 0xffad3a2c, 0xffad392f, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392f, 
+	0xffad392c, 0xffad392f, 0xffad392f, 0xffad3a2c, 0xffad3a2c, 0xffad3b2f, 0xffad3b2f, 0xffad3d31, 
+	0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 0xffad3e31, 0xffad3f31, 0xffad3f31, 
+	0xffad3f31, 0xffad3f31, 0xffad4131, 0xffb54237, 0xffb54237, 0xffb54237, 0xffb54237, 0xffb5453a, 
+	0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54a3c, 
+	0xffb54a3c, 0xffb54c3f, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb84e42, 0xffba5042, 0xffbd5045, 
+	0xffbd5142, 0xffbd5142, 0xffbd5142, 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 0xffbd554a, 
+	0xffbd564a, 0xffbd564a, 0xffbd564a, 0xffc0594d, 0xffc35950, 0xffc35950, 0xffc35950, 0xffc55a52, 
+	0xffc55d52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc56052, 0xffc56052, 0xffc56152, 0xffc56258, 
+	0xffc56258, 0xffc56455, 0xffc56455, 0xffcb655a, 0xffcb655a, 0xffcb655a, 0xffcb655a, 0xffce675d, 
+	0xffce6860, 0xffce6860, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, 0xffce6d63, 
+	0xffce6f63, 0xffce6f63, 0xffce7063, 0xffd07165, 0xffd07165, 0xffd37168, 0xffd37168, 0xffd6736b, 
+	0xffd6736b, 0xffd6746b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6776b, 
+	0xffd6786b, 0xffd6796b, 0xffd6786b, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd67973, 
+	0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd07770, 0xffc5716b, 0xffb5655a, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffc5716b, 
+	0xffd07770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd6796b, 
+	0xffd6796b, 0xffd6796b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6746b, 0xffd6746b, 0xffd6746b, 0xffd6736b, 0xffd6716b, 0xffd6716b, 0xffd6716b, 0xffce7063, 
+	0xffce7063, 0xffce7063, 0xffce7063, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, 
+	0xffce6c63, 0xffce6b63, 0xffce6b63, 0xffce695a, 0xffce685a, 0xffce685a, 0xffce675a, 0xffc5655a, 
+	0xffc5655a, 0xffc5645a, 0xffc5645a, 0xffc56258, 0xffc56258, 0xffc56152, 0xffc56152, 0xffc56052, 
+	0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55d52, 0xffc55a52, 0xffc55a52, 0xffbd594a, 
+	0xffbd594a, 0xffbd594a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, 
+	0xffbd524a, 0xffbd524a, 0xffbd514a, 0xffba5042, 0xffba5042, 0xffba5042, 0xffb54d42, 0xffb84d42, 
+	0xffb84d42, 0xffb84d42, 0xffb84d42, 0xffb54c3f, 0xffb54a3c, 0xffb5493a, 0xffb5493a, 0xffb5483a, 
+	0xffb5483a, 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb5423a, 0xffb54237, 
+	0xffb54237, 0xffb54131, 0xffb54131, 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3d31, 
+	0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3a2c, 
+	0xffad3b2f, 0xffad3a2c, 0xffad3929, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 
+	0xffad392c, 0xffad392c, 0xffad392c, 0xffad3929, 0xffad3a2c, 0xffad3a2c, 0xffad3b2f, 0xffad3d31, 
+	0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 0xffad3f31, 
+	0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffb5413a, 0xffb5413a, 0xffb54237, 0xffb54237, 0xffb5453a, 
+	0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5493a, 
+	0xffb54a3c, 0xffb54c3f, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb84e42, 0xffbd4e47, 
+	0xffbd5045, 0xffbd5045, 0xffbd5142, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 0xffbd554a, 
+	0xffbd564a, 0xffbd564a, 0xffbd564a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55a52, 
+	0xffc55d52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc5615a, 
+	0xffc56258, 0xffc56258, 0xffc56455, 0xffc8655a, 0xffc8655a, 0xffcb655a, 0xffcb655a, 0xffce675d, 
+	0xffce6860, 0xffce6860, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6c63, 0xffce6d63, 
+	0xffce6f63, 0xffce6f63, 0xffce6f63, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd37168, 0xffd6716b, 
+	0xffd6716b, 0xffd6736b, 0xffd6736b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6776b, 
+	0xffd6776b, 0xffd6786b, 0xffd6786b, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd67973, 
+	0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd07770, 0xffc5716b, 0xffb5655a, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffc5716b, 
+	0xffd07770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd6796b, 
+	0xffd6796b, 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd6736b, 0xffd6716b, 0xffd6716b, 0xffd6716b, 0xffce7063, 
+	0xffce7063, 0xffce7063, 0xffce7063, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, 
+	0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce695a, 0xffce685a, 0xffce685a, 0xffce675a, 0xffc5655a, 
+	0xffc5655a, 0xffc5645a, 0xffc5645a, 0xffc56258, 0xffc56258, 0xffc56258, 0xffc56152, 0xffc55e52, 
+	0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55d52, 0xffc55c52, 0xffc55a52, 0xffbd594a, 
+	0xffbd594a, 0xffbd594a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, 
+	0xffbd524a, 0xffbd514a, 0xffbd514a, 0xffba5042, 0xffba5042, 0xffba5042, 0xffb84e42, 0xffb84d42, 
+	0xffb84d42, 0xffb84d42, 0xffb84d42, 0xffb54a3c, 0xffb54a3c, 0xffb5493a, 0xffb5493a, 0xffb5483a, 
+	0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5433a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb54237, 
+	0xffb54237, 0xffb54131, 0xffb54131, 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3d31, 
+	0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3a2c, 
+	0xffad3a2c, 0xffad3a2c, 0xffad3a2c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 
+	0xffad392c, 0xffad392c, 0xffad392c, 0xffad3a2c, 0xffad3a2c, 0xffad3a2c, 0xffad3a2c, 0xffad3d31, 
+	0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 0xffad3e31, 
+	0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffb54237, 0xffb54237, 0xffb54237, 0xffb54237, 0xffb5453a, 
+	0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5493a, 0xffb54a3c, 
+	0xffb54a3c, 0xffb54c3f, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffbd4e47, 
+	0xffbd5045, 0xffbd5045, 0xffbd5142, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 
+	0xffbd564a, 0xffbd564a, 0xffbd564a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55c52, 
+	0xffc55c52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc56052, 0xffc5615a, 
+	0xffc56258, 0xffc56258, 0xffc56258, 0xffc8655a, 0xffcb655a, 0xffc8655a, 0xffcb655a, 0xffce675d, 
+	0xffce6860, 0xffce6963, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, 0xffce6d63, 
+	0xffce6f63, 0xffce6f63, 0xffce7063, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd6716b, 
+	0xffd6736b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6776b, 0xffd6776b, 0xffd6786b, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd67973, 
+	0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd07770, 0xffc5716b, 0xffb5655a, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffc5716b, 
+	0xffd07770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd6796e, 0xffd6796b, 
+	0xffd6796b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6756b, 0xffd6746b, 0xffd6736b, 0xffd6716b, 0xffd6736b, 0xffd6716b, 0xffd6716b, 0xffce7063, 
+	0xffce7063, 0xffce7063, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, 
+	0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce695a, 0xffce695a, 0xffce675a, 0xffce675a, 0xffc5655a, 
+	0xffc5655a, 0xffc5645a, 0xffc5625a, 0xffc56258, 0xffc56258, 0xffc56152, 0xffc56152, 0xffc55e52, 
+	0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55d52, 0xffc55a52, 0xffc55a52, 0xffbd594a, 
+	0xffbd594a, 0xffbd584a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, 
+	0xffbd524a, 0xffbd524a, 0xffbd514a, 0xffba5042, 0xffba5042, 0xffba5042, 0xffb54d42, 0xffb84d42, 
+	0xffb84d42, 0xffb84d42, 0xffb84d42, 0xffb54c3f, 0xffb5493a, 0xffb5493a, 0xffb5493a, 0xffb5483a, 
+	0xffb5483a, 0xffb5463a, 0xffb5463a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb5433a, 0xffb54237, 
+	0xffb54237, 0xffb54131, 0xffb54131, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3e31, 0xffad3d31, 
+	0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3a2c, 
+	0xffad3a2c, 0xffad3a2c, 0xffad3929, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 
+	0xffad392c, 0xffad392c, 0xffad392c, 0xffad3929, 0xffad3a2c, 0xffad3a2c, 0xffad3b2f, 0xffad3d31, 
+	0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 0xffad3e31, 
+	0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffb54237, 0xffb54237, 0xffb54237, 0xffb54237, 0xffb5453a, 
+	0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5493a, 
+	0xffb54a3c, 0xffb54c3f, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb84e42, 0xffbd4e47, 
+	0xffbd5045, 0xffbd5045, 0xffbd5142, 0xffbd514a, 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 
+	0xffbd564a, 0xffbd564a, 0xffbd584a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc55c52, 
+	0xffc55d52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc56152, 0xffc5615a, 
+	0xffc5615a, 0xffc56258, 0xffc56258, 0xffc8655a, 0xffc8655a, 0xffcb655a, 0xffcb655a, 0xffce675d, 
+	0xffce6860, 0xffce6860, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, 0xffce6f63, 
+	0xffce6f63, 0xffce6f63, 0xffce7063, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd37168, 0xffd6716b, 
+	0xffd6736b, 0xffd6736b, 0xffd6736b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6776b, 0xffd6776b, 0xffd6786b, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd67973, 
+	0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd67973, 0xffd07770, 0xffc5716b, 0xffb5655a, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffce716b, 
+	0xffd37770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd6796b, 
+	0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd67168, 0xffd67168, 0xffd67168, 0xffd67168, 0xffce7063, 
+	0xffce7063, 0xffce7063, 0xffce7063, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, 
+	0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce695a, 0xffce685a, 0xffce675a, 0xffce675a, 0xffc5655a, 
+	0xffc5655a, 0xffc5645a, 0xffc5645a, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56155, 0xffc55e52, 
+	0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55c52, 0xffc55a52, 0xffbd594a, 
+	0xffbd594a, 0xffbd584a, 0xffbd584a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, 
+	0xffbd524a, 0xffbd514a, 0xffbd514a, 0xffba5042, 0xffba5042, 0xffb84e42, 0xffb84e42, 0xffb54d42, 
+	0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb54a3f, 0xffb5493a, 0xffb5493a, 0xffb5483a, 
+	0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb5423a, 0xffb24137, 
+	0xffaf4134, 0xffaf4134, 0xffaf4134, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3e31, 0xffad3d31, 
+	0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad3a2c, 0xffad3929, 
+	0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 
+	0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3a2c, 0xffad3a2c, 0xffad3a2c, 0xffad3a2c, 
+	0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 
+	0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffb54131, 0xffb54131, 0xffb54234, 0xffb54337, 0xffb5453a, 
+	0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5493a, 
+	0xffb54a3c, 0xffb54c3f, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffbd4e47, 
+	0xffbd5045, 0xffbd5045, 0xffbd5142, 0xffbd524a, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 
+	0xffbd564a, 0xffbd564a, 0xffbd564a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55c52, 
+	0xffc55d52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56152, 0xffc5615a, 
+	0xffc56258, 0xffc56258, 0xffc56258, 0xffc8655a, 0xffc8655a, 0xffcb655a, 0xffcb655a, 0xffce685d, 
+	0xffce685d, 0xffce695a, 0xffce695a, 0xffce6b63, 0xffce6c63, 0xffce6c63, 0xffce6c63, 0xffce6d63, 
+	0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd6716b, 
+	0xffd6716b, 0xffd6736b, 0xffd6736b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6776b, 0xffd6776b, 0xffd6786b, 0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd6796e, 0xffd67970, 
+	0xffd67970, 0xffd67970, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd37770, 0xffce716b, 0xffb5655a, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffce716b, 
+	0xffd37770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd6796b, 
+	0xffd6796b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd67168, 0xffd67168, 0xffd67168, 0xffd67165, 0xffce7063, 
+	0xffce7063, 0xffce7063, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, 
+	0xffce6c63, 0xffce6b63, 0xffce6963, 0xffce695a, 0xffce695a, 0xffce675a, 0xffce675a, 0xffc5655a, 
+	0xffc5655a, 0xffc5645a, 0xffc5625a, 0xffc56158, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc55e52, 
+	0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55c52, 0xffc55a52, 0xffbd594a, 
+	0xffbd594a, 0xffbd584a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, 
+	0xffbd544a, 0xffbd524a, 0xffbd514a, 0xffba5042, 0xffba5042, 0xffb84e42, 0xffb54d42, 0xffb54d42, 
+	0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb5493a, 0xffb5493a, 0xffb5493a, 0xffb5483a, 
+	0xffb5463a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb5433a, 0xffb24137, 
+	0xffb24137, 0xffaf4134, 0xffaf4134, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3d31, 0xffad3d31, 
+	0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad3a2c, 0xffad3929, 
+	0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 
+	0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3a2c, 0xffad3a2c, 0xffad3b2f, 
+	0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 
+	0xffad3e31, 0xffad3f31, 0xffad3f31, 0xffb54131, 0xffb54234, 0xffb54234, 0xffb54337, 0xffb5453a, 
+	0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5493a, 
+	0xffb54a3c, 0xffb54c3f, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffbd4e47, 
+	0xffbd5045, 0xffbd5045, 0xffbd5045, 0xffbd514a, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 
+	0xffbd554a, 0xffbd564a, 0xffbd564a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55c52, 
+	0xffc55c52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc5615a, 
+	0xffc5615a, 0xffc56258, 0xffc56258, 0xffc8655a, 0xffc8655a, 0xffcb655a, 0xffcb655a, 0xffce685d, 
+	0xffce685d, 0xffce695a, 0xffce685d, 0xffce6b63, 0xffce6c63, 0xffce6c63, 0xffce6d63, 0xffce6d63, 
+	0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd37168, 0xffd6716b, 
+	0xffd6736b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6776b, 0xffd6786b, 0xffd6786b, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd6796e, 
+	0xffd67970, 0xffd67970, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd37770, 0xffce716b, 0xffb5655a, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffce716b, 
+	0xffd37770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796b, 
+	0xffd6796b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6756b, 0xffd6756b, 0xffd6746b, 0xffd67168, 0xffd67168, 0xffd67168, 0xffd67168, 0xffce7163, 
+	0xffce7063, 0xffce7063, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, 
+	0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce695a, 0xffce695a, 0xffce675a, 0xffce675a, 0xffc5655a, 
+	0xffc5655a, 0xffc5645a, 0xffc5645a, 0xffc56158, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc55e52, 
+	0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55a52, 0xffc55a52, 0xffbd594a, 
+	0xffbd594a, 0xffbd584a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, 
+	0xffbd524a, 0xffbd524a, 0xffbd514a, 0xffba5042, 0xffba5042, 0xffba5042, 0xffb84e42, 0xffb54d42, 
+	0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb54a3f, 0xffb5493a, 0xffb5493a, 0xffb5483a, 
+	0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb5433a, 0xffb24137, 
+	0xffaf4134, 0xffaf4134, 0xffaf4134, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3e31, 0xffad3d31, 
+	0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad3a2c, 0xffad3929, 
+	0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 
+	0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3a2c, 0xffad3a2c, 0xffad3b2f, 
+	0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 
+	0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffb54131, 0xffb54234, 0xffb54234, 0xffb54337, 0xffb5453a, 
+	0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5493a, 
+	0xffb54a3c, 0xffb54a3c, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffbd5045, 
+	0xffbd5045, 0xffbd5045, 0xffbd5142, 0xffbd514a, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 
+	0xffbd564a, 0xffbd564a, 0xffbd564a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55a52, 
+	0xffc55d52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56152, 0xffc5615a, 
+	0xffc56258, 0xffc56258, 0xffc56455, 0xffc8655a, 0xffc8655a, 0xffcb655a, 0xffcb655a, 0xffce685d, 
+	0xffce685d, 0xffce695a, 0xffce695a, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, 0xffce6d63, 
+	0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd37168, 0xffd6716b, 
+	0xffd6716b, 0xffd6736b, 0xffd6736b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6776b, 
+	0xffd6756b, 0xffd6786b, 0xffd6786b, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd6796e, 
+	0xffd67970, 0xffd67970, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd37770, 0xffce716b, 0xffb5655a, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e3c, 0xffa55d5a, 0xffa55d5a, 0xffce716b, 
+	0xffd37770, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd67970, 0xffd6796b, 
+	0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6786b, 0xffd6756b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 
+	0xffd6746b, 0xffd6746b, 0xffd6736b, 0xffd67168, 0xffd67168, 0xffd67168, 0xffd67168, 0xffce7063, 
+	0xffce7063, 0xffce7063, 0xffce7063, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, 
+	0xffce6b63, 0xffce6b63, 0xffce6963, 0xffce695a, 0xffce685a, 0xffce675a, 0xffce675a, 0xffc5655a, 
+	0xffc5655a, 0xffc5655a, 0xffc5645a, 0xffc56158, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56052, 
+	0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55c52, 0xffc55a52, 0xffbd594a, 
+	0xffbd594a, 0xffbd584a, 0xffbd584a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, 
+	0xffbd524a, 0xffbd524a, 0xffbd514a, 0xffba5042, 0xffba5042, 0xffba5042, 0xffb54d42, 0xffb54d42, 
+	0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb54a3f, 0xffb5493a, 0xffb5493a, 0xffb5483a, 
+	0xffb5463a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5433a, 0xffb5433a, 0xffb5423a, 0xffb24137, 
+	0xffaf4134, 0xffaf4134, 0xffaf4134, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3e31, 0xffad3d31, 
+	0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b2f, 0xffad3b2f, 0xffad3a2c, 0xffad3a2c, 0xffad3929, 
+	0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 
+	0xffad3929, 0xffad3929, 0xffad3929, 0xffad3929, 0xffad3a2c, 0xffad3a2c, 0xffad3b2f, 0xffad3b2f, 
+	0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 
+	0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffb54131, 0xffb54131, 0xffb54234, 0xffb54234, 0xffb5453a, 
+	0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5493a, 
+	0xffb54a3c, 0xffb54a3c, 0xffb54c3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffbd4e47, 
+	0xffbd5045, 0xffbd5045, 0xffbd5142, 0xffbd524a, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 
+	0xffbd564a, 0xffbd564a, 0xffbd584a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc55a52, 
+	0xffc55c52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56152, 0xffc56258, 
+	0xffc56258, 0xffc56258, 0xffc56455, 0xffc8655a, 0xffc8655a, 0xffcb655a, 0xffcb655a, 0xffce685d, 
+	0xffce685d, 0xffce695a, 0xffce695a, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, 0xffce6d63, 
+	0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd07165, 0xffd6716b, 
+	0xffd6716b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6776b, 0xffd6786b, 0xffd6776b, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd67970, 
+	0xffd67970, 0xffd67970, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd37770, 0xffce716b, 0xffb5655a, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, 
+	0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd6786b, 
+	0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd37168, 0xffd37168, 0xffd37168, 0xffd07165, 0xffce7063, 
+	0xffce7063, 0xffce6f63, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c63, 0xffce6960, 
+	0xffce6960, 0xffce6960, 0xffce695d, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc8675a, 0xffc5655a, 
+	0xffc5655a, 0xffc5645a, 0xffc5625a, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56155, 0xffc56052, 
+	0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55c52, 0xffc55a52, 0xffc55952, 0xffbd594a, 
+	0xffbd584a, 0xffbd584a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, 
+	0xffbd524a, 0xffbd514a, 0xffbd514a, 0xffb55042, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54d42, 
+	0xffb54c42, 0xffb54c42, 0xffb54a42, 0xffb5493f, 0xffb5493c, 0xffb5493c, 0xffb5493c, 0xffb5483a, 
+	0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb24137, 
+	0xffaf4134, 0xffaf4134, 0xffaf4134, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3d31, 0xffad3d31, 
+	0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3a31, 0xffad3a31, 0xffad3931, 0xffad392c, 
+	0xffad392c, 0xffad392c, 0xffad392c, 0xffaa3929, 0xffaa3929, 0xffa73929, 0xffaa3929, 0xffa73929, 
+	0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad3a31, 
+	0xffad3a31, 0xffad3b31, 0xffad3b31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 
+	0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad4131, 0xffaf4234, 0xffaf4234, 0xffb24337, 0xffb5453a, 
+	0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54942, 
+	0xffb54a3c, 0xffb54a3c, 0xffb54a3c, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffba5045, 
+	0xffba5045, 0xffba5045, 0xffbd5142, 0xffbd514a, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 
+	0xffbd554a, 0xffbd564a, 0xffbd584a, 0xffbd594d, 0xffbd594d, 0xffbd594d, 0xffbd5950, 0xffc55a52, 
+	0xffc55a52, 0xffc55c52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc56052, 0xffc5615a, 
+	0xffc56258, 0xffc56258, 0xffc56258, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffcb685a, 
+	0xffcb685a, 0xffcb685a, 0xffce695a, 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, 
+	0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6f65, 0xffce6f65, 0xffce7068, 0xffce7068, 0xffd6716b, 
+	0xffd6716b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6776b, 0xffd6786b, 0xffd6786b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, 
+	0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, 
+	0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd6786b, 
+	0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6756b, 0xffd6746b, 0xffd6736b, 0xffd37168, 0xffd37168, 0xffd37168, 0xffd37168, 0xffce7063, 
+	0xffce7063, 0xffce6f63, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6c63, 0xffce6b63, 0xffce6960, 
+	0xffce6960, 0xffce6960, 0xffce695d, 0xffcb685a, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc5655a, 
+	0xffc5655a, 0xffc5645a, 0xffc5645a, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56155, 0xffc56052, 
+	0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55a52, 0xffc55a52, 0xffc55a52, 0xffbd594a, 
+	0xffbd584a, 0xffbd584a, 0xffbd584a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, 
+	0xffbd524a, 0xffbd524a, 0xffbd514a, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54d42, 0xffb54d42, 
+	0xffb54c42, 0xffb54c42, 0xffb54c42, 0xffb5493f, 0xffb5493c, 0xffb5493c, 0xffb5493c, 0xffb5483a, 
+	0xffb5463a, 0xffb5463a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb24137, 
+	0xffb24137, 0xffaf4134, 0xffaf4134, 0xffad3f31, 0xffad3e31, 0xffad3f31, 0xffad3e31, 0xffad3d31, 
+	0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3a31, 0xffad3a31, 0xffad3931, 0xffad392c, 
+	0xffad392c, 0xffad392c, 0xffad392c, 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffa73929, 
+	0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffad392c, 0xffad392c, 0xffad392f, 0xffad392c, 0xffad3a31, 
+	0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 
+	0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffaf4234, 0xffaf4234, 0xffaf4234, 0xffb24337, 0xffb5453a, 
+	0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54942, 
+	0xffb54a3c, 0xffb54a3c, 0xffb54a3c, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb84e47, 
+	0xffba5045, 0xffba5045, 0xffbd5142, 0xffbd514a, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 
+	0xffbd564a, 0xffbd564a, 0xffbd564a, 0xffbd594d, 0xffbd594d, 0xffbd594d, 0xffbd5950, 0xffc55a52, 
+	0xffc55a52, 0xffc55c52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc56152, 0xffc5615a, 
+	0xffc56258, 0xffc56258, 0xffc56455, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffcb685a, 
+	0xffcb685a, 0xffcb685a, 0xffce695a, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce6d63, 
+	0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6f65, 0xffce6f65, 0xffce7068, 0xffce7068, 0xffd6716b, 
+	0xffd6736b, 0xffd6736b, 0xffd6736b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6776b, 
+	0xffd6776b, 0xffd6786b, 0xffd6786b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, 
+	0xffd6796e, 0xffd67970, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, 
+	0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6786b, 
+	0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd37168, 0xffd37168, 0xffd37168, 0xffd37168, 0xffce7063, 
+	0xffce7063, 0xffce6f63, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6c63, 0xffce6c63, 0xffce6960, 
+	0xffce6960, 0xffce6960, 0xffce695d, 0xffcb685a, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc5655a, 
+	0xffc5655a, 0xffc5645a, 0xffc5625a, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56155, 0xffc56052, 
+	0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55c52, 0xffc55c52, 0xffc55a52, 0xffc55a52, 0xffbd594a, 
+	0xffbd584a, 0xffbd584a, 0xffbd564a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, 
+	0xffbd544a, 0xffbd524a, 0xffbd514a, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54e42, 0xffb54d42, 
+	0xffb54d42, 0xffb54c42, 0xffb54a42, 0xffb5493f, 0xffb5493c, 0xffb5493c, 0xffb5493c, 0xffb5483a, 
+	0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb24137, 
+	0xffaf4134, 0xffaf4134, 0xffaf4134, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3e31, 0xffad3d31, 
+	0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3b31, 0xffad3a31, 0xffad3a31, 0xffad392c, 
+	0xffad392c, 0xffad392c, 0xffad392c, 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffaa3929, 
+	0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffad392c, 0xffad392c, 0xffad392f, 0xffad392c, 0xffad3a31, 
+	0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3f31, 
+	0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad4131, 0xffaf4234, 0xffaf4234, 0xffb24337, 0xffb5453a, 
+	0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54942, 
+	0xffb54942, 0xffb54a3c, 0xffb54a3c, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb84e47, 
+	0xffba5045, 0xffba5045, 0xffbd5142, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 
+	0xffbd564a, 0xffbd564a, 0xffbd584a, 0xffbd594d, 0xffbd594d, 0xffbd594d, 0xffbd5950, 0xffc55a52, 
+	0xffc55c52, 0xffc55c52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc56052, 0xffc5615a, 
+	0xffc56258, 0xffc56258, 0xffc56455, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc8675a, 
+	0xffcb685a, 0xffcb685a, 0xffce695a, 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, 
+	0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6f65, 0xffce7068, 0xffce7068, 0xffce7068, 0xffd6716b, 
+	0xffd6716b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6776b, 
+	0xffd6756b, 0xffd6786b, 0xffd6786b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, 
+	0xffd67970, 0xffd6796e, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, 
+	0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd6786b, 
+	0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd37168, 0xffd37168, 0xffd37168, 0xffd37168, 0xffce7063, 
+	0xffce7063, 0xffce6f63, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6c63, 0xffce6c63, 0xffce6960, 
+	0xffce6960, 0xffce6960, 0xffce695d, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc8675a, 0xffc5655a, 
+	0xffc5655a, 0xffc5655a, 0xffc5645a, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56155, 0xffc56052, 
+	0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55a52, 0xffc55a52, 0xffc55952, 0xffbd594a, 
+	0xffbd584a, 0xffbd584a, 0xffbd584a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, 
+	0xffbd524a, 0xffbd524a, 0xffbd514a, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54e42, 0xffb54d42, 
+	0xffb54c42, 0xffb54c42, 0xffb54c42, 0xffb5493f, 0xffb5493f, 0xffb5493c, 0xffb5493c, 0xffb5483a, 
+	0xffb5483a, 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb24137, 
+	0xffb24137, 0xffb24137, 0xffaf4134, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3e31, 0xffad3d31, 
+	0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3b31, 0xffad3a31, 0xffad3a31, 0xffad392f, 
+	0xffad392c, 0xffad392c, 0xffad392c, 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffaa3929, 
+	0xffaa3929, 0xffaa3929, 0xffaa3929, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392f, 0xffad3a31, 
+	0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 
+	0xffad3f31, 0xffad3f31, 0xffad4131, 0xffaf4234, 0xffaf4234, 0xffaf4234, 0xffaf4234, 0xffb5453a, 
+	0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54942, 
+	0xffb54942, 0xffb54a3c, 0xffb54a3c, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffba5045, 
+	0xffba5045, 0xffba5045, 0xffbd5142, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 0xffbd554a, 
+	0xffbd564a, 0xffbd564a, 0xffbd584a, 0xffbd594d, 0xffbd594d, 0xffbd594d, 0xffbd5950, 0xffc55a52, 
+	0xffc55c52, 0xffc55c52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56152, 0xffc5615a, 
+	0xffc56258, 0xffc56258, 0xffc56258, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffcb685a, 
+	0xffcb685a, 0xffcb685a, 0xffce695a, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, 
+	0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6f65, 0xffce7068, 0xffce7068, 0xffce7068, 0xffd6716b, 
+	0xffd6716b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6776b, 0xffd6776b, 0xffd6776b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, 
+	0xffd6796e, 0xffd67970, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, 
+	0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd6786b, 
+	0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6756b, 0xffd6746b, 0xffd6736b, 0xffd6736b, 0xffd6736b, 0xffd6716b, 0xffd6716b, 0xffce7063, 
+	0xffce7063, 0xffce6f63, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c5d, 
+	0xffce6b60, 0xffce6963, 0xffce6963, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc8675a, 0xffc5655a, 
+	0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc56158, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56052, 
+	0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55d52, 0xffc55a52, 0xffc55a52, 0xffc55a52, 0xffbd594a, 
+	0xffbd594a, 0xffbd584d, 0xffbd584d, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, 
+	0xffbd544a, 0xffbd524a, 0xffbd514a, 0xffb55042, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54d42, 
+	0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb54a3f, 0xffb5493a, 0xffb5493a, 0xffb5483a, 
+	0xffb5483a, 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffaf4234, 
+	0xffaf4234, 0xffaf4234, 0xffad4131, 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3d31, 
+	0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3a31, 0xffad3a2c, 
+	0xffad3a2c, 0xffad3a2c, 0xffad3a2c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 
+	0xffad392c, 0xffad392c, 0xffad392c, 0xffad3931, 0xffad3931, 0xffad3a31, 0xffad3b31, 0xffad3a31, 
+	0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 0xffad3e37, 
+	0xffad3f34, 0xffad3f34, 0xffad3f34, 0xffad413a, 0xffad413a, 0xffaf423a, 0xffb2433a, 0xffb5453a, 
+	0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54a3f, 
+	0xffb54942, 0xffb54a3f, 0xffb54a3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffba5047, 
+	0xffba5047, 0xffbd5142, 0xffbd5142, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 
+	0xffbd564a, 0xffbd564a, 0xffbd564a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55a52, 
+	0xffc55c52, 0xffc55c52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc5615a, 
+	0xffc5625a, 0xffc5625a, 0xffc5625a, 0xffc8655a, 0xffc8655a, 0xffc8655a, 0xffc8655a, 0xffce685d, 
+	0xffce685d, 0xffce685d, 0xffce685d, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce6d63, 
+	0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce7068, 0xffce7068, 0xffce7068, 0xffce7163, 0xffd6716b, 
+	0xffd6736b, 0xffd6736b, 0xffd6736b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6776b, 0xffd6776b, 0xffd6786b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, 
+	0xffd67970, 0xffd6796e, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, 
+	0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796b, 
+	0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 
+	0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd6736b, 0xffd6716b, 0xffd6716b, 0xffd6716b, 0xffce7163, 
+	0xffce7063, 0xffce6f63, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6b60, 
+	0xffce6b60, 0xffce6b60, 0xffce6963, 0xffcb685a, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc5655a, 
+	0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56155, 0xffc56052, 
+	0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55c52, 0xffc55a52, 0xffc55a52, 0xffc55a52, 0xffbd594a, 
+	0xffbd584d, 0xffbd584d, 0xffbd584d, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, 
+	0xffbd544a, 0xffbd524a, 0xffbd514a, 0xffb55042, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54d42, 
+	0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb54a3f, 0xffb54a3f, 0xffb5493a, 0xffb5483a, 
+	0xffb5483a, 0xffb5463a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb24337, 
+	0xffaf4234, 0xffaf4234, 0xffad4131, 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad3e31, 0xffad3d31, 
+	0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3a2c, 
+	0xffad3a2c, 0xffad3a2c, 0xffad3a2c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 0xffad392c, 
+	0xffad392c, 0xffad392c, 0xffad392c, 0xffad3a31, 0xffad3a31, 0xffad3a31, 0xffad3b31, 0xffad3b31, 
+	0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3d31, 0xffad3e31, 0xffad3e31, 0xffad3e31, 0xffad3f34, 
+	0xffad3f34, 0xffad3f34, 0xffad4131, 0xffaf423a, 0xffaf423a, 0xffaf423a, 0xffb2433a, 0xffb5453a, 
+	0xffb5453a, 0xffb5453a, 0xffb5463a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54942, 
+	0xffb54a3f, 0xffb54a3f, 0xffb54a3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffba5047, 
+	0xffba5047, 0xffba5047, 0xffbd5142, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 
+	0xffbd564a, 0xffbd564a, 0xffbd584a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55a52, 
+	0xffc55c52, 0xffc55c52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc5615a, 
+	0xffc5625a, 0xffc5625a, 0xffc5645a, 0xffc8655a, 0xffc8655a, 0xffc8655a, 0xffc8655a, 0xffce685d, 
+	0xffce685d, 0xffce685d, 0xffce695a, 0xffce6963, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, 
+	0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce7068, 0xffce7068, 0xffce7068, 0xffce7163, 0xffd6716b, 
+	0xffd6736b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6776b, 0xffd6776b, 0xffd6786b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, 
+	0xffd6796e, 0xffd67970, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, 
+	0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796e, 0xffd6786b, 
+	0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6786b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6756b, 0xffd6746b, 0xffd6736b, 0xffd6746b, 0xffd6716b, 0xffd6716b, 0xffd6716b, 0xffce7163, 
+	0xffce7063, 0xffce6f63, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6b60, 
+	0xffce6b60, 0xffce6b60, 0xffce6963, 0xffce695a, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc5655a, 
+	0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc56158, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56052, 
+	0xffc55e52, 0xffc55e52, 0xffc55d52, 0xffc55d52, 0xffc55c52, 0xffc55a52, 0xffc55a52, 0xffbd594a, 
+	0xffbd584d, 0xffbd584d, 0xffbd584d, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, 
+	0xffbd524a, 0xffbd524a, 0xffbd524a, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54e42, 0xffb54d42, 
+	0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb54a3f, 0xffb5493a, 0xffb5493a, 0xffb5483a, 
+	0xffb5483a, 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb24337, 
+	0xffaf4234, 0xffaf4234, 0xffad4131, 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad3d31, 
+	0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3b2f, 
+	0xffad3b2f, 0xffad3a2c, 0xffad3a2c, 0xffad392c, 0xffad392f, 0xffad392c, 0xffad392c, 0xffad392f, 
+	0xffad392c, 0xffad392f, 0xffad392f, 0xffad3a31, 0xffad3a31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 
+	0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3d31, 0xffad3e31, 0xffad3e31, 0xffad3e31, 0xffad3f34, 
+	0xffad3f34, 0xffad3f34, 0xffad4131, 0xffad413a, 0xffaf423a, 0xffaf423a, 0xffb2433a, 0xffb5453a, 
+	0xffb5453a, 0xffb5463a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54942, 
+	0xffb54942, 0xffb54c3c, 0xffb54a3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffba5047, 
+	0xffba5047, 0xffba5047, 0xffba5047, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd544a, 0xffbd564a, 
+	0xffbd564a, 0xffbd564a, 0xffbd584a, 0xffc0594d, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc55a52, 
+	0xffc55a52, 0xffc55d52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc56152, 0xffc5625a, 
+	0xffc5625a, 0xffc5645a, 0xffc5645a, 0xffc8655a, 0xffc8655a, 0xffc8655a, 0xffcb655a, 0xffce685d, 
+	0xffce685d, 0xffce695a, 0xffce695a, 0xffce6b63, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6d63, 
+	0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce7068, 0xffce7068, 0xffce7068, 0xffce7068, 0xffd6716b, 
+	0xffd6736b, 0xffd6736b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6776b, 0xffd6776b, 0xffd6786b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, 
+	0xffd6796e, 0xffd6796e, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff6e3e37, 0xffa55d52, 0xffa55d52, 0xffc57163, 
+	0xffd0776e, 0xffd67973, 0xffd67973, 0xffd67970, 0xffd67970, 0xffd6796e, 0xffd6796e, 0xffd6796b, 
+	0xffd6786b, 0xffd6786b, 0xffd6786b, 0xffd6776b, 0xffd6776b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 
+	0xffd6756b, 0xffd6746b, 0xffd6746b, 0xffd6736b, 0xffd6736b, 0xffd6716b, 0xffd6716b, 0xffce7163, 
+	0xffce7063, 0xffce7063, 0xffce6f63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce6c5d, 
+	0xffce6b60, 0xffce6b60, 0xffce6963, 0xffcb685a, 0xffcb685a, 0xffcb685a, 0xffc8675a, 0xffc5655a, 
+	0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc56158, 0xffc56158, 0xffc56158, 0xffc56155, 0xffc56052, 
+	0xffc55e52, 0xffc55e52, 0xffc55e52, 0xffc55c52, 0xffc55c52, 0xffc55a52, 0xffc55a52, 0xffbd594a, 
+	0xffbd594a, 0xffbd584d, 0xffbd584d, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd554a, 0xffbd544a, 
+	0xffbd544a, 0xffbd524a, 0xffbd514a, 0xffb55142, 0xffb55042, 0xffb55042, 0xffb54e42, 0xffb54d42, 
+	0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54a3f, 0xffb54a3f, 0xffb54a3f, 0xffb5493a, 0xffb5483a, 
+	0xffb5483a, 0xffb5483a, 0xffb5463a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb5453a, 0xffb24337, 
+	0xffaf4234, 0xffaf4234, 0xffaf4234, 0xffad4131, 0xffad3f31, 0xffad3f31, 0xffad3f31, 0xffad3d31, 
+	0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 0xffad3a2c, 
+	0xffad3b2f, 0xffad3b2f, 0xffad3b2f, 0xffad392f, 0xffad392f, 0xffad392f, 0xffad392f, 0xffad392f, 
+	0xffad392f, 0xffad392f, 0xffad392f, 0xffad3a31, 0xffad3a31, 0xffad3b31, 0xffad3b31, 0xffad3b31, 
+	0xffad3b31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3d31, 0xffad3e31, 0xffad3f31, 0xffad3f34, 
+	0xffad3f34, 0xffad3f34, 0xffad4131, 0xffaf423a, 0xffb2433a, 0xffb2433a, 0xffb2433a, 0xffb5453a, 
+	0xffb5453a, 0xffb5463a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb5483a, 0xffb54942, 
+	0xffb54942, 0xffb54a3f, 0xffb54a3f, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffb54d42, 0xffba5047, 
+	0xffba5047, 0xffbd5142, 0xffbd5142, 0xffbd524a, 0xffbd544a, 0xffbd544a, 0xffbd554a, 0xffbd564a, 
+	0xffbd564a, 0xffbd564a, 0xffbd584a, 0xffc0594d, 0xffc0594d, 0xffc35950, 0xffc35950, 0xffc55a52, 
+	0xffc55c52, 0xffc55c52, 0xffc55d52, 0xffc55e52, 0xffc55e52, 0xffc56052, 0xffc56152, 0xffc5625a, 
+	0xffc5625a, 0xffc5625a, 0xffc5645a, 0xffc8655a, 0xffc8655a, 0xffc8655a, 0xffc8655a, 0xffce685d, 
+	0xffce685d, 0xffce685d, 0xffce695a, 0xffce6b63, 0xffce6b63, 0xffce6c63, 0xffce6c63, 0xffce6d63, 
+	0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffce7068, 0xffce7068, 0xffce7068, 0xffce7068, 0xffd6716b, 
+	0xffd6716b, 0xffd6746b, 0xffd6746b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6756b, 0xffd6776b, 
+	0xffd6776b, 0xffd6776b, 0xffd6786b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796b, 0xffd6796e, 
+	0xffd67970, 0xffd6796e, 0xffd67970, 0xffd67973, 0xffd67973, 0xffd0776e, 0xffc57163, 0xffb5655a, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00100400, 0xff473531, 0xff7e6563, 0xff7e6563, 0xffad655a, 
+	0xffad7b73, 0xffad7b73, 0xffad7b73, 0xffb57573, 0xffb57573, 0xffb57573, 0xffb57573, 0xffb5756b, 
+	0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5716b, 
+	0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffad716b, 
+	0xffad716b, 0xffad716b, 0xffad716b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 
+	0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffb5655a, 0xffb5655a, 0xffb5655a, 0xffb5655a, 0xffb5615a, 
+	0xffb5615a, 0xffb5615a, 0xffb5615a, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d52, 
+	0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffad5952, 0xffad5952, 0xffad5952, 0xffad5952, 0xffad594a, 
+	0xffad594a, 0xffad594a, 0xffad594a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad514a, 
+	0xffad514a, 0xffad514a, 0xffad514a, 0xffa55142, 0xffa55142, 0xffa55142, 0xffa55142, 0xffa54d42, 
+	0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54942, 
+	0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xff9c453a, 
+	0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c413a, 
+	0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 
+	0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c3d3a, 
+	0xff9c3d3a, 0xff9c3d3a, 0xff9c3d3a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 
+	0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c453a, 
+	0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xffa54942, 
+	0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54d42, 
+	0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffad514a, 
+	0xffad514a, 0xffad514a, 0xffad514a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad554a, 
+	0xffad554a, 0xffad554a, 0xffad554a, 0xffad5952, 0xffad5952, 0xffad5952, 0xffad5952, 0xffb55952, 
+	0xffb55952, 0xffb55952, 0xffb55952, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d5a, 
+	0xffb55d5a, 0xffb55d5a, 0xffb55d5a, 0xffb5615a, 0xffb5615a, 0xffb5615a, 0xffb5615a, 0xffbd655a, 
+	0xffbd655a, 0xffbd655a, 0xffbd655a, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 
+	0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad716b, 0xffad716b, 0xffad716b, 0xffad716b, 0xffb5716b, 
+	0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5756b, 
+	0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb57573, 
+	0xffb57573, 0xffb57573, 0xffb57573, 0xffad7b73, 0xffad7b73, 0xffad7b73, 0xffad655a, 0xff7e6463, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00100400, 0xff473531, 0xff7e6563, 0xff7e6563, 0xffad655a, 
+	0xffad7b73, 0xffad7b73, 0xffad7b73, 0xffb57573, 0xffb57573, 0xffb57573, 0xffb57573, 0xffb5756b, 
+	0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5716b, 
+	0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffad716b, 
+	0xffad716b, 0xffad716b, 0xffad716b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 
+	0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffb5655a, 0xffb5655a, 0xffb5655a, 0xffb5655a, 0xffb5615a, 
+	0xffb5615a, 0xffb5615a, 0xffb5615a, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d52, 
+	0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffad5952, 0xffad5952, 0xffad5952, 0xffad5952, 0xffad594a, 
+	0xffad594a, 0xffad594a, 0xffad594a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad514a, 
+	0xffad514a, 0xffad514a, 0xffad514a, 0xffa55142, 0xffa55142, 0xffa55142, 0xffa55142, 0xffa54d42, 
+	0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54942, 
+	0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xff9c453a, 
+	0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c413a, 
+	0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 
+	0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c3d3a, 
+	0xff9c3d3a, 0xff9c3d3a, 0xff9c3d3a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 
+	0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c413a, 0xff9c453a, 
+	0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xff9c453a, 0xffa54942, 
+	0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54942, 0xffa54d42, 
+	0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffa54d42, 0xffad514a, 
+	0xffad514a, 0xffad514a, 0xffad514a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad554a, 0xffad554a, 
+	0xffad554a, 0xffad554a, 0xffad554a, 0xffad5952, 0xffad5952, 0xffad5952, 0xffad5952, 0xffb55952, 
+	0xffb55952, 0xffb55952, 0xffb55952, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d52, 0xffb55d5a, 
+	0xffb55d5a, 0xffb55d5a, 0xffb55d5a, 0xffb5615a, 0xffb5615a, 0xffb5615a, 0xffb5615a, 0xffbd655a, 
+	0xffbd655a, 0xffbd655a, 0xffbd655a, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 
+	0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad716b, 0xffad716b, 0xffad716b, 0xffad716b, 0xffb5716b, 
+	0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5756b, 
+	0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb57573, 
+	0xffb57573, 0xffb57573, 0xffb57573, 0xffad7b73, 0xffad7b73, 0xffad7b73, 0xffad655a, 0xff7e6463, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00100400, 0xff7e6563, 0xff7e6563, 0xff7e6563, 0xffad655a, 
+	0xffad655a, 0xffad7b73, 0xffad7b73, 0xffb57573, 0xffb57573, 0xffb57573, 0xffb57573, 0xffb5756b, 
+	0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5716b, 
+	0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffad716b, 
+	0xffad716b, 0xffad716b, 0xffad716b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 
+	0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad7c76, 0xffad7c76, 0xffad7c76, 0xffad7c76, 0xffad7976, 
+	0xffad7976, 0xffad7976, 0xffad7976, 0xffad7770, 0xffad7770, 0xffad7770, 0xffad7770, 0xffad7870, 
+	0xffad7870, 0xffad7870, 0xffad7870, 0xffa77570, 0xffa77570, 0xffa77570, 0xffa77570, 0xffa7756b, 
+	0xffa7756b, 0xffa7756b, 0xffa7756b, 0xffa7736b, 0xffa7736b, 0xffa7736b, 0xffa7736b, 0xffa7706b, 
+	0xffa7706b, 0xffa7706b, 0xffa7706b, 0xffa27065, 0xffa27065, 0xffa27065, 0xffa27065, 0xffa26d65, 
+	0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26b68, 
+	0xffa26b68, 0xffa26b68, 0xffa26b68, 0xffa26c68, 0xffa26c68, 0xffa26c68, 0xffa26c68, 0xff9c6963, 
+	0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6763, 
+	0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 
+	0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6463, 
+	0xff9c6463, 0xff9c6463, 0xff9c6463, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 
+	0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6763, 0xff9c6963, 
+	0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xffa26c68, 
+	0xffa26c68, 0xffa26c68, 0xffa26c68, 0xffa26b68, 0xffa26b68, 0xffa26b68, 0xffa26b68, 0xffa26d65, 
+	0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa26d65, 0xffa7706b, 
+	0xffa7706b, 0xffa7706b, 0xffa7706b, 0xffa7736b, 0xffa7736b, 0xffa7736b, 0xffa7736b, 0xffa7736b, 
+	0xffa7736b, 0xffa7736b, 0xffa7736b, 0xffa77570, 0xffa77570, 0xffa77570, 0xffa77570, 0xffad7570, 
+	0xffad7570, 0xffad7570, 0xffad7570, 0xffad7870, 0xffad7870, 0xffad7870, 0xffad7870, 0xffad7776, 
+	0xffad7776, 0xffad7776, 0xffad7776, 0xffad7976, 0xffad7976, 0xffad7976, 0xffad7976, 0xffaf7c76, 
+	0xffaf7c76, 0xffaf7c76, 0xffaf7c76, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 
+	0xffad6d6b, 0xffad6d6b, 0xffad6d6b, 0xffad716b, 0xffad716b, 0xffad716b, 0xffad716b, 0xffb5716b, 
+	0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5716b, 0xffb5756b, 
+	0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb5756b, 0xffb57573, 
+	0xffb57573, 0xffb57573, 0xffb57573, 0xffad7b73, 0xffad7b73, 0xffad655a, 0xffad655a, 0xff7e6463, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00100400, 0xff7e6563, 0xffb59694, 0xffb59694, 0xffada6a5, 
+	0xffada6a5, 0xffada6a5, 0xffada6a5, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 
+	0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 
+	0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 
+	0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 
+	0xffadaead, 0xffadaead, 0xffadaead, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 
+	0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caead, 
+	0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 
+	0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 
+	0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 
+	0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caeb5, 
+	0xff9caeb5, 0xff9caeb5, 0xff9caeb5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 
+	0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 
+	0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 
+	0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 
+	0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 
+	0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 
+	0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 
+	0xff9cb2b5, 0xff9cb2b5, 0xff9cb2b5, 0xff9caeb5, 0xff9caeb5, 0xff9caeb5, 0xff9caeb5, 0xff9caead, 
+	0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 
+	0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 
+	0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 
+	0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caaad, 
+	0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff9caaad, 0xff94aaad, 
+	0xff94aaad, 0xff94aaad, 0xff94aaad, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 
+	0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 
+	0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 
+	0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 0xffadaead, 
+	0xffadaead, 0xffadaead, 0xffadaead, 0xffada6a5, 0xffada6a5, 0xffada6a5, 0xffada6a5, 0xffbd9694, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff737473, 0xffadaead, 0xffadaead, 0xffd6d2d6, 
+	0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffb5b6b5, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 
+	0x11000000, 0x22000000, 0x22000000, 0x33000000, 0x44000000, 0x55000000, 0x44000000, 0x33000000, 
+	0x33000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x22000000, 0x55000000, 0x88000000, 0xbb000000, 
+	0xdd0e0403, 0xdd0e0403, 0xee100503, 0xee100503, 0xff100503, 0xff100503, 0xff100503, 0xee100503, 
+	0xee100503, 0xee100503, 0xdd0e0403, 0xaa000000, 0x77000000, 0x44000000, 0x22000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff737573, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, 
+	0xffa5a6a5, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, 
+	0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffadaaad, 0xffa5a6a5, 0xffa5a6a5, 0xffa5a6a5, 
+	0xffa5a6a5, 0xff737173, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11000000, 0x33000000, 0x880e0403, 0xcc0e0403, 0xee0e0403, 0xff1b0805, 0xff1b0805, 0xff1b0805, 
+	0xff1b0805, 0xff1b0805, 0xff210b05, 0xff210b05, 0xff210b05, 0xff210b05, 0xff210b05, 0xff210b05, 
+	0xff210b05, 0xff210b05, 0xff1b0805, 0xff1b0805, 0xff1b0805, 0xee1b0805, 0xdd0b0403, 0x880b0403, 
+	0x44000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffadaaad, 0xffdbbeb8, 0xffe9dfdb, 0xffe9dfdb, 
+	0xffe9dfdb, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 
+	0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6dbd6, 0xffe6dbd6, 0xffe6dbd6, 
+	0xffe6dbd6, 0xffa5a6a5, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x00080000, 0x11080000, 
+	0x11080000, 0x22210400, 0x22210400, 0x33210400, 0x33210400, 0x33210400, 0x33210400, 0x33210400, 
+	0x22210400, 0x11100400, 0x11100400, 0x00100400, 0x00100400, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000000, 0x66080303, 
+	0xaa100505, 0xee190808, 0xff1b0805, 0xff1b0805, 0xff290c08, 0xff290c08, 0xff290c08, 0xff290c08, 
+	0xff290c08, 0xff290c08, 0xff311008, 0xff311008, 0xff311008, 0xff311008, 0xff311008, 0xff311008, 
+	0xff210b05, 0xff311008, 0xff290c08, 0xff290c08, 0xff290c08, 0xff290c08, 0xff210c08, 0xff210c08, 
+	0xee160805, 0xaa0b0403, 0x55000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11030303, 0x22030303, 0x22080808, 0x330b0b0b, 0x44101010, 0x33101010, 0x330b0b0b, 0x33080808, 
+	0x22050505, 0x11030303, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffadaaad, 0xffe9dfdb, 0xfff7ffff, 0xffce9e94, 
+	0xffce9e94, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffce9e94, 0xffce9e94, 0xffce9e94, 
+	0xffce9e94, 0xffce968c, 0xffce968c, 0xffce968c, 0xffce968c, 0xffc59284, 0xffc59284, 0xfff7ffff, 
+	0xffe6dbd6, 0xffa5a6a5, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x11080000, 0x22080000, 
+	0x33080000, 0x66210400, 0x99210400, 0xaa210400, 0xbb210400, 0xbb210400, 0xbb210400, 0xaa210400, 
+	0x66210400, 0x33100400, 0x22100400, 0x11100400, 0x00100400, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x66190705, 0xcc210808, 0xff340f0e, 
+	0xff340f0e, 0xff340f0e, 0xff3a1010, 0xff3a1010, 0xff3a1010, 0xff3a1010, 0xff3a1010, 0xff4a1613, 
+	0xff4a1613, 0xff3a1010, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xff3a1010, 0xff471613, 
+	0xff3a1010, 0xff3a1010, 0xff311010, 0xff311010, 0xff311010, 0xff311010, 0xff37100b, 0xff37100b, 
+	0xff290c08, 0xff290c08, 0xee160705, 0xaa160705, 0x33000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00080808, 0x00080808, 0x11080808, 0x55503a37, 0x886b494a, 
+	0xbb8c6160, 0xddad7976, 0xeead7976, 0xffa57479, 0xffa57479, 0xeea57479, 0xdd9c6163, 0xcc794542, 
+	0x99794542, 0x663c2421, 0x22000400, 0x11080400, 0x11080400, 0x00080400, 0x00080400, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffadaaad, 0xffe9dfdb, 0xffce9e94, 0xffce9e94, 
+	0xffce9e94, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffce9e94, 0xffce9e94, 0xffce9e94, 
+	0xffce9e94, 0xffce968c, 0xffce968c, 0xffce968c, 0xffce968c, 0xffc59284, 0xffc59284, 0xffc59284, 
+	0xffe6dbd6, 0xffa5a6a5, 0x00000000, 0x00000000, 0x00000000, 0x11080000, 0x22080000, 0x44080000, 
+	0xaa080000, 0xdd55241b, 0xee894537, 0xee894537, 0xee894537, 0xee9f584d, 0xee9f584d, 0xee9f584d, 
+	0xdd9f584d, 0xbb100400, 0x55100400, 0x22100400, 0x11100400, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x22000000, 0x99190705, 0xee310d0b, 0xff340f0e, 0xff340f0e, 
+	0xff340f0e, 0xff471613, 0xff471613, 0xff471613, 0xff471613, 0xff471613, 0xff4a1613, 0xff5a1b16, 
+	0xff4a1613, 0xff5a1b16, 0xff501813, 0xff501813, 0xff501813, 0xff501813, 0xff551b16, 0xff471613, 
+	0xff471613, 0xff471613, 0xff421613, 0xff421613, 0xff421613, 0xff421613, 0xff37100b, 0xff37100b, 
+	0xff37100b, 0xff37100b, 0xff2c0d0b, 0xff2c0d0b, 0xcc160705, 0x44000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x33080808, 0x88503a37, 0xcc976c65, 0xffde9e94, 0xffce928c, 
+	0xffce928c, 0xffce928c, 0xffad7976, 0xffad878f, 0xffad878f, 0xffad878f, 0xffa57479, 0xffb56563, 
+	0xffb56563, 0xffb56563, 0xdd794542, 0x994a2019, 0x44080400, 0x11080400, 0x11080400, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffadaaad, 0xffe9dfdb, 0xffce9e94, 0xffce9e94, 
+	0xffce9e94, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffce9e94, 0xffce9e94, 0xffce9e94, 
+	0xffce9e94, 0xffce968c, 0xffce968c, 0xffce968c, 0xffce968c, 0xffc59284, 0xffc59284, 0xffc59284, 
+	0xffe6dbd6, 0xffa5a6a5, 0x00000000, 0x00000000, 0x00000000, 0x11080000, 0x33080000, 0xaa080000, 
+	0xee9c3d31, 0xee894537, 0xeebd6552, 0xeebd6552, 0xeebd6552, 0xee9f584d, 0xee9f584d, 0xee9f584d, 
+	0xeede8273, 0xeed6c2bd, 0xbb100400, 0x33100400, 0x11100400, 0x11000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x66190705, 0xdd310d0b, 0xff4a1410, 0xff4a1410, 0xff471613, 0xff471613, 
+	0xff471613, 0xff471613, 0xff551b16, 0xff551b16, 0xff551b16, 0xff551b16, 0xff5a1b16, 0xff5a1b16, 
+	0xff6b2019, 0xff5a1b16, 0xff5d1c16, 0xff5d1c16, 0xff5d1c16, 0xff5d1c16, 0xff551b16, 0xff551b16, 
+	0xff551b16, 0xff551b16, 0xff521b16, 0xff421613, 0xff421613, 0xff421613, 0xff45140e, 0xff45140e, 
+	0xff45140e, 0xff45140e, 0xff421410, 0xff421410, 0xff2c0d0b, 0xdd160705, 0x77000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x22000000, 0x884d3634, 0xdd976c65, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffce928c, 
+	0xffce928c, 0xffad7976, 0xffad7976, 0xffad878f, 0xffb59aa5, 0xffad878f, 0xffad878f, 0xffb56563, 
+	0xffb56563, 0xffb56563, 0xffb56563, 0xffce594a, 0xdd8c3d31, 0x994a2019, 0x44080400, 0x11000000, 
+	0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00080408, 0xff979697, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, 
+	0xffce9a8c, 0xffce9e94, 0xffce9e94, 0xffce9a8f, 0xffce9a8f, 0xffce9a94, 0xffce9a94, 0xffce9a94, 
+	0xffce9a94, 0xffce968c, 0xffc88f84, 0xffc88f84, 0xffc88f84, 0xffbd8273, 0xffbd8273, 0xffbd8273, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x11000000, 0x22210400, 0x66210400, 0xdd210400, 
+	0xee945a52, 0xeea5615a, 0xeeaa6d68, 0xeeaa6d68, 0xeeaa6d68, 0xeead6563, 0xeead6563, 0xeeaf6c68, 
+	0xeeb57973, 0xeea7938f, 0xeeefdbd6, 0x77190400, 0x22190400, 0x11000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x77190808, 0xee4a1410, 0xff4a1410, 0xff4a1410, 0xff4a1410, 0xff5a1c19, 0xff5a1c19, 
+	0xff5a1c19, 0xff5a1c19, 0xff632019, 0xff632019, 0xff632019, 0xff632019, 0xff6b2019, 0xff6b2019, 
+	0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff632019, 0xff632019, 
+	0xff632019, 0xff632019, 0xff632019, 0xff521b16, 0xff521b16, 0xff521b16, 0xff521810, 0xff521810, 
+	0xff521810, 0xff45140e, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xee290c08, 0x66000000, 
+	0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x554d3634, 0xbb9a6c68, 0xffe6a29c, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffce928c, 
+	0xffce928c, 0xffad7976, 0xffad7976, 0xffad878f, 0xffb59aa5, 0xffb59aa5, 0xffad878f, 0xffb56563, 
+	0xffb56563, 0xffb56563, 0xffb56563, 0xffce594a, 0xffce594a, 0xffce594a, 0xcc8c3d31, 0x77311010, 
+	0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00080408, 0xff979697, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, 
+	0xffce9a8c, 0xffce9a8f, 0xffce9a8f, 0xffce9a8f, 0xffce9689, 0xffce9a94, 0xffdebab8, 0xffdebab8, 
+	0xffce9a94, 0xffc88f84, 0xffc88f84, 0xffc88f84, 0xffc3887b, 0xffbd8273, 0xffbd8273, 0xffbd8273, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x11000000, 0x33210400, 0x99210400, 0xee945a52, 
+	0xee945a52, 0xeeaa6d68, 0xeeaf7976, 0xeeaf7976, 0xeeaf7976, 0xeeaf6c68, 0xeeaf6c68, 0xeeaf6c68, 
+	0xeeb2736e, 0xeea7938f, 0xeeefdbd6, 0xaa190400, 0x33190400, 0x11000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x00080000, 
+	0x662c0c08, 0xee501810, 0xff521819, 0xff521819, 0xff521819, 0xff631e1b, 0xff631c19, 0xff631c19, 
+	0xff6e221b, 0xff6e221b, 0xff6b2019, 0xff76241b, 0xff76241b, 0xff76241b, 0xff732421, 0xff732421, 
+	0xff732421, 0xff732421, 0xff732421, 0xff732421, 0xff732421, 0xff732421, 0xff76241b, 0xff6b2019, 
+	0xff6b2019, 0xff6b2019, 0xff65201b, 0xff65201b, 0xff65201b, 0xff5a1c19, 0xff581c16, 0xff581c16, 
+	0xff581c16, 0xff4a1810, 0xff4d1813, 0xff4d1813, 0xff4d1813, 0xff421410, 0xff34120b, 0xdd1e0b05, 
+	0x55080400, 0x11080400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x775a413a, 
+	0xddb27f76, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffdb9a91, 0xffd68e8c, 
+	0xffc07f7e, 0xffaa7070, 0xffaa7070, 0xffaa8e97, 0xffb8a2aa, 0xffb8a2aa, 0xffaa8e97, 0xff94696b, 
+	0xff9c5e5d, 0xff9c5e5d, 0xffa55450, 0xffbd5142, 0xffbd5142, 0xffbd493c, 0xffbd493c, 0xeeb53929, 
+	0x9942160e, 0x33080400, 0x11080400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00080408, 0xff979697, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, 
+	0xffce9a8c, 0xffce9689, 0xffce9689, 0xffce9689, 0xffce9284, 0xffce9a94, 0xfffffbff, 0xfffffbff, 
+	0xffce9a94, 0xffc88f84, 0xffc3887b, 0xffc3887b, 0xffc3887b, 0xffbd8273, 0xffbd8273, 0xffbd8273, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x11000000, 0x44210400, 0xbb210400, 0xee945a52, 
+	0xeece867b, 0xeeaf7976, 0xeeaf7976, 0xeeaf7976, 0xeeaf7976, 0xeeb2736e, 0xeeb2736e, 0xeeaf6c68, 
+	0xeeb2736e, 0xeea7938f, 0xeeefdbd6, 0xcc604c47, 0x44190400, 0x22000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x55080000, 
+	0xee501810, 0xff501810, 0xff631e1b, 0xff631e1b, 0xff631e1b, 0xff73231e, 0xff6e221b, 0xff6e221b, 
+	0xff79271e, 0xff6e221b, 0xff76241b, 0xff76241b, 0xff76241b, 0xff81281e, 0xff792721, 0xff792721, 
+	0xff792721, 0xff792721, 0xff7b2721, 0xff7b2721, 0xff7b2721, 0xff7b2721, 0xff76241b, 0xff76241b, 
+	0xff76241b, 0xff76241b, 0xff70241e, 0xff70241e, 0xff70241e, 0xff65201b, 0xff65201b, 0xff65201b, 
+	0xff581c16, 0xff581c16, 0xff4d1813, 0xff4d1813, 0xff4d1813, 0xff4d1813, 0xff4a1810, 0xff34120b, 
+	0xcc1e0b05, 0x44080400, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7745312f, 0xeede9e94, 
+	0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffdb9a91, 0xffd9968f, 0xffd68e8c, 
+	0xffc07f7e, 0xffaa7070, 0xffaa7070, 0xffaa8e97, 0xffb8a2aa, 0xffb8a2aa, 0xffaa8e97, 0xff9c5e5d, 
+	0xffa55450, 0xffa55450, 0xffa55450, 0xffbd5142, 0xffbd493c, 0xffbd493c, 0xffbd4137, 0xffb53929, 
+	0xeeb53929, 0x9942160e, 0x33080400, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00080408, 0xff979697, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, 
+	0xffce9a8c, 0xffce9689, 0xffce9284, 0xffce9284, 0xffce9284, 0xffdebab8, 0xfffffbff, 0xfffffbff, 
+	0xffefdbdb, 0xffc3887b, 0xffc3887b, 0xffc3887b, 0xffbd8273, 0xffbd8273, 0xffbd8273, 0xffbd8273, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x55210400, 0xcc210400, 0xeece867b, 
+	0xeece867b, 0xeeb58684, 0xeeb58684, 0xeeb58684, 0xeeaf7976, 0xeeb57973, 0xeeb57973, 0xeeb2736e, 
+	0xeeb57973, 0xeea7938f, 0xeea7938f, 0xdda7938f, 0x66190400, 0x22000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33080000, 0xdd501810, 
+	0xff732419, 0xff732419, 0xff73231e, 0xff73231e, 0xff73231e, 0xff73231e, 0xff79271e, 0xff79271e, 
+	0xff79271e, 0xff79271e, 0xff81281e, 0xff81281e, 0xff81281e, 0xff81281e, 0xff7e2a21, 0xff7e2a21, 
+	0xff7e2a21, 0xff7e2a21, 0xff842a21, 0xff842a21, 0xff842a21, 0xff842a21, 0xff8c2d21, 0xff81281e, 
+	0xff81281e, 0xff81281e, 0xff7b2821, 0xff70241e, 0xff70241e, 0xff70241e, 0xff732421, 0xff65201b, 
+	0xff65201b, 0xff581c16, 0xff581c16, 0xff581c16, 0xff4d1813, 0xff4d1813, 0xff4a1810, 0xff4a1810, 
+	0xff34120b, 0x99080400, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7745312f, 0xeece928c, 0xffde9e94, 
+	0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffdb9a91, 0xffdb9a91, 0xffd9968f, 0xffd68e8c, 
+	0xffc07f7e, 0xffaa7070, 0xff946163, 0xff9c7984, 0xffc5b6bd, 0xffc5b6bd, 0xff9c7984, 0xffa55450, 
+	0xffa55450, 0xffa55450, 0xffad4942, 0xffbd493c, 0xffbd493c, 0xffbd4137, 0xffbd3931, 0xffb53929, 
+	0xffb53929, 0xeeb53929, 0x9942160e, 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffce9684, 0xffce9684, 
+	0xffce9684, 0xffce9284, 0xffce9284, 0xffce9284, 0xffce9284, 0xfffffbf7, 0xffffffff, 0xffffffff, 
+	0xfffffbf7, 0xffd3aaa2, 0xffbd8273, 0xffbd8273, 0xffbd8273, 0xffad796b, 0xffad796b, 0xffad796b, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x66190000, 0xdd523331, 0xeec59a94, 
+	0xeec59a94, 0xeeb88e84, 0xeeb88e84, 0xeeb5867b, 0xeeb5867b, 0xeeaf7c73, 0xeead756b, 0xeead756b, 
+	0xeead756b, 0xee947168, 0xeecea69c, 0xeecea69c, 0x77210800, 0x22000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0xaa2c0c08, 0xff732419, 
+	0xff732419, 0xff732419, 0xff73231e, 0xff73231e, 0xff842821, 0xff842821, 0xff79271e, 0xff842d21, 
+	0xff842d21, 0xff842d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff842d21, 0xff842d21, 
+	0xff842d21, 0xff842d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 
+	0xff8c2d21, 0xff81281e, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff732421, 0xff732421, 
+	0xff732421, 0xff65201b, 0xff632019, 0xff581c16, 0xff581c16, 0xff581c16, 0xff4a1810, 0xff4a1810, 
+	0xff34120b, 0xee1e0b05, 0x66000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5545312f, 0xddce928c, 0xffce928c, 0xffde9e94, 
+	0xffde9e94, 0xffde9e94, 0xffde9e94, 0xffdb9a91, 0xffdb9a91, 0xffd9968f, 0xffd6928c, 0xffd68e8c, 
+	0xffc07f7e, 0xffaa7070, 0xff946163, 0xff9c7984, 0xffc5b6bd, 0xffc5b6bd, 0xff9c7984, 0xffa55450, 
+	0xffad4942, 0xffad4942, 0xffad4942, 0xffbd493c, 0xffbd4137, 0xffbd3931, 0xffbd3931, 0xffb53929, 
+	0xffb53929, 0xffb53929, 0xee7b271b, 0x88290c08, 0x33000000, 0x11000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffce9684, 0xffce9684, 
+	0xffce9684, 0xffce9284, 0xffce9284, 0xffce9284, 0xffefdbd6, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffe9d2d0, 0xffbd8273, 0xffbd8273, 0xffbd8273, 0xffad796b, 0xffad796b, 0xffad796b, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x77190000, 0xdd523331, 0xeec59a94, 
+	0xeec59a94, 0xeeba968c, 0xeeb88e84, 0xeeb88e84, 0xeeb5867b, 0xeeb2837b, 0xeeaf7c73, 0xeead756b, 
+	0xeead756b, 0xee947168, 0xeecea69c, 0xeecea69c, 0x77210800, 0x22000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x44000000, 0xee6b2021, 0xff762421, 
+	0xff762421, 0xff762421, 0xff7b2421, 0xff862824, 0xff862824, 0xff912d26, 0xff943121, 0xff943121, 
+	0xff943121, 0xff943121, 0xff8c3129, 0xff8c3129, 0xff8c3129, 0xff8c3129, 0xff8c3529, 0xff8c3529, 
+	0xff8c3529, 0xff8c3529, 0xff8c3529, 0xff8c3529, 0xff8c3529, 0xff8c3529, 0xff8c3129, 0xff8c3129, 
+	0xff8c3129, 0xff8c3129, 0xff7b2d21, 0xff7b2d21, 0xff7b2d21, 0xff7b2d21, 0xff7b2d29, 0xff7b2d29, 
+	0xff7b2d29, 0xff7b2d29, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff581c16, 0xff4d1813, 
+	0xff4d1813, 0xff421410, 0xaa000000, 0x33000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x22191419, 0xbb976865, 0xffd6928c, 0xffd6928c, 0xffde9694, 
+	0xffde9694, 0xffde9694, 0xffde9694, 0xffde9694, 0xffde9694, 0xffdb908c, 0xffdb908c, 0xffd68a7b, 
+	0xffbd776b, 0xffa5645a, 0xff8c514a, 0xff9a7484, 0xffd6cad6, 0xffd6cad6, 0xff9a7484, 0xffad4942, 
+	0xffa2423a, 0xffad4942, 0xffad4942, 0xffc54131, 0xffbd3d2f, 0xffb5392c, 0xffb5392c, 0xffaa352c, 
+	0xffaa352c, 0xffaa352c, 0xff9f3126, 0xdd652216, 0x55080400, 0x22080400, 0x11080400, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffce9684, 0xffce9684, 
+	0xffce9684, 0xffce9284, 0xffce9284, 0xffdeb6ad, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xfffffbff, 0xffd3aaa2, 0xffbd8273, 0xffbd8273, 0xffad796b, 0xffad796b, 0xffad796b, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x77190000, 0xee8c6763, 0xeec59a94, 
+	0xeec59a94, 0xeebd9e94, 0xeeba968c, 0xeeb88e84, 0xeeb88e84, 0xeeb2837b, 0xeeb2837b, 0xeeaf7c73, 
+	0xeead756b, 0xee947168, 0xeecea69c, 0xeecea69c, 0x88210800, 0x33000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0xaa31100e, 0xff812821, 0xff812821, 
+	0xff762421, 0xff812821, 0xff862824, 0xff862824, 0xff912d26, 0xff912d26, 0xff943121, 0xff9a746e, 
+	0xff9c9694, 0xff9c9694, 0xff978481, 0xff978481, 0xff978481, 0xff978481, 0xffa29391, 0xffa29391, 
+	0xffa29391, 0xffa29391, 0xffa29391, 0xffa29391, 0xffa29391, 0xffa29391, 0xffa29291, 0xffa29291, 
+	0xffa29291, 0xffa29291, 0xffb2aeaa, 0xffb2aeaa, 0xffb2aeaa, 0xffb2aeaa, 0xffceb6b2, 0xfff7fbf7, 
+	0xfff7fbf7, 0xfff7fbf7, 0xffbd9694, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff581c16, 0xff581c16, 
+	0xff4d1813, 0xff4d1813, 0xee2c0d0b, 0x66000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x88583e3f, 0xffd6928c, 0xffd6928c, 0xffd6928c, 0xffdb928f, 
+	0xffdb928f, 0xffdb928f, 0xffdb928f, 0xffdb908c, 0xffdb908c, 0xffdb908c, 0xffdb908c, 0xffd68a7b, 
+	0xffbd776b, 0xffa5645a, 0xff8c514a, 0xff9a7484, 0xffd6cad6, 0xffd6cad6, 0xff9a7484, 0xff973b31, 
+	0xffa2423a, 0xffa2423a, 0xffa2423a, 0xffbd3d2f, 0xffb5392c, 0xffb5392c, 0xffad3529, 0xffaa352c, 
+	0xffaa352c, 0xff9f3126, 0xff9f3126, 0xff943121, 0xaa37130b, 0x44080400, 0x11080400, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffce9684, 0xffce9684, 
+	0xffce9684, 0xffce9284, 0xffce9284, 0xffefdbd6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xfffffbff, 0xfffffbff, 0xffbd8273, 0xffbd8273, 0xffad796b, 0xffad796b, 0xffad796b, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x88190000, 0xee8c6763, 0xeec59a94, 
+	0xeec59a94, 0xeebd9e94, 0xeeba968c, 0xeeba968c, 0xeeb88e84, 0xeeb58a84, 0xeeb2837b, 0xeeaf7c73, 
+	0xeead756b, 0xee947168, 0xeecea69c, 0xeecea69c, 0x99210800, 0x33000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x33000000, 0xee63201b, 0xff812821, 0xff812821, 
+	0xff812821, 0xff8c2d21, 0xff912d26, 0xff912d26, 0xff912d26, 0xff912d26, 0xff943121, 0xff943121, 
+	0xff9c9694, 0xff9c9694, 0xff978481, 0xff978481, 0xff978481, 0xff9caead, 0xffa29391, 0xffa29391, 
+	0xffa29391, 0xffa29391, 0xffa29391, 0xffa29391, 0xffa29391, 0xffa29391, 0xffa29291, 0xffa29291, 
+	0xffa29291, 0xffa29291, 0xffb2aeaa, 0xffb2aeaa, 0xffb2aeaa, 0xffb2aeaa, 0xfff7fbf7, 0xfff7fbf7, 
+	0xfff7fbf7, 0xfff7fbf7, 0xff864842, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff581c16, 0xff581c16, 
+	0xff581c16, 0xff4d1813, 0xff421410, 0x99000000, 0x33000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x33211413, 0xdd976865, 0xffd6928c, 0xffd6928c, 0xffd6928c, 0xffd98e89, 
+	0xffd98e89, 0xffd98e89, 0xffd98e89, 0xffdb908c, 0xffdb908c, 0xffd98b84, 0xffd98b84, 0xffd68a7b, 
+	0xffbd776b, 0xffa5645a, 0xff8c514a, 0xff7b495a, 0xffd6cad6, 0xffd6cad6, 0xff7b495a, 0xff8c3529, 
+	0xff973b31, 0xff973b31, 0xff973b31, 0xffb5392c, 0xffb5392c, 0xffad3529, 0xffad3529, 0xffaa352c, 
+	0xff9f3126, 0xff9f3126, 0xff9f3126, 0xff943121, 0xee652216, 0x77080400, 0x33080400, 0x11000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffc58a7b, 0xffc58a7b, 
+	0xffc58a7b, 0xffbd8273, 0xffe9d0cb, 0xfffff7f7, 0xfffff7f7, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xfff7f3f7, 0xfff7f3f7, 0xffdec9c8, 0xffad756b, 0xffa57163, 0xffa57163, 0xffa57163, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x88190000, 0xee977779, 0xeed6b2b5, 
+	0xeed6b2b5, 0xeec3a39f, 0xeec09d9a, 0xeebd9694, 0xeebd9694, 0xeeb58b84, 0xeeb5847b, 0xeeb57d73, 
+	0xeeb57d73, 0xee9a6f68, 0xeecea29c, 0xeecea29c, 0x99310800, 0x33000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00080408, 0xff4a464a, 0xff8c888c, 0xff8c888c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff949294, 0xff949294, 0xff9c9a9c, 0xff9c9a9c, 
+	0xff9c9a9c, 0xff9c9a9c, 0xff9c9a9c, 0xff9c9a9c, 0xff9c9a9c, 0xff9c9a9c, 0xff9c9a9c, 0xff9c9a9c, 
+	0xff9c9a9c, 0xff9c9a9c, 0xff9c9a9c, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 
+	0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 
+	0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949694, 0xff949294, 
+	0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff949294, 
+	0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff949294, 0xff948e94, 
+	0xff948e94, 0xff948e94, 0xff948e94, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 
+	0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff8c8e8c, 0xff949694, 
+	0xff949694, 0xff949694, 0xff737573, 0xff5d5c5d, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7731100e, 0xff943129, 0xff8c2d21, 0xff8c2d21, 
+	0xff8c2d21, 0xff8c2d21, 0xff912d26, 0xff9c3129, 0xff9c3129, 0xff9c3129, 0xff943121, 0xff943121, 
+	0xff9a746e, 0xff9c9694, 0xff9caead, 0xff9caead, 0xff9caead, 0xff9caead, 0xffadc2c5, 0xffadc2c5, 
+	0xffadc2c5, 0xffadc2c5, 0xffadc2c5, 0xffadc2c5, 0xffadc2c5, 0xffadc2c5, 0xffadc2c5, 0xffadc2c5, 
+	0xffadc2c5, 0xffadc2c5, 0xffb2aeaa, 0xffb2aeaa, 0xffceefef, 0xffceefef, 0xfff7fbf7, 0xfff7fbf7, 
+	0xfff7fbf7, 0xffa5716e, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff632019, 0xff581c16, 
+	0xff581c16, 0xff4d1813, 0xff421410, 0xcc160705, 0x44000000, 0x11000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x88633d3a, 0xffd6928c, 0xffd6928c, 0xffd6928c, 0xffd6928c, 0xffd98e89, 
+	0xffd98e89, 0xffd98e89, 0xffd68a84, 0xffd98b84, 0xffd98b84, 0xffd6867b, 0xffd6867b, 0xffbd776b, 
+	0xffbd776b, 0xffa5645a, 0xff8c514a, 0xff7b495a, 0xffd6cad6, 0xffd6cad6, 0xff7b495a, 0xff8c3529, 
+	0xff8c3529, 0xff8c3529, 0xff973b31, 0xffb5392c, 0xffad3529, 0xffad3529, 0xffad3529, 0xff9f3126, 
+	0xff9f3126, 0xff942d21, 0xff942d21, 0xff943121, 0xff943121, 0xbb37130b, 0x44080400, 0x11000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffc58a7b, 0xffc58a7b, 
+	0xffc58a7b, 0xffbd8273, 0xffe9d0cb, 0xfffff7f7, 0xfffff7f7, 0xffe6d2ce, 0xffe6d2ce, 0xffe6d2ce, 
+	0xffe6d2ce, 0xfff7f3f7, 0xfff7f3f7, 0xffdec9c8, 0xffad756b, 0xffa57163, 0xffa57163, 0xffa57163, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x88190000, 0xee977779, 0xeed6b2b5, 
+	0xeed6b2b5, 0xeec5aaa5, 0xeec3a39f, 0xeebd9694, 0xeebd9694, 0xeeb58b84, 0xeeb5847b, 0xeeb5847b, 
+	0xeeb57d73, 0xee9a6f68, 0xeecea29c, 0xeecea29c, 0x99310800, 0x33000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00080408, 0xff8c888c, 0xff8c888c, 0xffcecace, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 
+	0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 
+	0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffc0c0c0, 0xffc0c0c0, 0xffced0ce, 0xffcecdce, 
+	0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcecdce, 
+	0xffcecdce, 0xffcecdce, 0xffcecdce, 0xffcbc9cb, 0xffcbc9cb, 0xffcbc9cb, 0xffcbc9cb, 0xffc5c9c5, 
+	0xffc5c9c5, 0xffc5c9c5, 0xffc5c9c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 
+	0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c5c5, 
+	0xffc5c5c5, 0xffc5c5c5, 0xffc5c5c5, 0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, 
+	0xffc5c2c5, 0xffc5c2c5, 0xffc5c2c5, 0xffc0c2c0, 0xffc0c2c0, 0xffc0c2c0, 0xffc0c2c0, 0xffc0bec0, 
+	0xffc0bec0, 0xffc0bec0, 0xffc0bec0, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 
+	0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xffb5b6b5, 
+	0xffb5b6b5, 0xffb5b6b5, 0xffb5b6b5, 0xff8c8a8c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000400, 0x00000000, 0x11000000, 0xaa31100e, 0xff943129, 0xff8c2d21, 0xff8c2d21, 
+	0xff912f24, 0xff912f24, 0xff9c3129, 0xff9c3129, 0xffa23329, 0xffa23329, 0xffad3929, 0xffad3929, 
+	0xffad3929, 0xffb59a9c, 0xffc8b5b5, 0xffc8b5b5, 0xffc8b5b5, 0xffc8b5b5, 0xffd6d2d6, 0xffd6d2d6, 
+	0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 
+	0xffd6d2d6, 0xffd6d2d6, 0xffdee3de, 0xffe9ece9, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffdbb9b5, 0xff942d21, 0xff812821, 0xff812821, 0xff762421, 0xff6b2021, 0xff682019, 0xff682019, 
+	0xff5d1c19, 0xff521819, 0xff4a1810, 0xdd190805, 0x66000000, 0x11000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x11000000, 0xcc8f514d, 0xffd6867b, 0xffd6867b, 0xffd6867b, 0xffd6867b, 0xffd6827b, 
+	0xffd6827b, 0xffd6827b, 0xffd6827b, 0xffd6867b, 0xffd6867b, 0xffd6867b, 0xffd07970, 0xffce7573, 
+	0xffce7573, 0xffb25e5a, 0xff974842, 0xff632d3a, 0xffefefef, 0xffefefef, 0xff632d3a, 0xff862b1e, 
+	0xff9a3224, 0xff9a3224, 0xffad3929, 0xffad3529, 0xffad3529, 0xff9c3126, 0xff9c3126, 0xff943121, 
+	0xff892d21, 0xff892d21, 0xff892d21, 0xff7b2821, 0xff7b2821, 0xdd551b16, 0x66080000, 0x22000000, 
+	0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffc58a7b, 0xffc58a7b, 
+	0xffc58a7b, 0xffbd8273, 0xffbd8273, 0xffbd8273, 0xffbd8273, 0xffb5796b, 0xffb5796b, 0xffb5796b, 
+	0xffb5796b, 0xffad756b, 0xffad756b, 0xffad756b, 0xffad756b, 0xffa57163, 0xffa57163, 0xffa57163, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee977779, 0xeed6b2b5, 
+	0xeed6b2b5, 0xeec5aaa5, 0xeec3a39f, 0xeec09d9a, 0xeebd9694, 0xeeb58b84, 0xeeb58b84, 0xeeb5847b, 
+	0xeeb57d73, 0xee9a6f68, 0xeecea29c, 0xeecea29c, 0xaa310800, 0x33000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00080408, 0xff8c888c, 0xffcecace, 0xffcecace, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffe6ebe6, 0xffe6e7e6, 
+	0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 
+	0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffdee3de, 
+	0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 
+	0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 
+	0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffb5b6b5, 0xff8c8a8c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000400, 0x00000000, 0x22000000, 0xdd63201b, 0xff943129, 0xff912f24, 0xff912f24, 
+	0xff912f24, 0xff912f24, 0xffa23329, 0xffa23329, 0xffa23329, 0xffa73629, 0xffad3929, 0xffad3929, 
+	0xffad3929, 0xffaf5950, 0xffc8b5b5, 0xffc8b5b5, 0xffd6dbde, 0xffd6dbde, 0xffe1dfe1, 0xffe1dfe1, 
+	0xffecebec, 0xffecebec, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 
+	0xfff1f0f1, 0xfff1f0f1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffb8736b, 0xff942d21, 0xff8c2d21, 0xff812821, 0xff762421, 0xff762421, 0xff682019, 0xff682019, 
+	0xff5d1c19, 0xff521819, 0xff4a1810, 0xee31100b, 0x88000000, 0x22000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x55472826, 0xffd67973, 0xffd37f76, 0xffd37f76, 0xffd37f76, 0xffd37f76, 0xffd6827b, 
+	0xffd6827b, 0xffd6827b, 0xffd6827b, 0xffd07970, 0xffd07970, 0xffd07970, 0xffd07970, 0xffce7573, 
+	0xffb25e5a, 0xff974842, 0xff974842, 0xff632d3a, 0xffefefef, 0xffefefef, 0xff632d3a, 0xff732419, 
+	0xff862b1e, 0xff9a3224, 0xff9a3224, 0xff9c3126, 0xff9c3126, 0xff9c3126, 0xff8c2d24, 0xff892d21, 
+	0xff892d21, 0xff7e2821, 0xff7e2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0x992f0d0b, 0x33000000, 
+	0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffc58a7b, 0xffc58a7b, 
+	0xffc58a7b, 0xffbd8273, 0xffbd8273, 0xffbd8273, 0xffbd8273, 0xffb5796b, 0xffb5796b, 0xffb5796b, 
+	0xffb5796b, 0xffad756b, 0xffad756b, 0xffad756b, 0xffad756b, 0xffa57163, 0xffa57163, 0xffa57163, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee977779, 0xeed6b2b5, 
+	0xeed6b2b5, 0xeec5aaa5, 0xeec5aaa5, 0xeec09d9a, 0xeebd9694, 0xeeb5928c, 0xeeb58b84, 0xeeb5847b, 
+	0xeeb5847b, 0xee9a6f68, 0xeecea29c, 0xeecea29c, 0xaa310800, 0x33000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00080408, 0xff8c888c, 0xffcecace, 0xffcecace, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffe6ebe6, 0xffe6e7e6, 
+	0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 
+	0xffe6e7e6, 0xffe6e7e6, 0xffe6e7e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffe6e3e6, 0xffdee3de, 
+	0xffdee3de, 0xffdee3de, 0xffdee3de, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 
+	0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedfde, 
+	0xffdedfde, 0xffdedfde, 0xffdedfde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffdedbde, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6dbd6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffb5b6b5, 0xff8c8a8c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000400, 0x00000000, 0x5531100e, 0xff943129, 0xff943129, 0xff912f24, 0xff912f24, 
+	0xff973226, 0xff973226, 0xffa23329, 0xffa23329, 0xffa73629, 0xffa73629, 0xffad3929, 0xffad3929, 
+	0xffad3929, 0xffad3929, 0xffba8f8c, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffecebec, 0xffecebec, 
+	0xfff7f7f7, 0xfff7f7f7, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xfff1f0f1, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdbb9b5, 
+	0xff942d21, 0xff942d21, 0xff8c2d21, 0xff812821, 0xff812821, 0xff762421, 0xff682019, 0xff682019, 
+	0xff682019, 0xff5d1c19, 0xff4a1810, 0xff4a1810, 0xaa000000, 0x33000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x88472826, 0xffd67973, 0xffd07870, 0xffd07870, 0xffd07870, 0xffd07870, 0xffd37b73, 
+	0xffd37b73, 0xffd37b73, 0xffd0746b, 0xffd07970, 0xffcb6d65, 0xffcb6d65, 0xffcb6d65, 0xffb25e5a, 
+	0xffb25e5a, 0xff974842, 0xff7b3129, 0xff632d3a, 0xffefefef, 0xffefefef, 0xff632d3a, 0xff732419, 
+	0xff862b1e, 0xff9a3224, 0xff9a3224, 0xff9c3126, 0xff8c2d24, 0xff8c2d24, 0xff8c2d24, 0xff7e2821, 
+	0xff7e2821, 0xff7e2821, 0xff732421, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xbb2f0d0b, 0x44000000, 
+	0x22000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9d5d0, 0xffbd8273, 0xffbd8273, 
+	0xffbd8273, 0xffad756b, 0xffad756b, 0xffad756b, 0xffad756b, 0xff9c6d63, 0xff9c6d63, 0xff9c6d63, 
+	0xff9c6d63, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6d63, 0xff9c6d63, 0xff9c6d63, 
+	0xffdececb, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee97827e, 0xeed6c2bd, 
+	0xeed6c2bd, 0xeec5b2b5, 0xeec3aaaa, 0xeec0a29f, 0xeebd9a94, 0xeeba8f86, 0xeeba8f86, 0xeeb88881, 
+	0xeeb5827b, 0xee976c6b, 0xeec59e9c, 0xeec59e9c, 0xaa3a0808, 0x33000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000400, 0xff7e807e, 0xffbdbebd, 0xffbdbebd, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 
+	0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 
+	0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffd6d7d6, 0xffd6d7d6, 
+	0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d7d6, 0xffd6d2d6, 
+	0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffd6d2d6, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 
+	0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecece, 0xffcecace, 
+	0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 0xffcecace, 
+	0xffcecace, 0xffcecace, 0xffcecace, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 
+	0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 
+	0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffc5c6c5, 0xffbdbebd, 
+	0xffbdbebd, 0xffbdbebd, 0xffbdbebd, 0xff848284, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000400, 0x00000000, 0x7731100e, 0xff943129, 0xff943129, 0xff973226, 0xff973226, 
+	0xff973226, 0xff973226, 0xffa23329, 0xffa73629, 0xffa73629, 0xffa73629, 0xffad3929, 0xffad3929, 
+	0xffad3929, 0xffad3929, 0xffad6963, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffecebec, 0xfff7f7f7, 
+	0xfff7f7f7, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff942d21, 
+	0xff942d21, 0xff942d21, 0xff8c2d21, 0xff8c2d21, 0xff812821, 0xff812821, 0xff732419, 0xff682019, 
+	0xff682019, 0xff5d1c19, 0xff4a1810, 0xff4a1810, 0xbb190805, 0x44000000, 0x11000000, 0x00000000, 
+	0x11000000, 0xaa8f514d, 0xffd67973, 0xffce716b, 0xffce716b, 0xffce716b, 0xffce716b, 0xffce6d63, 
+	0xffce6d63, 0xffce6d63, 0xffce6d63, 0xffcb6d65, 0xffcb6d65, 0xffc5615a, 0xffc5615a, 0xffb25e5a, 
+	0xff974842, 0xff974842, 0xff7b3129, 0xff632d3a, 0xffefefef, 0xffefefef, 0xff632d3a, 0xff732419, 
+	0xff732419, 0xff862b1e, 0xff862b1e, 0xff8c2d24, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff732421, 
+	0xff732421, 0xff732421, 0xff732421, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xdd551b16, 0x55000000, 
+	0x22000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9d5d0, 0xffbd8273, 0xffbd8273, 
+	0xffbd8273, 0xffad756b, 0xffad756b, 0xffad756b, 0xffad756b, 0xff9c6d63, 0xff9c6d63, 0xff9c6d63, 
+	0xff9c6d63, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6d63, 0xff9c6d63, 0xff9c6d63, 
+	0xffdececb, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee97827e, 0xeed6c2bd, 
+	0xeed6c2bd, 0xeec5b2b5, 0xeec3aaaa, 0xeec0a29f, 0xeebd9a94, 0xeebd968c, 0xeeba8f86, 0xeeb88881, 
+	0xeeb5827b, 0xee976c6b, 0xeec59e9c, 0xeec59e9c, 0xaa3a0808, 0x33000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000400, 0xff3f423f, 0xff7e807e, 0xff7e807e, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 
+	0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 
+	0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff8f8f8f, 0xff8f8f8f, 
+	0xff8f8f8f, 0xff8f8f8f, 0xff8f8f8f, 0xff8f8f8f, 0xff8f8f8f, 0xff8f8f8f, 0xff8f8f8f, 0xff8f8e8f, 
+	0xff8f8e8f, 0xff8f8e8f, 0xff8f8e8f, 0xff8f8c8f, 0xff8f8c8f, 0xff8f8c8f, 0xff8f8c8f, 0xff898a89, 
+	0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 
+	0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898a89, 0xff898789, 
+	0xff898789, 0xff898789, 0xff898789, 0xff898789, 0xff898789, 0xff898789, 0xff898789, 0xff898789, 
+	0xff898789, 0xff898789, 0xff898789, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 
+	0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 
+	0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff848484, 0xff7e7f7e, 
+	0xff7e7f7e, 0xff7e7f7e, 0xff7e7f7e, 0xff585658, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x8834120e, 0xff9c3529, 0xff9c3529, 0xff9f3229, 0xff9f3229, 
+	0xff9f3229, 0xffa53529, 0xffaa362f, 0xffaf372c, 0xffaf372c, 0xffaf372c, 0xffb53931, 0xffb53931, 
+	0xffb83a2f, 0xffb53931, 0xffb53d31, 0xffcba39f, 0xffd6d7d6, 0xffd6d7d6, 0xffe6e3e6, 0xffefefef, 
+	0xfff7fbf7, 0xfff7fbf7, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffd69e9c, 0xff9c3529, 
+	0xff9c3529, 0xff9c3529, 0xff942e21, 0xff8c2b21, 0xff8c2b21, 0xff842821, 0xff7b2421, 0xff651f1b, 
+	0xff651f1b, 0xff5a1c19, 0xff521810, 0xff521810, 0xcc1b0805, 0x55000000, 0x11000000, 0x00000000, 
+	0x11000000, 0xcc8f4c42, 0xffd67163, 0xffce6963, 0xffce6963, 0xffce6963, 0xffce6963, 0xffc5655a, 
+	0xffc5655a, 0xffc5655a, 0xffc5655a, 0xffc55952, 0xffc55952, 0xffc55952, 0xffc55952, 0xffbd493a, 
+	0xffbd493a, 0xff7e3126, 0xff7e3126, 0xff190808, 0xffffffff, 0xffffffff, 0xff190808, 0xff581b16, 
+	0xff842821, 0xff842821, 0xff842821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff6b2019, 
+	0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xff6b2019, 0xee471610, 0x55000000, 
+	0x22000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9d5d0, 0xffffffff, 0xffbd8273, 
+	0xffbd8273, 0xffad756b, 0xffad756b, 0xffad756b, 0xffad756b, 0xff9c6d63, 0xff9c6d63, 0xff9c6d63, 
+	0xff9c6d63, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6963, 0xff9c6d63, 0xff9c6d63, 0xffffffff, 
+	0xffdececb, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee97827e, 0xeed6c2bd, 
+	0xeed6c2bd, 0xeec5b2b5, 0xeec3aaaa, 0xeec0a29f, 0xeebd9a94, 0xeebd968c, 0xeeba8f86, 0xeeb88881, 
+	0xeeb5827b, 0xee976c6b, 0xeec59e9c, 0xeec59e9c, 0xaa3a0808, 0x33000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x9934120e, 0xff9c3529, 0xff9c3529, 0xff9f3229, 0xff9c3129, 
+	0xffa23329, 0xffa53529, 0xffaf372c, 0xffaf372c, 0xffb53929, 0xffb53929, 0xffb53931, 0xffb83a2f, 
+	0xffb53931, 0xffb83a2f, 0xffb53d31, 0xffb53d31, 0xffd6d7d6, 0xffd6d7d6, 0xffe6e3e6, 0xffefefef, 
+	0xffefefef, 0xfff7fbf7, 0xfffcfcfc, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff9c3529, 0xff9c3529, 
+	0xff9c3529, 0xff9c3529, 0xff942e21, 0xff942e21, 0xff8c2b21, 0xff842821, 0xff7b2421, 0xff70221e, 
+	0xff651f1b, 0xff5a1c19, 0xff521810, 0xff521810, 0xcc1b0805, 0x55000000, 0x11000000, 0x00000000, 
+	0x11000000, 0x22000000, 0x44000000, 0x66000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 
+	0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 
+	0x88000000, 0x99000000, 0xaa000000, 0xcc190808, 0xffffffff, 0xffffffff, 0xbb190808, 0xaa000000, 
+	0x99000000, 0x88000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 
+	0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x77000000, 0x66000000, 0x44000000, 
+	0x22000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9d5d0, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffdececb, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee97827e, 0xeed6c2bd, 
+	0xeed6c2bd, 0xeec5b2b5, 0xeec3aaaa, 0xeec0a29f, 0xeebd9a94, 0xeebd968c, 0xeeba8f86, 0xeeb88881, 
+	0xeeb5827b, 0xee976c6b, 0xeec59e9c, 0xeec59e9c, 0xaa3a0808, 0x33000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 
+	0x00000400, 0x00000400, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0xaa34120e, 0xff9c3529, 0xff9c3529, 0xff9f3229, 0xff9f3229, 
+	0xffa53529, 0xffa53529, 0xffaf372c, 0xffb53929, 0xffb53929, 0xffb53929, 0xffb83a2f, 0xffb83a2f, 
+	0xffb83a2f, 0xffb83a2f, 0xffb53d31, 0xffb53d31, 0xffc07068, 0xffd6d7d6, 0xffded7de, 0xffe6e3e6, 
+	0xffefefef, 0xffefefef, 0xfffafafa, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffc87d76, 0xff9c3529, 0xff9c3529, 
+	0xff9c3529, 0xff9c3529, 0xff942e21, 0xff942e21, 0xff8c2b21, 0xff842821, 0xff7b2421, 0xff70221e, 
+	0xff651f1b, 0xff651f1b, 0xff521810, 0xff521810, 0xdd1b0805, 0x66000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x11000000, 0x22000000, 0x33000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 
+	0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 
+	0x55000000, 0x66000000, 0x88000000, 0xaa190808, 0xffffffff, 0xffffffff, 0xaa190808, 0x88000000, 
+	0x66000000, 0x55000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 
+	0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x44000000, 0x33000000, 0x22000000, 
+	0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee9c827e, 0xeedec2bd, 
+	0xeedec2bd, 0xeec5b6b5, 0xeec3aead, 0xeec0a6a5, 0xeebd9e9c, 0xeebd9694, 0xeeba8f8c, 0xeeb88884, 
+	0xeeb5827b, 0xee9c6d6b, 0xeece9e9c, 0xeece9e9c, 0xaa3a0c08, 0x33000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x11000000, 0xbb68231b, 0xff9c3529, 0xff9c3529, 0xffa53529, 0xffa53529, 
+	0xffa53529, 0xffa53529, 0xffb53929, 0xffb53929, 0xffb53929, 0xffb53929, 0xffb83a2f, 0xffb83a2f, 
+	0xffba3b2c, 0xffb83a2f, 0xffb53d31, 0xffb53d31, 0xffb53d31, 0xffcba39f, 0xffded7de, 0xffe6e3e6, 
+	0xffe6e3e6, 0xffefefef, 0xfff7f7f7, 0xfffcfcfc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffe4beba, 0xffad3d31, 0xff9c3529, 0xff9c3529, 
+	0xff9c3529, 0xff9c3529, 0xff9c3121, 0xff942e21, 0xff8c2b21, 0xff842821, 0xff7b2421, 0xff70221e, 
+	0xff651f1b, 0xff651f1b, 0xff521810, 0xff521810, 0xdd1b0805, 0x66000000, 0x22000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x22000000, 0x44000000, 0x66000000, 0x99190808, 0xffffffff, 0xffffffff, 0x88190808, 0x66000000, 
+	0x44000000, 0x22000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee9c827e, 0xeedec2bd, 
+	0xeedec2bd, 0xeec5b6b5, 0xeec3aead, 0xeec0a6a5, 0xeebd9e9c, 0xeebd9694, 0xeeba8f8c, 0xeeb88884, 
+	0xeeb5827b, 0xee9c6d6b, 0xeece9e9c, 0xeece9e9c, 0xaa3a0c08, 0x33000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000400, 0x00000000, 0x9937120e, 0xffa53529, 0xffa53529, 0xffa53529, 0xffa53529, 
+	0xffa53529, 0xffaa3729, 0xffb53929, 0xffb53a2c, 0xffb53b2f, 0xffb53b2f, 0xffbd3b31, 0xffbd3b31, 
+	0xffbd3b31, 0xffbd3b31, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffbd6152, 0xffdedbde, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xfff7f7f7, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xfffffbff, 0xfffffbff, 0xffc87970, 0xffad3929, 0xffa53529, 0xffa53529, 
+	0xffa53529, 0xff9c3129, 0xff943129, 0xff8f2e26, 0xff892b24, 0xff842821, 0xff732421, 0xff6b221e, 
+	0xff631f1b, 0xff631f1b, 0xff521c10, 0xff37130b, 0xdd1b0905, 0x66000000, 0x22000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11000000, 0x33000000, 0x55000000, 0x88190808, 0xfffffbff, 0xfffffbff, 0x88190808, 0x55000000, 
+	0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee9c827e, 0xeedec2bd, 
+	0xeedec2bd, 0xeec5b6b5, 0xeec3aead, 0xeec0a6a5, 0xeebd9e9c, 0xeebd9694, 0xeeba8f8c, 0xeeb88884, 
+	0xeeb5827b, 0xee9c6d6b, 0xeece9e9c, 0xeece9e9c, 0xaa3a0c08, 0x33000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000400, 0x00000000, 0x8837120e, 0xffa53529, 0xffa53529, 0xffa53529, 0xffa53529, 
+	0xffa73629, 0xffad3929, 0xffb53a2c, 0xffb53a2c, 0xffb53a2c, 0xffb53a2c, 0xffbd3b31, 0xffbd3b31, 
+	0xffbd3b31, 0xffbd3b31, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffd3a9a7, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffefefef, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xfffffbff, 0xffe4bab8, 0xffad3929, 0xffad3929, 0xffa53529, 0xffa53529, 
+	0xffa53529, 0xff9c3129, 0xff943129, 0xff8f2e26, 0xff892b24, 0xff842821, 0xff732421, 0xff6b221e, 
+	0xff631f1b, 0xff5a1c19, 0xff521c10, 0xff37130b, 0xcc1b0905, 0x66000000, 0x22000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11000000, 0x33000000, 0x55000000, 0x88190808, 0xfffffbff, 0xfffffbff, 0x88190808, 0x55000000, 
+	0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee9c827e, 0xeedec2bd, 
+	0xeedec2bd, 0xeec5b6b5, 0xeec3aead, 0xeec0a6a5, 0xeebd9e9c, 0xeebd9694, 0xeeba8f8c, 0xeeb88884, 
+	0xeeb5827b, 0xee9c6d6b, 0xeece9e9c, 0xeece9e9c, 0xaa3a0c08, 0x33000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000400, 0x00000000, 0x7737120e, 0xffa53529, 0xffa53529, 0xffa73629, 0xffa73629, 
+	0xffa53529, 0xffad3929, 0xffb53929, 0xffb53a2c, 0xffb53a2c, 0xffb53b2f, 0xffbd3a31, 0xffbd3b31, 
+	0xffbd3b31, 0xffbd3b31, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffbd453a, 0xffdedbde, 
+	0xffdedbde, 0xffdedbde, 0xffefefef, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xfffffbff, 0xffad3929, 0xffad3929, 0xffad3929, 0xffa53529, 0xffa53529, 
+	0xffa53529, 0xff9f3229, 0xff943129, 0xff8f2e26, 0xff892b24, 0xff842821, 0xff732421, 0xff6b221e, 
+	0xff631f1b, 0xff5a1c19, 0xff521c10, 0xff37130b, 0xcc1b0905, 0x66000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x22000000, 0x44000000, 0x66000000, 0x99190808, 0xfffffbff, 0xfffffbff, 0x99190808, 0x66000000, 
+	0x44000000, 0x22000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee977f79, 0xeed6beb5, 
+	0xeed6beb5, 0xeec5b2b5, 0xeec3abaa, 0xeec0a59f, 0xeebd9e94, 0xeebd968c, 0xeeba8f86, 0xeeb88881, 
+	0xeeb5827b, 0xee9a6d65, 0xeece9e94, 0xeece9e94, 0xaa310c08, 0x33000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000400, 0x00000000, 0x6637120e, 0xffa53529, 0xffa53529, 0xffa53529, 0xffa53529, 
+	0xffa53529, 0xffaa3729, 0xffb53929, 0xffb53a2c, 0xffb53b2f, 0xffb53b2f, 0xffbd3b31, 0xffbd3b31, 
+	0xffbd3d31, 0xffbd3b31, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffbd453a, 0xffc87770, 
+	0xffdedbde, 0xffdedbde, 0xffe6e7e6, 0xfff7f7f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffc87970, 0xffad3929, 0xffad3929, 0xffad3929, 0xffa53529, 0xffa53529, 
+	0xffa53529, 0xff9f3229, 0xff943129, 0xff8f2e26, 0xff892b24, 0xff842821, 0xff732421, 0xff6b221e, 
+	0xff631f1b, 0xff5a1c19, 0xff521c10, 0xff37130b, 0xbb000000, 0x55000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x7745221e, 0xffce655a, 0xffc56152, 0xffc56152, 0xffc56152, 0xffc56152, 0xffc5594a, 
+	0xffc5594a, 0xffc5594a, 0xffc5594a, 0xffbd5142, 0xffbd5142, 0xffbd5142, 0xffbd5142, 0xffce4531, 
+	0xff892e21, 0xff892e21, 0xff892e21, 0xff190808, 0xfffffbff, 0xfffffbff, 0xff190808, 0xff581b16, 
+	0xff581b16, 0xff842821, 0xff842821, 0xff732419, 0xff732419, 0xff732419, 0xff732419, 0xff632019, 
+	0xff632019, 0xff632019, 0xff632019, 0xff632019, 0xff632019, 0xff632019, 0x88210b08, 0x22000000, 
+	0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee977f79, 0xeed6beb5, 
+	0xeed6beb5, 0xeec5b2b5, 0xeec3abaa, 0xeec0a59f, 0xeebd9e94, 0xeebd968c, 0xeeba8f86, 0xeeb88881, 
+	0xeeb5827b, 0xee9a6d65, 0xeece9e94, 0xeece9e94, 0xaa310c08, 0x33000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00080000, 0x33080000, 0xee9c3529, 0xff9c3529, 0xffa53529, 0xffa53529, 
+	0xffa73629, 0xffad3929, 0xffaf392c, 0xffb2392f, 0xffb2392f, 0xffb2392f, 0xffba3b2f, 0xffba3b2f, 
+	0xffba3b2f, 0xffba3b2f, 0xffba3b31, 0xffb83a31, 0xffba3b31, 0xffba3b31, 0xffb53931, 0xffb53931, 
+	0xffcba7a5, 0xffd6dfde, 0xffe6e3e6, 0xfff7f6f7, 0xffffffff, 0xffffffff, 0xfffffbff, 0xfffffbff, 
+	0xfffffbff, 0xfffffbff, 0xffb53d31, 0xffaf372c, 0xffaf372c, 0xffaf372c, 0xffa53529, 0xffa23329, 
+	0xff9f3229, 0xff9c3129, 0xff943121, 0xff8c2d21, 0xff8c2d21, 0xff842821, 0xff732421, 0xff68201b, 
+	0xff5d1c16, 0xff5d1c16, 0xff4a1810, 0xff31100b, 0xaa000000, 0x44000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x55451f1b, 0xffce5d52, 0xffc5594a, 0xffc5594a, 0xffc5594a, 0xffc5594a, 0xffc5554a, 
+	0xffc5554a, 0xffc04c3f, 0xffc04c3f, 0xffc5453a, 0xffc5453a, 0xffba3e34, 0xffba3e34, 0xffad3529, 
+	0xffad3529, 0xff76271e, 0xff5a2019, 0xff5a2d3a, 0xffe6e7e6, 0xffe6e7e6, 0xff5a2d3a, 0xff4a1819, 
+	0xff652019, 0xff652019, 0xff732419, 0xff632019, 0xff632019, 0xff632019, 0xff632019, 0xff632019, 
+	0xff5d1e16, 0xff5d1e16, 0xff5d1e16, 0xff5a1c19, 0xff5a1c19, 0xff5a1c19, 0x88240908, 0x33000000, 
+	0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee977f79, 0xeed6beb5, 
+	0xeed6beb5, 0xeec5b2b5, 0xeec3abaa, 0xeec0a59f, 0xeebd9e94, 0xeebd968c, 0xeeba8f86, 0xeeb88881, 
+	0xeeb5827b, 0xee9a6d65, 0xeece9e94, 0xeece9e94, 0xaa310c08, 0x33000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00080000, 0x11080000, 0xcc6b231b, 0xff9c3529, 0xffa53529, 0xffa53529, 
+	0xffa53529, 0xffaa3729, 0xffaf392c, 0xffb2392f, 0xffb2392f, 0xffb2392f, 0xffb83a2c, 0xffba3b2f, 
+	0xffba3b2f, 0xffba3b2f, 0xffb83a31, 0xffb83a31, 0xffba3b31, 0xffba3b31, 0xffb53931, 0xffb53931, 
+	0xffc0706b, 0xffd6dfde, 0xffe6e3e6, 0xfff7f6f7, 0xffffffff, 0xffffffff, 0xfffffbff, 0xfffffbff, 
+	0xfffffbff, 0xffc87770, 0xffaf372c, 0xffaf372c, 0xffaf372c, 0xffad3529, 0xffa53529, 0xffa23329, 
+	0xffa23329, 0xff9c3129, 0xff943121, 0xff8c2d21, 0xff8c2d21, 0xff842821, 0xff732421, 0xff68201b, 
+	0xff5d1c16, 0xff5d1c16, 0xff4a1810, 0xee31100b, 0x99000000, 0x33000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x22000000, 0xcc893e37, 0xffbd5042, 0xffbd5042, 0xffbd5042, 0xffbd5042, 0xffc04c3f, 
+	0xffc04c3f, 0xffba4234, 0xffba4234, 0xffba3e34, 0xffba3e34, 0xffaf372f, 0xffaf372f, 0xffad3529, 
+	0xff912e24, 0xff76271e, 0xff5a2019, 0xff5a2d3a, 0xffe6e7e6, 0xffe6e7e6, 0xff5a2d3a, 0xff4a1819, 
+	0xff581c19, 0xff652019, 0xff652019, 0xff632019, 0xff632019, 0xff5a1e16, 0xff5a1e16, 0xff581b13, 
+	0xff581b13, 0xff581b13, 0xff581b13, 0xff5a1c19, 0xff5a1c19, 0xdd3f1310, 0x77080000, 0x44000000, 
+	0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x99190000, 0xee977f79, 0xeed6beb5, 
+	0xeed6beb5, 0xeec3abaa, 0xeec3abaa, 0xeec0a59f, 0xeebd9e94, 0xeebd968c, 0xeeba8f86, 0xeeb88881, 
+	0xeeb5827b, 0xee9a6d65, 0xeece9e94, 0xeece9e94, 0xaa310c08, 0x33000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00080000, 0x00080000, 0x993a120e, 0xff9c3529, 0xffa53529, 0xffa53529, 
+	0xffa53529, 0xffa73629, 0xffaf392c, 0xffaf392c, 0xffb2392f, 0xffb2392f, 0xffb83a2c, 0xffba3b2f, 
+	0xffb83a2c, 0xffba3b2f, 0xffb83a31, 0xffba3b31, 0xffb83a31, 0xffba3b31, 0xffb53931, 0xffb53931, 
+	0xffb53931, 0xffcba7a5, 0xffe6e3e6, 0xfff7f6f7, 0xffffffff, 0xffffffff, 0xfffffbff, 0xfffffbff, 
+	0xffe4b9b8, 0xffad3529, 0xffaf372c, 0xffaf372c, 0xffad3529, 0xffad3529, 0xffa53529, 0xffa23329, 
+	0xff9f3229, 0xff9c3129, 0xff8c2d21, 0xff8c2d21, 0xff842821, 0xff7b2421, 0xff732421, 0xff68201b, 
+	0xff5d1c16, 0xff521810, 0xff4a1810, 0xdd190805, 0x77000000, 0x22000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x11000000, 0x99451f1b, 0xffbd5042, 0xffb5463a, 0xffb5463a, 0xffb5463a, 0xffba4234, 
+	0xffba4234, 0xffb53929, 0xffb53929, 0xffaf372f, 0xffaf372f, 0xffaf372f, 0xffaf372f, 0xffad3529, 
+	0xff912e24, 0xff76271e, 0xff5a2019, 0xff5a2d3a, 0xffe6e7e6, 0xffe6e7e6, 0xff5a2d3a, 0xff4a1819, 
+	0xff4a1819, 0xff581c19, 0xff652019, 0xff5a1e16, 0xff5a1e16, 0xff521b13, 0xff521b13, 0xff581b13, 
+	0xff581b13, 0xff581b13, 0xff581b13, 0xff5a1c19, 0xff5a1c19, 0xcc240908, 0x77080000, 0x33000000, 
+	0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x33000000, 0x88290400, 0xee977873, 0xeeceb2ad, 
+	0xeeceb2ad, 0xeec5aead, 0xeec3a6a2, 0xeec09e97, 0xeec09e97, 0xeebd928c, 0xeeba8b84, 0xeeb8847b, 
+	0xeeb8847b, 0xeeb58a84, 0xeeb58a84, 0xeeb58a84, 0xaa210400, 0x33000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00080000, 0x00080000, 0x66080000, 0xff9c3529, 0xffa53529, 0xffa53529, 
+	0xffa53529, 0xffa53529, 0xffaf392c, 0xffaf392c, 0xffaf392c, 0xffb2392f, 0xffb83a2c, 0xffb83a2c, 
+	0xffb83a2c, 0xffb83a2c, 0xffb53931, 0xffb83a31, 0xffb83a31, 0xffb53931, 0xffb53931, 0xffb53931, 
+	0xffb53931, 0xffc0706b, 0xffe6e3e6, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffbff, 0xfffffbff, 
+	0xffc87770, 0xffad3529, 0xffaf372c, 0xffaf372c, 0xffad3529, 0xffad3529, 0xffa53529, 0xffa23329, 
+	0xff9c3129, 0xff9c3129, 0xff8c2d21, 0xff8c2d21, 0xff842821, 0xff7b2421, 0xff68201b, 0xff5d1c16, 
+	0xff521810, 0xff521810, 0xff31100b, 0xbb000000, 0x66000000, 0x22000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x11000000, 0x44000000, 0xddad3d31, 0xffb5463a, 0xffad3d31, 0xffad3d31, 0xffb53929, 
+	0xffb53929, 0xffb53929, 0xffb53929, 0xffaf372f, 0xffaf372f, 0xffa53129, 0xffa53129, 0xff912e24, 
+	0xff912e24, 0xff5a2019, 0xff5a2019, 0xff5a2d3a, 0xffe6e7e6, 0xffe6e7e6, 0xff5a2d3a, 0xff4a1819, 
+	0xff4a1819, 0xff4a1819, 0xff581c19, 0xff521b13, 0xff521b13, 0xff521b13, 0xff4a1810, 0xff521810, 
+	0xff521810, 0xff521810, 0xff521810, 0xff5a1c19, 0xee3f1310, 0x99080000, 0x55080000, 0x22000000, 
+	0x11000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x88290400, 0xee977873, 0xeeceb2ad, 
+	0xeeceb2ad, 0xeec3a6a2, 0xeec3a6a2, 0xeec09e97, 0xeebd968c, 0xeebd928c, 0xeeba8b84, 0xeeb8847b, 
+	0xeeb8847b, 0xeeb58a84, 0xeeb58a84, 0xeeb58a84, 0x99210400, 0x33000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x22000000, 0xdd6b2019, 0xff9c3129, 0xff9c3129, 
+	0xff9c3129, 0xff9c3129, 0xffa23329, 0xffa73629, 0xffa73629, 0xffa73629, 0xffb53929, 0xffb53929, 
+	0xffb53929, 0xffb53929, 0xffaf3729, 0xffb53929, 0xffaf3729, 0xffb53929, 0xffaf3729, 0xffb53929, 
+	0xffaf3729, 0xffaf3729, 0xffdbb9b5, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfffff7f7, 0xffe1b7b2, 
+	0xffa53929, 0xffa53929, 0xffa53529, 0xffa53529, 0xffa53529, 0xffa53529, 0xff9c3129, 0xff9c3129, 
+	0xff9c3129, 0xff942e26, 0xff8c2d21, 0xff8c2d21, 0xff7e271e, 0xff70221b, 0xff632019, 0xff632019, 
+	0xff471710, 0xff471710, 0xee290c08, 0xaa000000, 0x44000000, 0x11000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x11000000, 0x99451710, 0xffbd3d31, 0xffbd3d31, 0xffbd3d31, 0xffad3929, 
+	0xffad3929, 0xffa73629, 0xffa73629, 0xffa53529, 0xffa53529, 0xff9a3126, 0xff9a3126, 0xff842d29, 
+	0xff762824, 0xff5a2019, 0xff5a2019, 0xff6b495a, 0xffd6cad6, 0xffd6cad6, 0xff6b495a, 0xff4d1c1e, 
+	0xff4a1410, 0xff4d1c1e, 0xff4d1c1e, 0xff4a1810, 0xff4a1810, 0xff4a1810, 0xff4a1810, 0xff4a1810, 
+	0xff4a1810, 0xff4a1810, 0xff4a1810, 0xff4a1810, 0xcc190805, 0x77000000, 0x44000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x88290400, 0xee603e3a, 0xeeceb2ad, 
+	0xeeceb2ad, 0xeec3a6a2, 0xeec09e97, 0xeec09e97, 0xeebd968c, 0xeebd928c, 0xeeba8b84, 0xeeb8847b, 
+	0xeeb57d73, 0xeeb58a84, 0xeeb58a84, 0xeeb58a84, 0x99210400, 0x33000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x77240b08, 0xff9c3129, 0xff9c3129, 
+	0xff9c3129, 0xff9c3129, 0xffa23329, 0xffa23329, 0xffa73629, 0xffa73629, 0xffb53929, 0xffad3629, 
+	0xffad3629, 0xffad3629, 0xffaf3729, 0xffaf3729, 0xffaf3729, 0xffaf3729, 0xffaf3729, 0xffaf3729, 
+	0xffaf3729, 0xffaf3729, 0xffa53d31, 0xfff7f7f7, 0xfff7f7f7, 0xfff7f7f7, 0xfffff7f7, 0xffa53929, 
+	0xffa53929, 0xffa53929, 0xffa53529, 0xffa53529, 0xff9f3329, 0xff9f3329, 0xff9c3129, 0xff9c3129, 
+	0xff942e26, 0xff942e26, 0xff8c2d21, 0xff8c2d21, 0xff7e271e, 0xff70221b, 0xff632019, 0xff471710, 
+	0xff471710, 0xff471710, 0xcc0e0403, 0x88000000, 0x33000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x11000000, 0x44080400, 0xcc812a21, 0xffbd3d31, 0xffbd3d31, 0xffa73629, 
+	0xffa73629, 0xffa73629, 0xffa23329, 0xff9a3126, 0xff9a3126, 0xff9a3126, 0xff8f2d24, 0xff762824, 
+	0xff68241e, 0xff5a2019, 0xff5a2019, 0xff6b495a, 0xffd6cad6, 0xffd6cad6, 0xff6b495a, 0xff4d1c1e, 
+	0xff4a1410, 0xff4a1410, 0xff4d1c1e, 0xff4a1810, 0xff4a1810, 0xff471710, 0xff471710, 0xff4a1810, 
+	0xff4a1810, 0xff4a1810, 0xff4a1810, 0xee31100b, 0x99000000, 0x55000000, 0x33000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x77290400, 0xee603e3a, 0xeeceb2ad, 
+	0xeeceb2ad, 0xeec3a6a2, 0xeec09e97, 0xeebd968c, 0xeebd968c, 0xeeba8b84, 0xeeba8b84, 0xeeb8847b, 
+	0xeeb57d73, 0xeeb58a84, 0xeeb58a84, 0xeeb58a84, 0x99210400, 0x33000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x22000000, 0xcc6e221e, 0xff9c3129, 
+	0xff9c3129, 0xff9c3129, 0xff9c3129, 0xffa23329, 0xffa23329, 0xffa73629, 0xffad3629, 0xffad3629, 
+	0xffad3629, 0xffad3629, 0xffaf3729, 0xffaa3629, 0xffa53529, 0xffaa3629, 0xffa53529, 0xffaf3729, 
+	0xffaa3629, 0xffa53529, 0xffa53d31, 0xffc07b73, 0xfff7f7f7, 0xfff7f7f7, 0xffc3786e, 0xffa53929, 
+	0xffa53929, 0xffa53929, 0xff9f3329, 0xff9f3329, 0xff9f3329, 0xff9a3229, 0xff9c3129, 0xff942e26, 
+	0xff942e26, 0xff942e26, 0xff7e271e, 0xff7e271e, 0xff70221b, 0xff70221b, 0xff632019, 0xff471710, 
+	0xff471710, 0xee2c0d08, 0xaa000000, 0x55000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x11080400, 0x77451710, 0xee812a21, 0xffbd3d31, 0xffa73629, 
+	0xffa23329, 0xffa23329, 0xffa23329, 0xff9a3126, 0xff9a3126, 0xff8f2d24, 0xff8f2d24, 0xff762824, 
+	0xff68241e, 0xff5a2019, 0xff68241e, 0xff6b495a, 0xffb29fad, 0xffb29fad, 0xff8f7484, 0xff50242c, 
+	0xff4a1410, 0xff4a1410, 0xff4a1410, 0xff471710, 0xff471710, 0xff451610, 0xff451610, 0xff4a1810, 
+	0xff4a1810, 0xff4a1810, 0xee3c130e, 0xbb190805, 0x66000000, 0x44000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9dfdb, 0xfff7ffff, 0xffce9e94, 
+	0xffce9e94, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffd6a294, 0xffd6a294, 
+	0xffd39e91, 0xffce9e94, 0xffce9e94, 0xffce988c, 0xffce988c, 0xffc58e7b, 0xffc58e7b, 0xfff7ffff, 
+	0xffe6d9d3, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x77290400, 0xdd5d3731, 0xeec59e94, 
+	0xeec59e94, 0xeebd9e9c, 0xeebd9e9c, 0xeeba9794, 0xeeb8908c, 0xeeb58a84, 0xeeb2837b, 0xeeaf7c73, 
+	0xeeaf7c73, 0xee9c7168, 0xeed6a69c, 0xee9c7168, 0x88290800, 0x22000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x66100408, 0xee6e221e, 
+	0xff9c3129, 0xff9c3129, 0xff9c3129, 0xff9c3129, 0xff9c3129, 0xffa23329, 0xffa53329, 0xffa53329, 
+	0xffa53329, 0xffa53329, 0xffa53529, 0xffa53529, 0xffa53529, 0xffa53529, 0xffa53529, 0xffa53529, 
+	0xffa53529, 0xffa53529, 0xffa53d31, 0xffa53d31, 0xfff7f7f7, 0xfff7f7f7, 0xffa53929, 0xffa53929, 
+	0xffa53929, 0xffa53929, 0xff9a3229, 0xff9a3229, 0xff943129, 0xff943129, 0xff942e26, 0xff942e26, 
+	0xff8c2b24, 0xff842821, 0xff7e271e, 0xff70221b, 0xff70221b, 0xff631c19, 0xff471710, 0xff471710, 
+	0xff471710, 0xdd100400, 0x88000000, 0x33000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x11080400, 0x22080400, 0x99451710, 0xee812a21, 0xffa23329, 
+	0xffa23329, 0xff9c3129, 0xff9c3129, 0xff8f2d24, 0xff8f2d24, 0xff8f2d24, 0xff842821, 0xff68241e, 
+	0xff68241e, 0xff5a2019, 0xff842d29, 0xff8f7484, 0xffb29fad, 0xffb29fad, 0xff8f7484, 0xff522d3a, 
+	0xff4d1c1e, 0xff4a1410, 0xff4a1410, 0xff451610, 0xff451610, 0xff451610, 0xff451610, 0xff3c130e, 
+	0xff3c130e, 0xff3c130e, 0xcc210808, 0x77000000, 0x44000000, 0x22000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9dfdb, 0xffce9e94, 0xffce9e94, 
+	0xffce9e94, 0xffd39f91, 0xffd39f91, 0xffd39f91, 0xffd39f91, 0xffd39e91, 0xffd39e91, 0xffd39e91, 
+	0xffd39e91, 0xffce988c, 0xffce988c, 0xffce988c, 0xffce9384, 0xffc58e7b, 0xffc58e7b, 0xffc58e7b, 
+	0xffe6d9d3, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x66290400, 0xdd5d3731, 0xeec59e94, 
+	0xeec59e94, 0xeebd9e9c, 0xeeba9794, 0xeeb8908c, 0xeeb58a84, 0xeeb58a84, 0xeeb2837b, 0xeeaf7c73, 
+	0xeeaf7c73, 0xee9c7168, 0xeed6a69c, 0xee9c7168, 0x77290800, 0x22000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0xaa2c0f0b, 
+	0xff842d21, 0xff842d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff9c3129, 0xff9c3129, 
+	0xff9c3129, 0xff9c3129, 0xff9a3126, 0xffa53529, 0xff9a3126, 0xff9a3126, 0xff9c3129, 0xff9c3129, 
+	0xff9c3129, 0xff9c3129, 0xff8c2d21, 0xff8c2d21, 0xffbd6d6b, 0xffbd6d6b, 0xff9c3129, 0xff9c3129, 
+	0xff9c3129, 0xff9c3129, 0xff9c3121, 0xff9c3121, 0xff912d21, 0xff9c3121, 0xff842d21, 0xff842d21, 
+	0xff76271e, 0xff76271e, 0xff732421, 0xff732421, 0xff5d1e19, 0xff5d1e19, 0xff421410, 0xff421410, 
+	0xee2c0d0b, 0xaa000000, 0x55000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x33000000, 0x994a1410, 0xee942d21, 
+	0xff942d21, 0xff942d21, 0xff942d21, 0xff8c2d21, 0xff8c2d21, 0xff812821, 0xff812821, 0xff632019, 
+	0xff632019, 0xff632019, 0xff633134, 0xff846573, 0xffa596a5, 0xffa596a5, 0xff846573, 0xff5a3d42, 
+	0xff4a2221, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 
+	0xff421410, 0xcc160705, 0x77000000, 0x55000000, 0x33000000, 0x11000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9dfdb, 0xffce9e94, 0xffce9e94, 
+	0xffce9e94, 0xffd39f91, 0xffd09d8f, 0xffd09d8f, 0xffd09d8f, 0xffd09a8f, 0xffd09a8f, 0xffd09a8f, 
+	0xffd09a8f, 0xffce988c, 0xffce9384, 0xffce9384, 0xffce9384, 0xffc58e7b, 0xffc58e7b, 0xffc58e7b, 
+	0xffe6d9d3, 0xffadaaad, 0x00000000, 0x11000000, 0x22000000, 0x55290400, 0xcc290400, 0xeec59e94, 
+	0xeec59e94, 0xeeba9794, 0xeeb8908c, 0xeeb8908c, 0xeeb58a84, 0xeeb2837b, 0xeeaf7c73, 0xeeaf7c73, 
+	0xeead756b, 0xee9c7168, 0xeed6a69c, 0xdd633d34, 0x66290800, 0x22000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000000, 
+	0xbb2c0f0b, 0xff842d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8f2d26, 0xff8f2d26, 
+	0xff8f2d26, 0xff9c3129, 0xff8f2d24, 0xff9a3126, 0xff9a3126, 0xff9a3126, 0xff942e26, 0xff9c3129, 
+	0xff942e26, 0xff9c3129, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff942e26, 0xff942e26, 
+	0xff942e26, 0xff942e26, 0xff9c3121, 0xff912d21, 0xff912d21, 0xff912d21, 0xff842d21, 0xff76271e, 
+	0xff76271e, 0xff76271e, 0xff732421, 0xff5d1e19, 0xff5d1e19, 0xff471710, 0xff421410, 0xee2c0d0b, 
+	0xbb000000, 0x77000000, 0x33000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x33000000, 0x99370f0b, 
+	0xee942d21, 0xff942d21, 0xff942d21, 0xff8c2d21, 0xff812821, 0xff812821, 0xff762421, 0xff632019, 
+	0xff632019, 0xff632019, 0xff633942, 0xff846573, 0xffa596a5, 0xffa596a5, 0xff846573, 0xff5a3d42, 
+	0xff4a2221, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xee421410, 
+	0xcc160705, 0x77000000, 0x55000000, 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe9dfdb, 0xffce9e94, 0xffce9e94, 
+	0xffce9e94, 0xffd09d8f, 0xffd09d8f, 0xffd09d8f, 0xffce9a8c, 0xffd09a8f, 0xffce968c, 0xffce968c, 
+	0xffce968c, 0xffce9384, 0xffce9384, 0xffce8e7b, 0xffce8e7b, 0xffc58e7b, 0xffc58e7b, 0xffc58e7b, 
+	0xffe6d9d3, 0xffadaaad, 0x00000000, 0x00000000, 0x22000000, 0x44290400, 0xbb290400, 0xee916b63, 
+	0xeec59e94, 0xeeb8908c, 0xeeb8908c, 0xeeb58a84, 0xeeb58a84, 0xeeb2837b, 0xeeaf7c73, 0xeead756b, 
+	0xeead756b, 0xee9c7168, 0xeed6a69c, 0xcc290800, 0x55290800, 0x22000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x33000000, 0xcc2c0f0b, 0xff76241b, 0xff76241b, 0xff76241b, 0xff76241b, 0xff812824, 0xff812824, 
+	0xff812824, 0xff812824, 0xff8f2d24, 0xff8f2d24, 0xff8f2d24, 0xff8f2d24, 0xff8c2b24, 0xff8c2b24, 
+	0xff8c2b24, 0xff8c2b24, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff942e26, 0xff942e26, 
+	0xff942e26, 0xff942e26, 0xff912d21, 0xff912d21, 0xff862821, 0xff862821, 0xff76271e, 0xff76271e, 
+	0xff68221b, 0xff68221b, 0xff5d1e19, 0xff5d1e19, 0xff471710, 0xff471710, 0xff2c0d0b, 0xcc000000, 
+	0x88000000, 0x44000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x33080000, 
+	0x88370f0b, 0xdd651e16, 0xff942d21, 0xff812821, 0xff812821, 0xff762421, 0xff762421, 0xff632019, 
+	0xff632019, 0xff632826, 0xff633942, 0xff846573, 0xff947d8c, 0xff947d8c, 0xff846573, 0xff5a3d42, 
+	0xff4a2221, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xff421410, 0xee2f0d0b, 0xbb160705, 
+	0x77000000, 0x55000000, 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000400, 0xff949694, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, 
+	0xffce9a8c, 0xffce9a8c, 0xffce9a8c, 0xffce9a8c, 0xffce9a8c, 0xffce9a8c, 0xffce9a8c, 0xffce9a8c, 
+	0xffce9a8c, 0xffc58a7b, 0xffc58a7b, 0xffc58a7b, 0xffc58a7b, 0xffb57d73, 0xffb57d73, 0xffb57d73, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x11000000, 0x33190400, 0xaa190400, 0xee91584d, 
+	0xeece8273, 0xeeb5867b, 0xeeb5867b, 0xeeb5867b, 0xeeb5867b, 0xeead7973, 0xeead7973, 0xeeaa6d65, 
+	0xeeaa6d65, 0xeeaa7d73, 0xeeefbaad, 0xbb210400, 0x44210400, 0x11000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11000000, 0x44000000, 0xcc4a1410, 0xff76241b, 0xff76241b, 0xff76241b, 0xff732421, 0xff732421, 
+	0xff732421, 0xff812824, 0xff842821, 0xff842821, 0xff842821, 0xff842821, 0xff842821, 0xff842821, 
+	0xff8c2b24, 0xff842821, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2d21, 0xff8c2b24, 0xff8c2b24, 
+	0xff8c2b24, 0xff842821, 0xff862821, 0xff862821, 0xff862821, 0xff7b2421, 0xff76271e, 0xff68221b, 
+	0xff68221b, 0xff5a1c19, 0xff5d1e19, 0xff471710, 0xff311008, 0xff311008, 0xdd160705, 0x99000000, 
+	0x55000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11080000, 
+	0x33080000, 0x55080000, 0xaa370f0b, 0xee6b2021, 0xff812821, 0xff762421, 0xff762421, 0xff632019, 
+	0xff632019, 0xff632019, 0xff633134, 0xff734d5a, 0xff846573, 0xff846573, 0xff734d5a, 0xff522f31, 
+	0xff4a2221, 0xff421410, 0xff421410, 0xff421410, 0xee2f0d0b, 0xcc1b0705, 0x99080000, 0x66000000, 
+	0x44000000, 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, 
+	0xffce9a8c, 0xffce9a8c, 0xffefdbd3, 0xfffffbf7, 0xfffffbf7, 0xffefddd9, 0xffefddd9, 0xffefddd9, 
+	0xffefddd9, 0xfffffbf7, 0xfffffbf7, 0xffecd5ce, 0xffc58a7b, 0xffb57d73, 0xffb57d73, 0xffb57d73, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x11000000, 0x22190400, 0x77190400, 0xdd552e26, 
+	0xeece8273, 0xeeaf7165, 0xeeaf7165, 0xeeb5867b, 0xeeaf7165, 0xeead7973, 0xeeaa6d65, 0xeeaa6d65, 
+	0xeeaa6d65, 0xeeaa7d73, 0xeeaa7d73, 0x88210400, 0x22210400, 0x11000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x11000000, 0x33000000, 0x99210b08, 0xee421610, 0xff632019, 0xff632019, 0xff632019, 
+	0xff632019, 0xff632019, 0xff732419, 0xff732419, 0xff732419, 0xff732419, 0xff6b221b, 0xff7b2821, 
+	0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 0xff7b2821, 
+	0xff7b2821, 0xff7b2821, 0xff7b2421, 0xff7b2421, 0xff7b2421, 0xff7b2421, 0xff6b2019, 0xff6b2019, 
+	0xff6b2019, 0xff4a1610, 0xff421410, 0xff421410, 0xee2c0d0b, 0xcc000000, 0x99000000, 0x55000000, 
+	0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11000000, 0x22000000, 0x44000000, 0x771e0908, 0xbb3c1310, 0xdd5a1c19, 0xff5a1c19, 0xff55221b, 
+	0xff55221b, 0xff55221b, 0xff7b3129, 0xff58373c, 0xff7b4d52, 0xff7b4d52, 0xff58373c, 0xff5a2d29, 
+	0xff3f1f1b, 0xff24120e, 0xee24120e, 0xcc210808, 0x990b0303, 0x77000000, 0x55000000, 0x44000000, 
+	0x22000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, 
+	0xffce9a8c, 0xffce9a8c, 0xffefdbd3, 0xfffffbf7, 0xfffffbf7, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xfffffbf7, 0xfffffbf7, 0xffd9afa5, 0xffc58a7b, 0xffb57d73, 0xffb57d73, 0xffb57d73, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x11000000, 0x22190400, 0x44190400, 0xbb190400, 
+	0xee91584d, 0xeeaa5d50, 0xeeaf7165, 0xeeaf7165, 0xeeaf7165, 0xeeaa6d65, 0xeea76158, 0xeea76158, 
+	0xeeaa6d65, 0xeeaa7d73, 0xcc210400, 0x55210400, 0x22210400, 0x11000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x11000000, 0x22000000, 0x66000000, 0xcc210b08, 0xff451610, 0xff632019, 
+	0xff451610, 0xff632019, 0xff5d1c13, 0xff5d1c13, 0xff5d1c13, 0xff5d1c13, 0xff6b221b, 0xff6b221b, 
+	0xff6b221b, 0xff6b221b, 0xff6e231b, 0xff6e231b, 0xff6e231b, 0xff6e231b, 0xff6e231b, 0xff6e231b, 
+	0xff6e231b, 0xff6e231b, 0xff651e1b, 0xff7b2421, 0xff651e1b, 0xff651e1b, 0xff6b2019, 0xff4a1610, 
+	0xff4a1610, 0xff4a1610, 0xff2c0d0b, 0xee160705, 0xbb000000, 0x88000000, 0x55000000, 0x22000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x11000000, 0x11000000, 0x33000000, 0x44000000, 0x66000000, 0x991e0908, 0xbb2f130e, 
+	0xdd2f130e, 0xee55221b, 0xff55221b, 0xff58373c, 0xff58373c, 0xff58373c, 0xee342226, 0xdd3f1f1b, 
+	0xcc24120e, 0xaa080400, 0x88080400, 0x77000000, 0x55000000, 0x44000000, 0x33000000, 0x11000000, 
+	0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffce9a8c, 0xffce9a8c, 
+	0xffce9a8c, 0xffce9a8c, 0xffce9a8c, 0xfffffbf7, 0xfffffbf7, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xfffffbf7, 0xffecd5ce, 0xffc58a7b, 0xffc58a7b, 0xffb57d73, 0xffb57d73, 0xffb57d73, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x11190400, 0x22190400, 0x77190400, 
+	0xcc190400, 0xeea5493a, 0xeeaa5d50, 0xeeaa5d50, 0xeeaa5d50, 0xeea76158, 0xeea76158, 0xeea76158, 
+	0xeea5554a, 0xcc210400, 0x77210400, 0x22210400, 0x11210400, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x44000000, 0x88080000, 0xdd260b08, 
+	0xee451610, 0xff451610, 0xff47140e, 0xff5d1c13, 0xff5d1c13, 0xff5d1c13, 0xff5a1b16, 0xff5a1b16, 
+	0xff5a1b16, 0xff5a1b16, 0xff601e16, 0xff601e16, 0xff6e231b, 0xff601e16, 0xff601e16, 0xff601e16, 
+	0xff601e16, 0xff601e16, 0xff651e1b, 0xff651e1b, 0xff501716, 0xff501716, 0xff4a1610, 0xff4a1610, 
+	0xff290b08, 0xee290b08, 0xdd000000, 0xaa000000, 0x77000000, 0x44000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x22000000, 0x33000000, 0x55080400, 
+	0x66080400, 0x77080400, 0x88080400, 0x88100c10, 0x99100c10, 0x99100c10, 0x88100c10, 0x8824120e, 
+	0x77080400, 0x66080400, 0x55080400, 0x44000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffce9284, 0xffce9284, 
+	0xffce9284, 0xffc58e7b, 0xffc58e7b, 0xffd9b3a7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffffffff, 0xffcea9a2, 0xffb57d73, 0xffb57d73, 0xffad756b, 0xffad756b, 0xffad756b, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x22000000, 
+	0x66000000, 0x99210400, 0xaa420800, 0xbb420800, 0xbb630c00, 0xcc520c00, 0xbb520c00, 0xbb370800, 
+	0x991b0400, 0x66000000, 0x33000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x22080000, 0x44080000, 
+	0x77080000, 0xbb080000, 0xee310c08, 0xff47140e, 0xff47140e, 0xff47140e, 0xff4a1410, 0xff4a1410, 
+	0xff5a1b16, 0xff5a1b16, 0xff521810, 0xff521810, 0xff521810, 0xff521810, 0xff521810, 0xff521810, 
+	0xff521810, 0xff521810, 0xff501716, 0xff501716, 0xff501716, 0xff3a1010, 0xff290b08, 0xee290b08, 
+	0xcc080000, 0xaa080000, 0x88000000, 0x55000000, 0x33000000, 0x11000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x22080400, 
+	0x33080400, 0x33080400, 0x44080400, 0x44100c10, 0x55100c10, 0x55100c10, 0x44100c10, 0x44080400, 
+	0x33080400, 0x33080400, 0x22080400, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffce9284, 0xffce9284, 
+	0xffce9284, 0xffc58e7b, 0xffc58e7b, 0xffc58e7b, 0xffecd9d3, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffe6d4d0, 0xffb57d73, 0xffb57d73, 0xffb57d73, 0xffad756b, 0xffad756b, 0xffad756b, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 
+	0x22000000, 0x22000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 0x33000000, 
+	0x22000000, 0x22000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 
+	0x22000000, 0x44000000, 0x66000000, 0x99000000, 0xbb080303, 0xdd190808, 0xee260b0b, 0xff3a1010, 
+	0xff3a1010, 0xff3a1010, 0xff3a1410, 0xff3a1410, 0xff3a1410, 0xff3a1410, 0xff4a1410, 0xff4a1410, 
+	0xff4a1410, 0xff4a1410, 0xff311010, 0xee210b0b, 0xdd100505, 0xcc100505, 0xbb000000, 0x99000000, 
+	0x77000000, 0x55000000, 0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffce9284, 0xffce9284, 
+	0xffce9284, 0xffc58e7b, 0xffc58e7b, 0xffc58e7b, 0xffd9b3a7, 0xffffffff, 0xffffffff, 0xffffffff, 
+	0xffffffff, 0xffcea9a2, 0xffb57d73, 0xffb57d73, 0xffb57d73, 0xffad756b, 0xffad756b, 0xffad756b, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x11000000, 0x11000000, 0x33000000, 0x44000000, 0x55000000, 0x77000000, 0x88000000, 
+	0xaa000000, 0xbb000000, 0xcc130705, 0xcc130705, 0xcc130705, 0xdd130705, 0xcc190705, 0xcc190705, 
+	0xcc000000, 0xbb000000, 0xbb000000, 0x99000000, 0x88000000, 0x66000000, 0x55000000, 0x44000000, 
+	0x33000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffce9284, 0xffce9284, 
+	0xffce9284, 0xffc58e7b, 0xffc58e7b, 0xffc58e7b, 0xffc58e7b, 0xffe9d7d3, 0xffffffff, 0xffffffff, 
+	0xffdec2bd, 0xffb57d73, 0xffb57d73, 0xffb57d73, 0xffb57d73, 0xffad756b, 0xffad756b, 0xffad756b, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11000000, 0x11000000, 0x22000000, 0x22000000, 
+	0x33000000, 0x44000000, 0x55000000, 0x55000000, 0x55000000, 0x66000000, 0x66000000, 0x66000000, 
+	0x55000000, 0x55000000, 0x44000000, 0x44000000, 0x33000000, 0x22000000, 0x11000000, 0x11000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffc5867b, 0xffc5867b, 
+	0xffc5867b, 0xffc58a7b, 0xffbd8376, 0xffbd8376, 0xffbd8376, 0xffc59b8f, 0xfff7e7e6, 0xfff7e7e6, 
+	0xffc59b8f, 0xffb5796b, 0xffb5796b, 0xffad7568, 0xffad7568, 0xffa56d63, 0xffa56d63, 0xffa56d63, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x11000000, 
+	0x11000000, 0x11000000, 0x11000000, 0x11000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffc5867b, 0xffc5867b, 
+	0xffc5867b, 0xffbd8376, 0xffbd8376, 0xffb57c70, 0xffb57c70, 0xffad7563, 0xffdec1ba, 0xffdec1ba, 
+	0xffad7563, 0xffad7568, 0xffad7568, 0xffa57165, 0xffa57165, 0xffa56d63, 0xffa56d63, 0xffa56d63, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffc5867b, 0xffc5867b, 
+	0xffc5867b, 0xffbd8376, 0xffb57c70, 0xffb57c70, 0xffb57c70, 0xffad7563, 0xffad7563, 0xffad7563, 
+	0xffad7563, 0xffa57165, 0xffa57165, 0xffa57165, 0xff9c6d63, 0xffa56d63, 0xffa56d63, 0xffa56d63, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff949694, 0xffe6e3e6, 0xffc5867b, 0xffc5867b, 
+	0xffc5867b, 0xffb57c70, 0xffb57c70, 0xffad756b, 0xffad756b, 0xffad7563, 0xffad7563, 0xffad7563, 
+	0xffad7563, 0xff9c6d63, 0xff9c6d63, 0xff9c6d63, 0xff9c6d63, 0xffa56d63, 0xffa56d63, 0xffa56d63, 
+	0xffe6e3e6, 0xffadaaad, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff8f8f8f, 0xffded4d0, 0xffad7d73, 0xffad7d73, 
+	0xffad7d73, 0xffa57163, 0xffa57163, 0xffa57163, 0xffa57163, 0xff9c695a, 0xff9c695a, 0xff9c695a, 
+	0xff9c695a, 0xff94655a, 0xff94655a, 0xff94655a, 0xff94655a, 0xff946d63, 0xff946d63, 0xff946d63, 
+	0xffdbcecb, 0xffa5a6a5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff8f8f8f, 0xffded4d0, 0xfff7ffff, 0xffad7d73, 
+	0xffad7d73, 0xffa57163, 0xffa57163, 0xffa57163, 0xffa57163, 0xff9c695a, 0xff9c695a, 0xff9c695a, 
+	0xff9c695a, 0xff94655a, 0xff94655a, 0xff94655a, 0xff94655a, 0xff946d63, 0xff946d63, 0xffffffff, 
+	0xffdbcecb, 0xffa5a6a5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff8f8f8f, 0xffded4d0, 0xffded4d0, 0xffded4d0, 
+	0xffded4d0, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 
+	0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffd6dbde, 0xffdbcecb, 0xffdbcecb, 0xffdbcecb, 
+	0xffdbcecb, 0xffa5a6a5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff8f8f8f, 0xffc5a9a2, 0xffc5a9a2, 0xffc5a9a2, 
+	0xffc5a9a2, 0xffc5b7b5, 0xffc5b7b5, 0xffc5b7b5, 0xffc5b7b5, 0xffc3b5b2, 0xffc3b5b2, 0xffc3b5b2, 
+	0xffc3b5b2, 0xffc0b3b2, 0xffc0b3b2, 0xffc0b3b2, 0xffc0b3b2, 0xffb89e97, 0xffb89e97, 0xffb89e97, 
+	0xffb89e97, 0xff6e6f6e, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
+};
+
+static const UINT g_DXUTGUITextureSrcDataSizeInBytes = 262272;
+
+static const DWORD g_DXUTArrowMeshSrcData[] =
+{
+	0x20666f78, 0x33303330, 0x70697a62, 0x32333030, 0x000030d7, 0x087930c7, 0x59ed4b43, 0xd51c6c5d, 
+	0x71dbbe15, 0xacbbc1d6, 0xe125d493, 0xc1024e27, 0x7133f9c1, 0xec1098ec, 0x1b1daef1, 0xc6d24eb7, 
+	0xc713fa10, 0x64866f59, 0xd9aecd95, 0x694304dd, 0x4485686b, 0xad2fb6a5, 0x78df44a8, 0x6cca8828, 
+	0x20a2895a, 0x2aaf60ef, 0x905215b5, 0x4fa9515a, 0xa45b4d45, 0xa1e09548, 0x9e94d282, 0xcf5df333, 
+	0x8a3acdf1, 0xec0c5368, 0xbefec6ac, 0xf77ee733, 0xdef73bdc, 0x9d667739, 0x4a65a90a, 0xf27c81a9, 
+	0x7040d394, 0xba2785e0, 0x7e7e38ff, 0xd5bb0be5, 0xba1f17fa, 0x56a633b0, 0x1546bf79, 0x1d7cec51, 
+	0x164bef39, 0x8ec9e9f3, 0xb02e0ec9, 0x1fe77ed7, 0xbf399e4f, 0x550707f2, 0x1fceceef, 0x36a1db3e, 
+	0xdc985b93, 0x316e794e, 0xc415a965, 0x2413551a, 0xf77d749a, 0xc2d993e5, 0x29fcb983, 0xe2d5905f, 
+	0x61519a86, 0x7a942488, 0x36fb0b90, 0x1df5c9ad, 0x5cc55272, 0x188e559e, 0x4288e08d, 0x1aee41e4, 
+	0x47c0123e, 0xae72c8b5, 0x189c29ca, 0xbebca648, 0x5a643318, 0xf91567c9, 0x90e1d964, 0x933a2f93, 
+	0xe963d943, 0x52685394, 0xaeaf8a1d, 0x8bcce8e4, 0x058b45b1, 0xaa87527d, 0x2afedab9, 0x642f72d5, 
+	0x4daeacb9, 0xfc8fd936, 0x4cc6ae0c, 0x15a5ae77, 0x2018bc05, 0x8feb9b20, 0x2bdd0e02, 0x6172b81f, 
+	0x50440c73, 0xbadd3f70, 0x31c0a664, 0xadf719f7, 0xf859fa15, 0x3d721e5c, 0xc62ff55f, 0x701d670c, 
+	0x40b14754, 0x11d86164, 0x903fbd84, 0xbd058b32, 0x97d2ddcc, 0x07f2e4cb, 0x0e711307, 0x1ffd4ffb, 
+	0x09963e74, 0x6121e6c2, 0x39de5391, 0xee0f8fe6, 0xc779e395, 0x6f94fac9, 0xb4e678d3, 0x664c5c13, 
+	0xe5244e26, 0x2cfad200, 0xcdf678ff, 0x7e4e75df, 0x20317918, 0x9f274593, 0x6f58664e, 0x8c32319f, 
+	0x7b94f916, 0x550533c3, 0x761ee44c, 0x300c2e88, 0x5627aea4, 0xa7527098, 0x4a3cc933, 0x4e717354, 
+	0xf4850ba5, 0x8e6a2d19, 0x1fb81586, 0x74e1d03a, 0x26c1c8a1, 0x06890caa, 0xb1da35be, 0x9a65dc60, 
+	0x3064ce14, 0x859df497, 0xd5c55639, 0xfb0b9c1f, 0xd25ef2e9, 0x46f1ae81, 0xfebf4f1f, 0x749913d3, 
+	0xe74c592a, 0x1c8998b2, 0x6ffdd0f0, 0x3f9bfcbc, 0xa9e868fc, 0x3fcf23f3, 0xe7f1da57, 0x3f3c31f9, 
+	0xcf14f5c9, 0x8fa7c81e, 0x8cc9b3a7, 0x917c919c, 0x983a7507, 0x3fb4b2f5, 0xeb6ac50a, 0xca48c6f7, 
+	0x07633ac9, 0xb3ea3973, 0xf58d2d2b, 0x352b3f5e, 0x8ecbab65, 0x0119b7ab, 0xf3e78c30, 0xa6af87b9, 
+	0xfddef7ee, 0xe5551ece, 0xafc27690, 0x65c7aaa8, 0xfbe37375, 0x6f50c91e, 0x773bf939, 0x9bc6f87c, 
+	0xa35729f6, 0xaef0ae99, 0x256f73b6, 0x00957ff8, 0x7d46b8f8, 0x7e7fc53e, 0x5f343232, 0x75de5ead, 
+	0xc1ef61ad, 0xf59d3773, 0x3950da6a, 0x35c4aa5e, 0x8a503e1e, 0x3adebfd7, 0xb2c778cb, 0x7f9dfc62, 
+	0x97c3d8ff, 0x8ef74db6, 0x61ecbaff, 0xd5fa7db5, 0xb2fb7024, 0xd9f6ace2, 0xab34a077, 0xece692cb, 
+	0x9d93d74c, 0xfe5d9cd0, 0x4757ab7a, 0xe1efef9b, 0xbf4db7f7, 0x68719a4a, 0x498126f6, 0x7c36fe33, 
+	0x461e3348, 0x68ce20d9, 0x5a338825, 0x568ce209, 0x95a33882, 0x2568ce20, 0x095a3388, 0x82568ce2, 
+	0xc44d3d38, 0x7104ad19, 0x9c412b46, 0xf4e2269e, 0xa7a71134, 0x67c93889, 0x6bf4f0fe, 0xec3ffb7d, 
+	0x937ab0db, 0x4e8bbc62, 0x19fabd0b, 0x5b82433a, 0x075e69b0, 0x6132f9ac, 0x9b0c23e3, 0x69b0f5e6, 
+	0xcd361cbe, 0xf34d83af, 0x8f34d806, 0x1479a6c0, 0x87afcd36, 0x6c18f34d, 0x6360879a, 0x9fa74cde, 
+	0x1d7c06ca, 0x4af0166c, 0xcd87af83, 0xf0655e02, 0xc059b00d, 0xadf8359f, 0x4dc059b0, 0x360dbf06, 
+	0x0673f80b, 0x059b08df, 0x6fc1837c, 0x5e02cd87, 0xd816f06d, 0x0635e02c, 0x059b04df, 0xefc1a37c, 
+	0xbe02cd80, 0xb0ade0c9, 0x1b37c059, 0x166c337c, 0xdf062df0, 0xdc059b02, 0x7166f068, 0xb9d2d6bf, 
+	0x826dce95, 0x382ede33, 0x19c136e3, 0xe33829df, 0x6e33821d, 0x4ef19c17, 0x087719c1, 0x7053b8ce, 
+	0x6704bbc6, 0x977825dc, 0x816b5f98, 0x1bbe0b77, 0x9592aa6d, 0x5990fe2f, 0xd25cbcf0, 0xb7df7d78, 
+	0x9f46a7ec, 0xe17666e9, 0x7dced644, 0xf1995cfb, 0xf6eda1e0, 0x78f667b3, 0x2607facf, 0xf479ee9f, 
+	0xd5e045bb, 0x6fb686e5, 0xddffb878, 0x7a707746, 0x7f4fc3c4, 0xf4cdd47f, 0xa6930f2a, 0xd0339a4b, 
+	0x07b34974, 0xda692e9a, 0x26932cd0, 0xd21eeaf0, 0x9369a1b4, 0x9b4d0da6, 0x60448d34, 0x33cc45ca, 
+	0x6515c7c2, 0x8ae9a15d, 0x83115cba, 0x8b2b622b, 0x5b45bb98, 0x5b46d16c, 0x7d16ddb4, 0xb2be8b62, 
+	0x98f61f45, 0x5c652f31, 0x1ed4c87b, 0xcc87b532, 0x44c87852, 0x87eedd16, 0x084ce7bd, 0x87e93f65, 
+	0xdea666f9, 0xb3feed9b, 0x2da69e4b, 0x5f5e2238, 0x448df95e, 0xe783dd58, 0x2758b377, 0x87573af4, 
+	0xb58c2c35, 0xa4d6396a, 0x513dac06, 0x8c3131ac, 0x135815cd, 0x376e6156, 0x80de8e61, 0x7306b6b9, 
+	0xfd8c26e6, 0xffef705b, 0xf04675df, 0x0f57b05b, 0xb2a52f7b, 0x5179b5ce, 0xced6ede0, 0xe45895bd, 
+	0x7c35c54d, 0xeeaea051, 0xd7b8c145, 0x85a12ddf, 0x274a972a, 0x9ec71a13, 0xa10a254f, 0x1c69b7a2, 
+	0xb89c3b5d, 0xe1e8ba54, 0x24b5cfb3, 0xe3274e7e, 0x08ed917f, 0x413c635d, 0xf5065cbe, 0x4eb5a4bf, 
+	0xdab38a87, 0xe2e941fe, 0x49fc28ec, 0x742cee63, 0x7dee6348, 0x5cef93e8, 0xc692f516, 0xf57ecfdc, 
+	0x7db497d3, 0xcf10b492, 0xd17b3a9c, 0xf9d225c3, 0xff8c9d05, 0xc5acfa49, 0x36f924f8, 0xb7bc1952, 
+	0xc62d62e9, 0xf4e3f75f, 0xc5ece870, 0x93f861f8, 0x9d04a246, 0xbdf18a31, 0x1a4faf92, 0x57a81389, 
+	0x6fe7db1f, 0x862f0d6d, 0x36a9636b, 0x1c1bfe96, 0xead38f56, 0x9c13f474, 0x1c8a37a3, 0xba39195d, 
+	0x65727232, 0xc8cae0e4, 0x639195b9, 0x56a7232b, 0x8cad0e46, 0x3919599c, 0x740dceb2, 0xe46edc4e, 
+	0xd45f3ac0, 0x234eef39, 0xa3f9d607, 0x8c3b79ce, 0x93e7581c, 0x44ede73a, 0x2ef9206e, 0x66e02cd8, 
+	0x66c17783, 0xf833af01, 0xc059b05d, 0x1bbe0deb, 0x83780b36, 0xcd86efc1, 0xe0d5be02, 0x80b3607b, 
+	0x3df8336f, 0x1bc059b0, 0x9b0dde0d, 0xc1bb7c05, 0x80b3607b, 0xc36e0c5b, 0x326f0166, 0x166c2f78, 
+	0x8f061df0, 0xb70166c3, 0x9b013c1a, 0xe0d9bc05, 0xc059b07d, 0x0fde0c5b, 0xd5bc059b, 0xb3617be0, 
+	0x7c19b780, 0x0679ec40, 0x7c91c7b0, 0x0681ec50, 0xfc91e7b1, 0xba27b15e, 0xc9207b17, 0x691ec487, 
+	0xf25b6308, 0x79de3176, 0x3a79f4bf, 0xe33820bf, 0xef19c161, 0x7ef19c13, 0x101f19c1, 0x0517f19c, 
+	0xc125fc67, 0x9c141f19, 0x8ce088f1, 0xf19c13ef, 0x3e3382fd, 0x07e33824, 0x65fc6704, 0x457f19c1, 
+	0x155fc670, 0x04d7f19c, 0x70587c67, 0x3382a3c6, 0xe338223e, 0x1f19c131, 0x52719c15, 0x7cfa24f0, 
+	0xd59117d1, 0xfda5d892, 0xe02969e2, 0xb71fbffd, 0xdfebfe5f, 0xe5fede67, 0xbb807a5f, 0x46c64719, 
+	0x5f9b96ec, 0xf1dc61ec, 0xdafda744, 0xcc66c440, 0xae3399ff, 0xc7eceba3, 0x7971cb98, 0xc98d19e0, 
+	0xa87daca7, 0xd2cbabac, 0xd26b577f, 0x750eb775, 0xc7573951, 0x7c233c00, 0x2baca2ca, 0x97515d34, 
+	0x4570622b, 0xf16e1e6c, 0x5b457663, 0x5746d15c, 0x25d75db7, 0xa58f5337, 0xcb78798e, 0xe27adff0, 
+	0x6fb61ccf, 0x187a67cc, 0x5eedfe1f, 0x0ba97bfb, 0x9be57e1e, 0x193e6c1b, 0x31af8db3, 0xc32e5f66, 
+	0x5ec16b58, 0x2ff276d6, 0x70d27f6b, 0xdcd90eb5, 0x5f27d093, 0x1a4bd757, 0x84a72f7c, 0x59fdacbd, 
+	0x46bceb4b, 0x4577d0a7, 0xc788aebd, 0x22ba7115, 0xcbb4577e, 0x093dedd5, 0x8dfd8e7d, 0x3f7afc87, 
+	0x3ffe2f4e, 0x624b5c0a, 0x2d6c496b, 0xb125ad89, 0xd3f624b5, 0xe95ec49e, 0xd638c743, 0x829fa3a9, 
+	0x0fb51d0f, 0x9887fe31, 0xb4bfd863, 0x621f847f, 0xdec7c59a, 0xecc3e20d, 0x7511f146, 0xa9e0f893, 
+	0x156e5c3f, 0xc4db201f, 0x7b8fc5c7, 0xf7e2221b, 0x0000001f
+};
+
+static const UINT g_DXUTArrowMeshSrcDataSizeInBytes = 2193;
+
+//-----------------------------------------------------------------------------
+HRESULT DXUTCreateGUITextureFromInternalArray( LPDIRECT3DDEVICE9 pd3dDevice, IDirect3DTexture9** ppTexture, D3DXIMAGE_INFO* pInfo )
+{
+    return D3DXCreateTextureFromFileInMemoryEx( pd3dDevice, g_DXUTGUITextureSrcData, g_DXUTGUITextureSrcDataSizeInBytes, 
+                                                D3DX_DEFAULT, D3DX_DEFAULT, 1, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, 
+                                                D3DX_DEFAULT, D3DX_DEFAULT, 0, pInfo, NULL, ppTexture );
+}
+
+//-----------------------------------------------------------------------------
+HRESULT DXUTCreateArrowMeshFromInternalArray( LPDIRECT3DDEVICE9 pd3dDevice, ID3DXMesh** ppMesh )
+{
+    return D3DXLoadMeshFromXInMemory( g_DXUTArrowMeshSrcData, g_DXUTArrowMeshSrcDataSizeInBytes, 
+                                      D3DXMESH_MANAGED, pd3dDevice, NULL, NULL, NULL, NULL, ppMesh );
+}
+
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTmisc.cpp
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTmisc.cpp	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTmisc.cpp	(revision 761)
@@ -0,0 +1,3313 @@
+//--------------------------------------------------------------------------------------
+// File: DXUTMisc.cpp
+//
+// Shortcut macros and functions for using DX objects
+//
+// Copyright (c) Microsoft Corporation. All rights reserved
+//--------------------------------------------------------------------------------------
+#include "dxstdafx.h"
+#define DXUT_GAMEPAD_TRIGGER_THRESHOLD      30
+#define DXUT_INPUT_DEADZONE                 ( 0.24f * FLOAT(0x7FFF) )  // Default to 24% of the +/- 32767 range.   This is a reasonable default value but can be altered if needed.
+#undef min // use __min instead
+#undef max // use __max instead
+
+//--------------------------------------------------------------------------------------
+// Global/Static Members
+//--------------------------------------------------------------------------------------
+CDXUTResourceCache& DXUTGetGlobalResourceCache()
+{
+    // Using an accessor function gives control of the construction order
+    static CDXUTResourceCache cache;
+    return cache;
+}
+CDXUTTimer* DXUTGetGlobalTimer()
+{
+    // Using an accessor function gives control of the construction order
+    static CDXUTTimer timer;
+    return &timer;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Internal functions forward declarations
+//--------------------------------------------------------------------------------------
+bool DXUTFindMediaSearchTypicalDirs( WCHAR* strSearchPath, int cchSearch, LPCWSTR strLeaf, WCHAR* strExePath, WCHAR* strExeName );
+bool DXUTFindMediaSearchParentDirs( WCHAR* strSearchPath, int cchSearch, WCHAR* strStartAt, WCHAR* strLeafName );
+INT_PTR CALLBACK DisplaySwitchToREFWarningProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
+
+
+//--------------------------------------------------------------------------------------
+// Shared code for samples to ask user if they want to use a REF device or quit
+//--------------------------------------------------------------------------------------
+void DXUTDisplaySwitchingToREFWarning()
+{
+    if( DXUTGetShowMsgBoxOnError() )
+    {
+        // Open the appropriate registry key
+        DWORD dwSkipWarning = 0;
+        HKEY hKey;
+        LONG lResult = RegOpenKeyEx( HKEY_CURRENT_USER, L"Software\\Microsoft\\DirectX 9.0 SDK", 0, KEY_READ, &hKey );
+        if( ERROR_SUCCESS == lResult ) 
+        {
+            DWORD dwType;
+            DWORD dwSize = sizeof(DWORD);
+            lResult = RegQueryValueEx( hKey, L"Skip Warning On REF", NULL, &dwType, (BYTE*)&dwSkipWarning, &dwSize );
+            RegCloseKey( hKey );
+        }
+
+        if( dwSkipWarning == 0 )
+        {
+            // Compact code to create a custom dialog box without using a template in a resource file.
+            // If this dialog were in a .rc file, this would be a lot simpler but every sample calling this function would
+            // need a copy of the dialog in its own .rc file. Also MessageBox API could be used here instead, but 
+            // the MessageBox API is simpler to call but it can't provide a "Don't show again" checkbox
+            typedef struct { DLGITEMTEMPLATE a; WORD b; WORD c; WORD d; WORD e; WORD f; } DXUT_DLG_ITEM; 
+            typedef struct { DLGTEMPLATE a; WORD b; WORD c; WCHAR d[2]; WORD e; WCHAR f[14]; DXUT_DLG_ITEM i1; DXUT_DLG_ITEM i2; DXUT_DLG_ITEM i3; DXUT_DLG_ITEM i4; DXUT_DLG_ITEM i5; } DXUT_DLG_DATA; 
+
+            DXUT_DLG_DATA dtp = 
+            {                                                                                                                                                  
+                {WS_CAPTION|WS_POPUP|WS_VISIBLE|WS_SYSMENU|DS_ABSALIGN|DS_3DLOOK|DS_SETFONT|DS_MODALFRAME|DS_CENTER,0,5,0,0,269,82},0,0,L" ",8,L"MS Sans Serif", 
+                {{WS_CHILD|WS_VISIBLE|SS_ICON|SS_CENTERIMAGE,0,7,7,24,24,0x100},0xFFFF,0x0082,0,0,0}, // icon
+                {{WS_CHILD|WS_VISIBLE,0,40,7,230,25,0x101},0xFFFF,0x0082,0,0,0}, // static text
+                {{WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,0,80,39,50,14,IDYES},0xFFFF,0x0080,0,0,0}, // Yes button
+                {{WS_CHILD|WS_VISIBLE,0,133,39,50,14,IDNO},0xFFFF,0x0080,0,0,0}, // No button
+                {{WS_CHILD|WS_VISIBLE|BS_CHECKBOX,0,7,59,70,16,IDIGNORE},0xFFFF,0x0080,0,0,0}, // checkbox
+            }; 
+
+            int nResult = (int) DialogBoxIndirect( DXUTGetHINSTANCE(), (DLGTEMPLATE*)&dtp, DXUTGetHWND(), DisplaySwitchToREFWarningProc ); 
+
+            if( (nResult & 0x80) == 0x80 ) // "Don't show again" checkbox was checked
+            {
+                lResult = RegOpenKeyEx( HKEY_CURRENT_USER, L"Software\\Microsoft\\DirectX 9.0 SDK", 0, KEY_WRITE, &hKey );
+                if( ERROR_SUCCESS == lResult ) 
+                {
+                    dwSkipWarning = 1;
+                    RegSetValueEx( hKey, L"Skip Warning On REF", 0, REG_DWORD, (BYTE*)&dwSkipWarning, sizeof(DWORD) );
+                    RegCloseKey( hKey );
+                }
+            }
+
+            // User choose not to continue
+            if( (nResult & 0x0F) == IDNO )
+                DXUTShutdown(1);
+        }
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+// MsgProc for DXUTDisplaySwitchingToREFWarning() dialog box
+//--------------------------------------------------------------------------------------
+INT_PTR CALLBACK DisplaySwitchToREFWarningProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 
+{ 
+    switch (message) 
+    { 
+        case WM_INITDIALOG:
+            // Easier to set text here than in the DLGITEMTEMPLATE
+            SetWindowText( hDlg, DXUTGetWindowTitle() );
+            SendMessage( GetDlgItem(hDlg, 0x100), STM_SETIMAGE, IMAGE_ICON, (LPARAM)LoadIcon(0, IDI_QUESTION));
+            SetDlgItemText( hDlg, 0x101, L"Switching to the Direct3D reference rasterizer, a software device\nthat implements the entire Direct3D feature set, but runs very slowly.\nDo you wish to continue?" ); 
+            SetDlgItemText( hDlg, IDYES, L"&Yes" );
+            SetDlgItemText( hDlg, IDNO, L"&No" );
+            SetDlgItemText( hDlg, IDIGNORE, L"&Don't show again" );
+            break;
+
+        case WM_COMMAND: 
+            switch (LOWORD(wParam)) 
+            { 
+                case IDIGNORE: CheckDlgButton( hDlg, IDIGNORE, (IsDlgButtonChecked( hDlg, IDIGNORE ) == BST_CHECKED) ? BST_UNCHECKED : BST_CHECKED ); EnableWindow( GetDlgItem( hDlg, IDNO ), (IsDlgButtonChecked( hDlg, IDIGNORE ) != BST_CHECKED) ); break;
+                case IDNO: EndDialog(hDlg, (IsDlgButtonChecked( hDlg, IDIGNORE ) == BST_CHECKED) ? IDNO|0x80 : IDNO|0x00 ); return TRUE; 
+                case IDCANCEL:
+                case IDYES: EndDialog(hDlg, (IsDlgButtonChecked( hDlg, IDIGNORE ) == BST_CHECKED) ? IDYES|0x80 : IDYES|0x00 ); return TRUE; 
+            } 
+            break;
+    } 
+    return FALSE; 
+} 
+
+
+//--------------------------------------------------------------------------------------
+CDXUTTimer::CDXUTTimer()
+{
+    m_bUsingQPF         = false;
+    m_bTimerStopped     = true;
+    m_llQPFTicksPerSec  = 0;
+
+    m_llStopTime        = 0;
+    m_llLastElapsedTime = 0;
+    m_llBaseTime        = 0;
+
+    // Use QueryPerformanceFrequency() to get frequency of timer.  
+    LARGE_INTEGER qwTicksPerSec;
+    m_bUsingQPF = (bool) (QueryPerformanceFrequency( &qwTicksPerSec ) != 0);
+    m_llQPFTicksPerSec = qwTicksPerSec.QuadPart;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTTimer::Reset()
+{
+    if( !m_bUsingQPF )
+        return;
+
+    // Get either the current time or the stop time
+    LARGE_INTEGER qwTime;
+    if( m_llStopTime != 0 )
+        qwTime.QuadPart = m_llStopTime;
+    else
+        QueryPerformanceCounter( &qwTime );
+
+    m_llBaseTime        = qwTime.QuadPart;
+    m_llLastElapsedTime = qwTime.QuadPart;
+    m_llStopTime        = 0;
+    m_bTimerStopped     = FALSE;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTTimer::Start()
+{
+    if( !m_bUsingQPF )
+        return;
+
+    // Get the current time
+    LARGE_INTEGER qwTime;
+    QueryPerformanceCounter( &qwTime );
+
+    if( m_bTimerStopped )
+        m_llBaseTime += qwTime.QuadPart - m_llStopTime;
+    m_llStopTime = 0;
+    m_llLastElapsedTime = qwTime.QuadPart;
+    m_bTimerStopped = FALSE;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTTimer::Stop()
+{
+    if( !m_bUsingQPF )
+        return;
+
+    if( !m_bTimerStopped )
+    {
+        // Get either the current time or the stop time
+        LARGE_INTEGER qwTime;
+        if( m_llStopTime != 0 )
+            qwTime.QuadPart = m_llStopTime;
+        else
+            QueryPerformanceCounter( &qwTime );
+
+        m_llStopTime = qwTime.QuadPart;
+        m_llLastElapsedTime = qwTime.QuadPart;
+        m_bTimerStopped = TRUE;
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTTimer::Advance()
+{
+    if( !m_bUsingQPF )
+        return;
+
+    m_llStopTime += m_llQPFTicksPerSec/10;
+}
+
+
+//--------------------------------------------------------------------------------------
+double CDXUTTimer::GetAbsoluteTime()
+{
+    if( !m_bUsingQPF )
+        return -1.0;
+
+    // Get either the current time or the stop time
+    LARGE_INTEGER qwTime;
+    if( m_llStopTime != 0 )
+        qwTime.QuadPart = m_llStopTime;
+    else
+        QueryPerformanceCounter( &qwTime );
+
+    double fTime = qwTime.QuadPart / (double) m_llQPFTicksPerSec;
+
+    return fTime;
+}
+
+
+//--------------------------------------------------------------------------------------
+double CDXUTTimer::GetTime()
+{
+    if( !m_bUsingQPF )
+        return -1.0;
+
+    // Get either the current time or the stop time
+    LARGE_INTEGER qwTime;
+    if( m_llStopTime != 0 )
+        qwTime.QuadPart = m_llStopTime;
+    else
+        QueryPerformanceCounter( &qwTime );
+
+    double fAppTime = (double) ( qwTime.QuadPart - m_llBaseTime ) / (double) m_llQPFTicksPerSec;
+
+    return fAppTime;
+}
+
+
+//--------------------------------------------------------------------------------------
+double CDXUTTimer::GetElapsedTime()
+{
+    if( !m_bUsingQPF )
+        return -1.0;
+
+    // Get either the current time or the stop time
+    LARGE_INTEGER qwTime;
+    if( m_llStopTime != 0 )
+        qwTime.QuadPart = m_llStopTime;
+    else
+        QueryPerformanceCounter( &qwTime );
+
+    double fElapsedTime = (double) ( qwTime.QuadPart - m_llLastElapsedTime ) / (double) m_llQPFTicksPerSec;
+    m_llLastElapsedTime = qwTime.QuadPart;
+
+    return fElapsedTime;
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTTimer::IsStopped()
+{
+    return m_bTimerStopped;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Returns pointer to static media search buffer
+//--------------------------------------------------------------------------------------
+WCHAR* DXUTMediaSearchPath()
+{
+    static WCHAR s_strMediaSearchPath[MAX_PATH] = {0};
+    return s_strMediaSearchPath;
+
+}   
+
+//--------------------------------------------------------------------------------------
+LPCWSTR DXUTGetMediaSearchPath()
+{
+    return DXUTMediaSearchPath();
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT DXUTSetMediaSearchPath( LPCWSTR strPath )
+{
+    HRESULT hr;
+
+    WCHAR* s_strSearchPath = DXUTMediaSearchPath();
+
+    hr = StringCchCopy( s_strSearchPath, MAX_PATH, strPath );   
+    if( SUCCEEDED(hr) )
+    {
+        // append slash if needed
+        size_t ch;
+        hr = StringCchLength( s_strSearchPath, MAX_PATH, &ch );
+        if( SUCCEEDED(hr) && s_strSearchPath[ch-1] != L'\\')
+        {
+            hr = StringCchCat( s_strSearchPath, MAX_PATH, L"\\" );
+        }
+    }
+
+    return hr;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Tries to find the location of a SDK media file
+//       cchDest is the size in WCHARs of strDestPath.  Be careful not to 
+//       pass in sizeof(strDest) on UNICODE builds.
+//--------------------------------------------------------------------------------------
+HRESULT DXUTFindDXSDKMediaFileCch( WCHAR* strDestPath, int cchDest, LPCWSTR strFilename )
+{
+    bool bFound;
+    WCHAR strSearchFor[MAX_PATH];
+    
+    if( NULL==strFilename || strFilename[0] == 0 || NULL==strDestPath || cchDest < 10 )
+        return E_INVALIDARG;
+
+    // Get the exe name, and exe path
+    WCHAR strExePath[MAX_PATH] = {0};
+    WCHAR strExeName[MAX_PATH] = {0};
+    WCHAR* strLastSlash = NULL;
+    GetModuleFileName( NULL, strExePath, MAX_PATH );
+    strExePath[MAX_PATH-1]=0;
+    strLastSlash = wcsrchr( strExePath, TEXT('\\') );
+    if( strLastSlash )
+    {
+        StringCchCopy( strExeName, MAX_PATH, &strLastSlash[1] );
+
+        // Chop the exe name from the exe path
+        *strLastSlash = 0;
+
+        // Chop the .exe from the exe name
+        strLastSlash = wcsrchr( strExeName, TEXT('.') );
+        if( strLastSlash )
+            *strLastSlash = 0;
+    }
+
+    // Typical directories:
+    //      .\
+    //      ..\
+    //      ..\..\
+    //      %EXE_DIR%\
+    //      %EXE_DIR%\..\
+    //      %EXE_DIR%\..\..\
+    //      %EXE_DIR%\..\%EXE_NAME%
+    //      %EXE_DIR%\..\..\%EXE_NAME%
+
+    // Typical directory search
+    bFound = DXUTFindMediaSearchTypicalDirs( strDestPath, cchDest, strFilename, strExePath, strExeName );
+    if( bFound )
+        return S_OK;
+
+    // Typical directory search again, but also look in a subdir called "\media\" 
+    StringCchPrintf( strSearchFor, MAX_PATH, L"media\\%s", strFilename ); 
+    bFound = DXUTFindMediaSearchTypicalDirs( strDestPath, cchDest, strSearchFor, strExePath, strExeName );
+    if( bFound )
+        return S_OK;
+
+    WCHAR strLeafName[MAX_PATH] = {0};
+
+    // Search all parent directories starting at .\ and using strFilename as the leaf name
+    StringCchCopy( strLeafName, MAX_PATH, strFilename ); 
+    bFound = DXUTFindMediaSearchParentDirs( strDestPath, cchDest, L".", strLeafName );
+    if( bFound )
+        return S_OK;
+
+    // Search all parent directories starting at the exe's dir and using strFilename as the leaf name
+    bFound = DXUTFindMediaSearchParentDirs( strDestPath, cchDest, strExePath, strLeafName );
+    if( bFound )
+        return S_OK;
+
+    // Search all parent directories starting at .\ and using "media\strFilename" as the leaf name
+    StringCchPrintf( strLeafName, MAX_PATH, L"media\\%s", strFilename ); 
+    bFound = DXUTFindMediaSearchParentDirs( strDestPath, cchDest, L".", strLeafName );
+    if( bFound )
+        return S_OK;
+
+    // Search all parent directories starting at the exe's dir and using "media\strFilename" as the leaf name
+    bFound = DXUTFindMediaSearchParentDirs( strDestPath, cchDest, strExePath, strLeafName );
+    if( bFound )
+        return S_OK;
+
+    // On failure, return the file as the path but also return an error code
+    StringCchCopy( strDestPath, cchDest, strFilename );
+
+    return DXUTERR_MEDIANOTFOUND;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Search a set of typical directories
+//--------------------------------------------------------------------------------------
+bool DXUTFindMediaSearchTypicalDirs( WCHAR* strSearchPath, int cchSearch, LPCWSTR strLeaf, 
+                                     WCHAR* strExePath, WCHAR* strExeName )
+{
+    // Typical directories:
+    //      .\
+    //      ..\
+    //      ..\..\
+    //      %EXE_DIR%\
+    //      %EXE_DIR%\..\
+    //      %EXE_DIR%\..\..\
+    //      %EXE_DIR%\..\%EXE_NAME%
+    //      %EXE_DIR%\..\..\%EXE_NAME%
+    //      DXSDK media path
+
+    // Search in .\  
+    StringCchCopy( strSearchPath, cchSearch, strLeaf ); 
+    if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF )
+        return true;
+
+    // Search in ..\  
+    StringCchPrintf( strSearchPath, cchSearch, L"..\\%s", strLeaf ); 
+    if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF )
+        return true;
+
+    // Search in ..\..\ 
+    StringCchPrintf( strSearchPath, cchSearch, L"..\\..\\%s", strLeaf ); 
+    if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF )
+        return true;
+
+    // Search in ..\..\ 
+    StringCchPrintf( strSearchPath, cchSearch, L"..\\..\\%s", strLeaf ); 
+    if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF )
+        return true;
+
+    // Search in the %EXE_DIR%\ 
+    StringCchPrintf( strSearchPath, cchSearch, L"%s\\%s", strExePath, strLeaf ); 
+    if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF )
+        return true;
+
+    // Search in the %EXE_DIR%\..\ 
+    StringCchPrintf( strSearchPath, cchSearch, L"%s\\..\\%s", strExePath, strLeaf ); 
+    if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF )
+        return true;
+
+    // Search in the %EXE_DIR%\..\..\ 
+    StringCchPrintf( strSearchPath, cchSearch, L"%s\\..\\..\\%s", strExePath, strLeaf ); 
+    if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF )
+        return true;
+
+    // Search in "%EXE_DIR%\..\%EXE_NAME%\".  This matches the DirectX SDK layout
+    StringCchPrintf( strSearchPath, cchSearch, L"%s\\..\\%s\\%s", strExePath, strExeName, strLeaf ); 
+    if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF )
+        return true;
+
+    // Search in "%EXE_DIR%\..\..\%EXE_NAME%\".  This matches the DirectX SDK layout
+    StringCchPrintf( strSearchPath, cchSearch, L"%s\\..\\..\\%s\\%s", strExePath, strExeName, strLeaf ); 
+    if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF )
+        return true;
+
+    // Search in media search dir 
+    WCHAR* s_strSearchPath = DXUTMediaSearchPath();
+    if( s_strSearchPath[0] != 0 )
+    {
+        StringCchPrintf( strSearchPath, cchSearch, L"%s%s", s_strSearchPath, strLeaf ); 
+        if( GetFileAttributes( strSearchPath ) != 0xFFFFFFFF )
+            return true;
+    }
+
+    return false;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+// Search parent directories starting at strStartAt, and appending strLeafName
+// at each parent directory.  It stops at the root directory.
+//--------------------------------------------------------------------------------------
+bool DXUTFindMediaSearchParentDirs( WCHAR* strSearchPath, int cchSearch, WCHAR* strStartAt, WCHAR* strLeafName )
+{
+    WCHAR strFullPath[MAX_PATH] = {0};
+    WCHAR strFullFileName[MAX_PATH] = {0};
+    WCHAR strSearch[MAX_PATH] = {0};
+    WCHAR* strFilePart = NULL;
+
+    GetFullPathName( strStartAt, MAX_PATH, strFullPath, &strFilePart );
+    if( strFilePart == NULL )
+        return false;
+   
+    while( strFilePart != NULL && *strFilePart != '\0' )
+    {
+        StringCchPrintf( strFullFileName, MAX_PATH, L"%s\\%s", strFullPath, strLeafName ); 
+        if( GetFileAttributes( strFullFileName ) != 0xFFFFFFFF )
+        {
+            StringCchCopy( strSearchPath, cchSearch, strFullFileName ); 
+            return true;
+        }
+
+        StringCchPrintf( strSearch, MAX_PATH, L"%s\\..", strFullPath ); 
+        GetFullPathName( strSearch, MAX_PATH, strFullPath, &strFilePart );
+    }
+
+    return false;
+}
+
+
+//--------------------------------------------------------------------------------------
+// CDXUTResourceCache
+//--------------------------------------------------------------------------------------
+
+
+CDXUTResourceCache::~CDXUTResourceCache()
+{
+    OnDestroyDevice();
+
+    m_TextureCache.RemoveAll();
+    m_EffectCache.RemoveAll();
+    m_FontCache.RemoveAll();
+}
+
+
+HRESULT CDXUTResourceCache::CreateTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, LPDIRECT3DTEXTURE9 *ppTexture )
+{
+    return CreateTextureFromFileEx( pDevice, pSrcFile, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT,
+                                    0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT,
+                                    0, NULL, NULL, ppTexture );
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTResourceCache::CreateTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Width, UINT Height, UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO *pSrcInfo, PALETTEENTRY *pPalette, LPDIRECT3DTEXTURE9 *ppTexture )
+{
+    // Search the cache for a matching entry.
+    for( int i = 0; i < m_TextureCache.GetSize(); ++i )
+    {
+        DXUTCache_Texture &Entry = m_TextureCache[i];
+        if( Entry.Location == DXUTCACHE_LOCATION_FILE &&
+            !lstrcmpW( Entry.wszSource, pSrcFile ) &&
+            Entry.Width == Width &&
+            Entry.Height == Height &&
+            Entry.MipLevels == MipLevels &&
+            Entry.Usage == Usage &&
+            Entry.Format == Format &&
+            Entry.Pool == Pool &&
+            Entry.Type == D3DRTYPE_TEXTURE )
+        {
+            // A match is found. Obtain the IDirect3DTexture9 interface and return that.
+            return Entry.pTexture->QueryInterface( IID_IDirect3DTexture9, (LPVOID*)ppTexture );
+        }
+    }
+
+    HRESULT hr;
+
+    // No matching entry.  Load the resource and create a new entry.
+    hr = D3DXCreateTextureFromFileEx( pDevice, pSrcFile, Width, Height, MipLevels, Usage, Format,
+                                      Pool, Filter, MipFilter, ColorKey, pSrcInfo, pPalette, ppTexture );
+    if( FAILED( hr ) )
+        return hr;
+
+    DXUTCache_Texture NewEntry;
+    NewEntry.Location = DXUTCACHE_LOCATION_FILE;
+    StringCchCopy( NewEntry.wszSource, MAX_PATH, pSrcFile );
+    NewEntry.Width = Width;
+    NewEntry.Height = Height;
+    NewEntry.MipLevels = MipLevels;
+    NewEntry.Usage = Usage;
+    NewEntry.Format = Format;
+    NewEntry.Pool = Pool;
+    NewEntry.Type = D3DRTYPE_TEXTURE;
+    (*ppTexture)->QueryInterface( IID_IDirect3DBaseTexture9, (LPVOID*)&NewEntry.pTexture );
+
+    m_TextureCache.Add( NewEntry );
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTResourceCache::CreateTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, LPCTSTR pSrcResource, LPDIRECT3DTEXTURE9 *ppTexture )
+{
+    return CreateTextureFromResourceEx( pDevice, hSrcModule, pSrcResource, D3DX_DEFAULT, D3DX_DEFAULT,
+                                        D3DX_DEFAULT, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT,
+                                        D3DX_DEFAULT, 0, NULL, NULL, ppTexture );
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTResourceCache::CreateTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, LPCTSTR pSrcResource, UINT Width, UINT Height, UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO *pSrcInfo, PALETTEENTRY *pPalette, LPDIRECT3DTEXTURE9 *ppTexture )
+{
+    // Search the cache for a matching entry.
+    for( int i = 0; i < m_TextureCache.GetSize(); ++i )
+    {
+        DXUTCache_Texture &Entry = m_TextureCache[i];
+        if( Entry.Location == DXUTCACHE_LOCATION_RESOURCE &&
+            Entry.hSrcModule == hSrcModule &&
+            !lstrcmpW( Entry.wszSource, pSrcResource ) &&
+            Entry.Width == Width &&
+            Entry.Height == Height &&
+            Entry.MipLevels == MipLevels &&
+            Entry.Usage == Usage &&
+            Entry.Format == Format &&
+            Entry.Pool == Pool &&
+            Entry.Type == D3DRTYPE_TEXTURE )
+        {
+            // A match is found. Obtain the IDirect3DTexture9 interface and return that.
+            return Entry.pTexture->QueryInterface( IID_IDirect3DTexture9, (LPVOID*)ppTexture );
+        }
+    }
+
+    HRESULT hr;
+
+    // No matching entry.  Load the resource and create a new entry.
+    hr = D3DXCreateTextureFromResourceEx( pDevice, hSrcModule, pSrcResource, Width, Height, MipLevels, Usage,
+                                          Format, Pool, Filter, MipFilter, ColorKey, pSrcInfo, pPalette, ppTexture );
+    if( FAILED( hr ) )
+        return hr;
+
+    DXUTCache_Texture NewEntry;
+    NewEntry.Location = DXUTCACHE_LOCATION_RESOURCE;
+    NewEntry.hSrcModule = hSrcModule;
+    StringCchCopy( NewEntry.wszSource, MAX_PATH, pSrcResource );
+    NewEntry.Width = Width;
+    NewEntry.Height = Height;
+    NewEntry.MipLevels = MipLevels;
+    NewEntry.Usage = Usage;
+    NewEntry.Format = Format;
+    NewEntry.Pool = Pool;
+    NewEntry.Type = D3DRTYPE_TEXTURE;
+    (*ppTexture)->QueryInterface( IID_IDirect3DBaseTexture9, (LPVOID*)&NewEntry.pTexture );
+
+    m_TextureCache.Add( NewEntry );
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTResourceCache::CreateCubeTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, LPDIRECT3DCUBETEXTURE9 *ppCubeTexture )
+{
+    return CreateCubeTextureFromFileEx( pDevice, pSrcFile, D3DX_DEFAULT, D3DX_DEFAULT, 0,
+                                        D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT,
+                                        0, NULL, NULL, ppCubeTexture );
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTResourceCache::CreateCubeTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Size, UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO *pSrcInfo, PALETTEENTRY *pPalette, LPDIRECT3DCUBETEXTURE9 *ppCubeTexture )
+{
+    // Search the cache for a matching entry.
+    for( int i = 0; i < m_TextureCache.GetSize(); ++i )
+    {
+        DXUTCache_Texture &Entry = m_TextureCache[i];
+        if( Entry.Location == DXUTCACHE_LOCATION_FILE &&
+            !lstrcmpW( Entry.wszSource, pSrcFile ) &&
+            Entry.Width == Size &&
+            Entry.MipLevels == MipLevels &&
+            Entry.Usage == Usage &&
+            Entry.Format == Format &&
+            Entry.Pool == Pool &&
+            Entry.Type == D3DRTYPE_CUBETEXTURE )
+        {
+            // A match is found. Obtain the IDirect3DCubeTexture9 interface and return that.
+            return Entry.pTexture->QueryInterface( IID_IDirect3DCubeTexture9, (LPVOID*)ppCubeTexture );
+        }
+    }
+
+    HRESULT hr;
+
+    // No matching entry.  Load the resource and create a new entry.
+    hr = D3DXCreateCubeTextureFromFileEx( pDevice, pSrcFile, Size, MipLevels, Usage, Format, Pool, Filter,
+                                          MipFilter, ColorKey, pSrcInfo, pPalette, ppCubeTexture );
+    if( FAILED( hr ) )
+        return hr;
+
+    DXUTCache_Texture NewEntry;
+    NewEntry.Location = DXUTCACHE_LOCATION_FILE;
+    StringCchCopy( NewEntry.wszSource, MAX_PATH, pSrcFile );
+    NewEntry.Width = Size;
+    NewEntry.MipLevels = MipLevels;
+    NewEntry.Usage = Usage;
+    NewEntry.Format = Format;
+    NewEntry.Pool = Pool;
+    NewEntry.Type = D3DRTYPE_CUBETEXTURE;
+    (*ppCubeTexture)->QueryInterface( IID_IDirect3DBaseTexture9, (LPVOID*)&NewEntry.pTexture );
+
+    m_TextureCache.Add( NewEntry );
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTResourceCache::CreateCubeTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, LPCTSTR pSrcResource, LPDIRECT3DCUBETEXTURE9 *ppCubeTexture )
+{
+    return CreateCubeTextureFromResourceEx( pDevice, hSrcModule, pSrcResource, D3DX_DEFAULT, D3DX_DEFAULT,
+                                            0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT,
+                                            0, NULL, NULL, ppCubeTexture );
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTResourceCache::CreateCubeTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, LPCTSTR pSrcResource, UINT Size, UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO *pSrcInfo, PALETTEENTRY *pPalette, LPDIRECT3DCUBETEXTURE9 *ppCubeTexture )
+{
+    // Search the cache for a matching entry.
+    for( int i = 0; i < m_TextureCache.GetSize(); ++i )
+    {
+        DXUTCache_Texture &Entry = m_TextureCache[i];
+        if( Entry.Location == DXUTCACHE_LOCATION_RESOURCE &&
+            Entry.hSrcModule == hSrcModule &&
+            !lstrcmpW( Entry.wszSource, pSrcResource ) &&
+            Entry.Width == Size &&
+            Entry.MipLevels == MipLevels &&
+            Entry.Usage == Usage &&
+            Entry.Format == Format &&
+            Entry.Pool == Pool &&
+            Entry.Type == D3DRTYPE_CUBETEXTURE )
+        {
+            // A match is found. Obtain the IDirect3DCubeTexture9 interface and return that.
+            return Entry.pTexture->QueryInterface( IID_IDirect3DCubeTexture9, (LPVOID*)ppCubeTexture );
+        }
+    }
+
+    HRESULT hr;
+
+    // No matching entry.  Load the resource and create a new entry.
+    hr = D3DXCreateCubeTextureFromResourceEx( pDevice, hSrcModule, pSrcResource, Size, MipLevels, Usage, Format,
+                                              Pool, Filter, MipFilter, ColorKey, pSrcInfo, pPalette, ppCubeTexture );
+    if( FAILED( hr ) )
+        return hr;
+
+    DXUTCache_Texture NewEntry;
+    NewEntry.Location = DXUTCACHE_LOCATION_RESOURCE;
+    NewEntry.hSrcModule = hSrcModule;
+    StringCchCopy( NewEntry.wszSource, MAX_PATH, pSrcResource );
+    NewEntry.Width = Size;
+    NewEntry.MipLevels = MipLevels;
+    NewEntry.Usage = Usage;
+    NewEntry.Format = Format;
+    NewEntry.Pool = Pool;
+    NewEntry.Type = D3DRTYPE_CUBETEXTURE;
+    (*ppCubeTexture)->QueryInterface( IID_IDirect3DBaseTexture9, (LPVOID*)&NewEntry.pTexture );
+
+    m_TextureCache.Add( NewEntry );
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTResourceCache::CreateVolumeTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, LPDIRECT3DVOLUMETEXTURE9 *ppVolumeTexture )
+{
+    return CreateVolumeTextureFromFileEx( pDevice, pSrcFile, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT,
+                                          0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT,
+                                          0, NULL, NULL, ppVolumeTexture );
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTResourceCache::CreateVolumeTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Width, UINT Height, UINT Depth, UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO *pSrcInfo, PALETTEENTRY *pPalette, LPDIRECT3DVOLUMETEXTURE9 *ppTexture )
+{
+    // Search the cache for a matching entry.
+    for( int i = 0; i < m_TextureCache.GetSize(); ++i )
+    {
+        DXUTCache_Texture &Entry = m_TextureCache[i];
+        if( Entry.Location == DXUTCACHE_LOCATION_FILE &&
+            !lstrcmpW( Entry.wszSource, pSrcFile ) &&
+            Entry.Width == Width &&
+            Entry.Height == Height &&
+            Entry.Depth == Depth &&
+            Entry.MipLevels == MipLevels &&
+            Entry.Usage == Usage &&
+            Entry.Format == Format &&
+            Entry.Pool == Pool &&
+            Entry.Type == D3DRTYPE_VOLUMETEXTURE )
+        {
+            // A match is found. Obtain the IDirect3DVolumeTexture9 interface and return that.
+            return Entry.pTexture->QueryInterface( IID_IDirect3DVolumeTexture9, (LPVOID*)ppTexture );
+        }
+    }
+
+    HRESULT hr;
+
+    // No matching entry.  Load the resource and create a new entry.
+    hr = D3DXCreateVolumeTextureFromFileEx( pDevice, pSrcFile, Width, Height, Depth, MipLevels, Usage, Format,
+                                            Pool, Filter, MipFilter, ColorKey, pSrcInfo, pPalette, ppTexture );
+    if( FAILED( hr ) )
+        return hr;
+
+    DXUTCache_Texture NewEntry;
+    NewEntry.Location = DXUTCACHE_LOCATION_FILE;
+    StringCchCopy( NewEntry.wszSource, MAX_PATH, pSrcFile );
+    NewEntry.Width = Width;
+    NewEntry.Height = Height;
+    NewEntry.Depth = Depth;
+    NewEntry.MipLevels = MipLevels;
+    NewEntry.Usage = Usage;
+    NewEntry.Format = Format;
+    NewEntry.Pool = Pool;
+    NewEntry.Type = D3DRTYPE_VOLUMETEXTURE;
+    (*ppTexture)->QueryInterface( IID_IDirect3DBaseTexture9, (LPVOID*)&NewEntry.pTexture );
+
+    m_TextureCache.Add( NewEntry );
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTResourceCache::CreateVolumeTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, LPCTSTR pSrcResource, LPDIRECT3DVOLUMETEXTURE9 *ppVolumeTexture )
+{
+    return CreateVolumeTextureFromResourceEx( pDevice, hSrcModule, pSrcResource, D3DX_DEFAULT, D3DX_DEFAULT,
+                                              D3DX_DEFAULT, D3DX_DEFAULT, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED,
+                                              D3DX_DEFAULT, D3DX_DEFAULT, 0, NULL, NULL, ppVolumeTexture );
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTResourceCache::CreateVolumeTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, LPCTSTR pSrcResource, UINT Width, UINT Height, UINT Depth, UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO *pSrcInfo, PALETTEENTRY *pPalette, LPDIRECT3DVOLUMETEXTURE9 *ppVolumeTexture )
+{
+    // Search the cache for a matching entry.
+    for( int i = 0; i < m_TextureCache.GetSize(); ++i )
+    {
+        DXUTCache_Texture &Entry = m_TextureCache[i];
+        if( Entry.Location == DXUTCACHE_LOCATION_RESOURCE &&
+            Entry.hSrcModule == hSrcModule &&
+            !lstrcmpW( Entry.wszSource, pSrcResource ) &&
+            Entry.Width == Width &&
+            Entry.Height == Height &&
+            Entry.Depth == Depth &&
+            Entry.MipLevels == MipLevels &&
+            Entry.Usage == Usage &&
+            Entry.Format == Format &&
+            Entry.Pool == Pool &&
+            Entry.Type == D3DRTYPE_VOLUMETEXTURE )
+        {
+            // A match is found. Obtain the IDirect3DVolumeTexture9 interface and return that.
+            return Entry.pTexture->QueryInterface( IID_IDirect3DVolumeTexture9, (LPVOID*)ppVolumeTexture );
+        }
+    }
+
+    HRESULT hr;
+
+    // No matching entry.  Load the resource and create a new entry.
+    hr = D3DXCreateVolumeTextureFromResourceEx( pDevice, hSrcModule, pSrcResource, Width, Height, Depth, MipLevels, Usage,
+                                                Format, Pool, Filter, MipFilter, ColorKey, pSrcInfo, pPalette, ppVolumeTexture );
+    if( FAILED( hr ) )
+        return hr;
+
+    DXUTCache_Texture NewEntry;
+    NewEntry.Location = DXUTCACHE_LOCATION_RESOURCE;
+    NewEntry.hSrcModule = hSrcModule;
+    StringCchCopy( NewEntry.wszSource, MAX_PATH, pSrcResource );
+    NewEntry.Width = Width;
+    NewEntry.Height = Height;
+    NewEntry.Depth = Depth;
+    NewEntry.MipLevels = MipLevels;
+    NewEntry.Usage = Usage;
+    NewEntry.Format = Format;
+    NewEntry.Pool = Pool;
+    NewEntry.Type = D3DRTYPE_VOLUMETEXTURE;
+    (*ppVolumeTexture)->QueryInterface( IID_IDirect3DBaseTexture9, (LPVOID*)&NewEntry.pTexture );
+
+    m_TextureCache.Add( NewEntry );
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTResourceCache::CreateFont( LPDIRECT3DDEVICE9 pDevice, UINT Height, UINT Width, UINT Weight, UINT MipLevels, BOOL Italic, DWORD CharSet, DWORD OutputPrecision, DWORD Quality, DWORD PitchAndFamily, LPCTSTR pFacename, LPD3DXFONT *ppFont )
+{
+    D3DXFONT_DESCW Desc;
+    
+    Desc.Height = Height;
+    Desc.Width = Width;
+    Desc.Weight = Weight;
+    Desc.MipLevels = MipLevels;
+    Desc.Italic = Italic;
+    Desc.CharSet = (BYTE)CharSet;
+    Desc.OutputPrecision = (BYTE)OutputPrecision;
+    Desc.Quality = (BYTE)Quality;
+    Desc.PitchAndFamily = (BYTE)PitchAndFamily;
+    StringCchCopy( Desc.FaceName, LF_FACESIZE, pFacename );
+
+    return CreateFontIndirect( pDevice, &Desc, ppFont );
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTResourceCache::CreateFontIndirect( LPDIRECT3DDEVICE9 pDevice, CONST D3DXFONT_DESC *pDesc, LPD3DXFONT *ppFont )
+{
+    // Search the cache for a matching entry.
+    for( int i = 0; i < m_FontCache.GetSize(); ++i )
+    {
+        DXUTCache_Font &Entry = m_FontCache[i];
+
+        if( Entry.Width == pDesc->Width &&
+            Entry.Height == pDesc->Height &&
+            Entry.Weight == pDesc->Weight &&
+            Entry.MipLevels == pDesc->MipLevels &&
+            Entry.Italic == pDesc->Italic &&
+            Entry.CharSet == pDesc->CharSet &&
+            Entry.OutputPrecision == pDesc->OutputPrecision &&
+            Entry.Quality == pDesc->Quality &&
+            Entry.PitchAndFamily == pDesc->PitchAndFamily &&
+            CompareString( LOCALE_USER_DEFAULT, NORM_IGNORECASE,
+                           Entry.FaceName, -1,
+                           pDesc->FaceName, -1 ) == CSTR_EQUAL )
+        {
+            // A match is found.  Increment the reference and return the ID3DXFont object.
+            Entry.pFont->AddRef();
+            *ppFont = Entry.pFont;
+            return S_OK;
+        }
+    }
+
+    HRESULT hr;
+
+    // No matching entry.  Load the resource and create a new entry.
+    hr = D3DXCreateFontIndirect( pDevice, pDesc, ppFont );
+    if( FAILED( hr ) )
+        return hr;
+
+    DXUTCache_Font NewEntry;
+    (D3DXFONT_DESC &)NewEntry = *pDesc;
+    NewEntry.pFont = *ppFont;
+    NewEntry.pFont->AddRef();
+
+    m_FontCache.Add( NewEntry );
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTResourceCache::CreateEffectFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, const D3DXMACRO *pDefines, LPD3DXINCLUDE pInclude, DWORD Flags, LPD3DXEFFECTPOOL pPool, LPD3DXEFFECT *ppEffect, LPD3DXBUFFER *ppCompilationErrors )
+{
+    // Search the cache for a matching entry.
+    for( int i = 0; i < m_EffectCache.GetSize(); ++i )
+    {
+        DXUTCache_Effect &Entry = m_EffectCache[i];
+
+        if( Entry.Location == DXUTCACHE_LOCATION_FILE &&
+            !lstrcmpW( Entry.wszSource, pSrcFile ) &&
+            Entry.dwFlags == Flags )
+        {
+            // A match is found.  Increment the ref coutn and return the ID3DXEffect object.
+            *ppEffect = Entry.pEffect;
+            (*ppEffect)->AddRef();
+            return S_OK;
+        }
+    }
+
+    HRESULT hr;
+
+    // No matching entry.  Load the resource and create a new entry.
+    hr = D3DXCreateEffectFromFile( pDevice, pSrcFile, pDefines, pInclude, Flags, pPool, ppEffect, ppCompilationErrors );
+    if( FAILED( hr ) )
+        return hr;
+
+    DXUTCache_Effect NewEntry;
+    NewEntry.Location = DXUTCACHE_LOCATION_FILE;
+    StringCchCopy( NewEntry.wszSource, MAX_PATH, pSrcFile );
+    NewEntry.dwFlags = Flags;
+    NewEntry.pEffect = *ppEffect;
+    NewEntry.pEffect->AddRef();
+
+    m_EffectCache.Add( NewEntry );
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTResourceCache::CreateEffectFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, LPCTSTR pSrcResource, const D3DXMACRO *pDefines, LPD3DXINCLUDE pInclude, DWORD Flags, LPD3DXEFFECTPOOL pPool, LPD3DXEFFECT *ppEffect, LPD3DXBUFFER *ppCompilationErrors )
+{
+    // Search the cache for a matching entry.
+    for( int i = 0; i < m_EffectCache.GetSize(); ++i )
+    {
+        DXUTCache_Effect &Entry = m_EffectCache[i];
+
+        if( Entry.Location == DXUTCACHE_LOCATION_RESOURCE &&
+            Entry.hSrcModule == hSrcModule &&
+            !lstrcmpW( Entry.wszSource, pSrcResource ) &&
+            Entry.dwFlags == Flags )
+        {
+            // A match is found.  Increment the ref coutn and return the ID3DXEffect object.
+            *ppEffect = Entry.pEffect;
+            (*ppEffect)->AddRef();
+            return S_OK;
+        }
+    }
+
+    HRESULT hr;
+
+    // No matching entry.  Load the resource and create a new entry.
+    hr = D3DXCreateEffectFromResource( pDevice, hSrcModule, pSrcResource, pDefines, pInclude, Flags,
+                                       pPool, ppEffect, ppCompilationErrors );
+    if( FAILED( hr ) )
+        return hr;
+
+    DXUTCache_Effect NewEntry;
+    NewEntry.Location = DXUTCACHE_LOCATION_RESOURCE;
+    NewEntry.hSrcModule = hSrcModule;
+    StringCchCopy( NewEntry.wszSource, MAX_PATH, pSrcResource );
+    NewEntry.dwFlags = Flags;
+    NewEntry.pEffect = *ppEffect;
+    NewEntry.pEffect->AddRef();
+
+    m_EffectCache.Add( NewEntry );
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Device event callbacks
+//--------------------------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTResourceCache::OnCreateDevice( IDirect3DDevice9 *pd3dDevice )
+{
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTResourceCache::OnResetDevice( IDirect3DDevice9 *pd3dDevice )
+{
+    // Call OnResetDevice on all effect and font objects
+    for( int i = 0; i < m_EffectCache.GetSize(); ++i )
+        m_EffectCache[i].pEffect->OnResetDevice();
+    for( int i = 0; i < m_FontCache.GetSize(); ++i )
+        m_FontCache[i].pFont->OnResetDevice();
+
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTResourceCache::OnLostDevice()
+{
+    // Call OnLostDevice on all effect and font objects
+    for( int i = 0; i < m_EffectCache.GetSize(); ++i )
+        m_EffectCache[i].pEffect->OnLostDevice();
+    for( int i = 0; i < m_FontCache.GetSize(); ++i )
+        m_FontCache[i].pFont->OnLostDevice();
+
+    // Release all the default pool textures
+    for( int i = m_TextureCache.GetSize() - 1; i >= 0; --i )
+        if( m_TextureCache[i].Pool == D3DPOOL_DEFAULT )
+        {
+            SAFE_RELEASE( m_TextureCache[i].pTexture );
+            m_TextureCache.Remove( i );  // Remove the entry
+        }
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTResourceCache::OnDestroyDevice()
+{
+    // Release all resources
+    for( int i = m_EffectCache.GetSize() - 1; i >= 0; --i )
+    {
+        SAFE_RELEASE( m_EffectCache[i].pEffect );
+        m_EffectCache.Remove( i );
+    }
+    for( int i = m_FontCache.GetSize() - 1; i >= 0; --i )
+    {
+        SAFE_RELEASE( m_FontCache[i].pFont );
+        m_FontCache.Remove( i );
+    }
+    for( int i = m_TextureCache.GetSize() - 1; i >= 0; --i )
+    {
+        SAFE_RELEASE( m_TextureCache[i].pTexture );
+        m_TextureCache.Remove( i );
+    }
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+CD3DArcBall::CD3DArcBall()
+{
+    Reset();
+    m_vDownPt = D3DXVECTOR3(0,0,0);
+    m_vCurrentPt = D3DXVECTOR3(0,0,0);
+    m_Offset.x = m_Offset.y = 0;
+
+    RECT rc;
+    GetClientRect( GetForegroundWindow(), &rc );
+    SetWindow( rc.right, rc.bottom );
+}
+
+
+
+
+
+//--------------------------------------------------------------------------------------
+void CD3DArcBall::Reset()
+{
+    D3DXQuaternionIdentity( &m_qDown );
+    D3DXQuaternionIdentity( &m_qNow );
+    D3DXMatrixIdentity( &m_mRotation );
+    D3DXMatrixIdentity( &m_mTranslation );
+    D3DXMatrixIdentity( &m_mTranslationDelta );
+    m_bDrag = FALSE;
+    m_fRadiusTranslation = 1.0f;
+    m_fRadius = 1.0f;
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+D3DXVECTOR3 CD3DArcBall::ScreenToVector( float fScreenPtX, float fScreenPtY )
+{
+    // Scale to screen
+    FLOAT x   = -(fScreenPtX - m_Offset.x - m_nWidth/2)  / (m_fRadius*m_nWidth/2);
+    FLOAT y   =  (fScreenPtY - m_Offset.y - m_nHeight/2) / (m_fRadius*m_nHeight/2);
+
+    FLOAT z   = 0.0f;
+    FLOAT mag = x*x + y*y;
+
+    if( mag > 1.0f )
+    {
+        FLOAT scale = 1.0f/sqrtf(mag);
+        x *= scale;
+        y *= scale;
+    }
+    else
+        z = sqrtf( 1.0f - mag );
+
+    // Return vector
+    return D3DXVECTOR3( x, y, z );
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+D3DXQUATERNION CD3DArcBall::QuatFromBallPoints(const D3DXVECTOR3 &vFrom, const D3DXVECTOR3 &vTo)
+{
+    D3DXVECTOR3 vPart;
+    float fDot = D3DXVec3Dot(&vFrom, &vTo);
+    D3DXVec3Cross(&vPart, &vFrom, &vTo);
+
+    return D3DXQUATERNION(vPart.x, vPart.y, vPart.z, fDot);
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+void CD3DArcBall::OnBegin( int nX, int nY )
+{
+    // Only enter the drag state if the click falls
+    // inside the click rectangle.
+    if( nX >= m_Offset.x &&
+        nX < m_Offset.x + m_nWidth &&
+        nY >= m_Offset.y &&
+        nY < m_Offset.y + m_nHeight )
+    {
+        m_bDrag = true;
+        m_qDown = m_qNow;
+        m_vDownPt = ScreenToVector( (float)nX, (float)nY );
+    }
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+void CD3DArcBall::OnMove( int nX, int nY )
+{
+    if (m_bDrag) 
+    { 
+        m_vCurrentPt = ScreenToVector( (float)nX, (float)nY );
+        m_qNow = m_qDown * QuatFromBallPoints( m_vDownPt, m_vCurrentPt );
+    }
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+void CD3DArcBall::OnEnd()
+{
+    m_bDrag = false;
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+// Desc:
+//--------------------------------------------------------------------------------------
+LRESULT CD3DArcBall::HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    // Current mouse position
+    int iMouseX = (short)LOWORD(lParam);
+    int iMouseY = (short)HIWORD(lParam);
+
+    switch( uMsg )
+    {
+        case WM_LBUTTONDOWN:
+        case WM_LBUTTONDBLCLK:
+            SetCapture( hWnd );
+            OnBegin( iMouseX, iMouseY );
+            return TRUE;
+
+        case WM_LBUTTONUP:
+            ReleaseCapture();
+            OnEnd();
+            return TRUE;
+
+        case WM_RBUTTONDOWN:
+        case WM_RBUTTONDBLCLK:
+        case WM_MBUTTONDOWN:
+        case WM_MBUTTONDBLCLK:
+            SetCapture( hWnd );
+            // Store off the position of the cursor when the button is pressed
+            m_ptLastMouse.x = iMouseX;
+            m_ptLastMouse.y = iMouseY;
+            return TRUE;
+
+        case WM_RBUTTONUP:
+        case WM_MBUTTONUP:
+            ReleaseCapture();
+            return TRUE;
+
+        case WM_MOUSEMOVE:
+            if( MK_LBUTTON&wParam )
+            {
+                OnMove( iMouseX, iMouseY );
+            }
+            else if( (MK_RBUTTON&wParam) || (MK_MBUTTON&wParam) )
+            {
+                // Normalize based on size of window and bounding sphere radius
+                FLOAT fDeltaX = ( m_ptLastMouse.x-iMouseX ) * m_fRadiusTranslation / m_nWidth;
+                FLOAT fDeltaY = ( m_ptLastMouse.y-iMouseY ) * m_fRadiusTranslation / m_nHeight;
+
+                if( wParam & MK_RBUTTON )
+                {
+                    D3DXMatrixTranslation( &m_mTranslationDelta, -2*fDeltaX, 2*fDeltaY, 0.0f );
+                    D3DXMatrixMultiply( &m_mTranslation, &m_mTranslation, &m_mTranslationDelta );
+                }
+                else  // wParam & MK_MBUTTON
+                {
+                    D3DXMatrixTranslation( &m_mTranslationDelta, 0.0f, 0.0f, 5*fDeltaY );
+                    D3DXMatrixMultiply( &m_mTranslation, &m_mTranslation, &m_mTranslationDelta );
+                }
+
+                // Store mouse coordinate
+                m_ptLastMouse.x = iMouseX;
+                m_ptLastMouse.y = iMouseY;
+            }
+            return TRUE;
+    }
+
+    return FALSE;
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+// Constructor
+//--------------------------------------------------------------------------------------
+CBaseCamera::CBaseCamera()
+{
+    m_cKeysDown = 0;
+    ZeroMemory( m_aKeys, sizeof(BYTE)*CAM_MAX_KEYS );
+    ZeroMemory( m_GamePad, sizeof(DXUT_GAMEPAD)*DXUT_MAX_CONTROLLERS );
+
+    // Set attributes for the view matrix
+    D3DXVECTOR3 vEyePt    = D3DXVECTOR3(0.0f,0.0f,0.0f);
+    D3DXVECTOR3 vLookatPt = D3DXVECTOR3(0.0f,0.0f,1.0f);
+
+    // Setup the view matrix
+    SetViewParams( &vEyePt, &vLookatPt );
+
+    // Setup the projection matrix
+    SetProjParams( D3DX_PI/4, 1.0f, 1.0f, 1000.0f );
+
+    GetCursorPos( &m_ptLastMousePosition );
+    m_bMouseLButtonDown = false;
+    m_bMouseMButtonDown = false;
+    m_bMouseRButtonDown = false;
+    m_nCurrentButtonMask = 0;
+    m_nMouseWheelDelta = 0;
+
+    m_fCameraYawAngle = 0.0f;
+    m_fCameraPitchAngle = 0.0f;
+
+    SetRect( &m_rcDrag, LONG_MIN, LONG_MIN, LONG_MAX, LONG_MAX );
+    m_vVelocity     = D3DXVECTOR3(0,0,0);
+    m_bMovementDrag = false;
+    m_vVelocityDrag = D3DXVECTOR3(0,0,0);
+    m_fDragTimer    = 0.0f;
+    m_fTotalDragTimeToZero = 0.25;
+    m_vRotVelocity = D3DXVECTOR2(0,0);
+
+    m_fRotationScaler = 0.01f;           
+    m_fMoveScaler = 5.0f;           
+
+    m_bInvertPitch = false;
+    m_bEnableYAxisMovement = true;
+    m_bEnablePositionMovement = true;
+
+    m_vMouseDelta   = D3DXVECTOR2(0,0);
+    m_fFramesToSmoothMouseData = 2.0f;
+
+    m_bClipToBoundary = false;
+    m_vMinBoundary = D3DXVECTOR3(-1,-1,-1);
+    m_vMaxBoundary = D3DXVECTOR3(1,1,1);
+}
+
+
+//--------------------------------------------------------------------------------------
+// Client can call this to change the position and direction of camera
+//--------------------------------------------------------------------------------------
+VOID CBaseCamera::SetViewParams( D3DXVECTOR3* pvEyePt, D3DXVECTOR3* pvLookatPt )
+{
+    if( NULL == pvEyePt || NULL == pvLookatPt )
+        return;
+
+    m_vDefaultEye = m_vEye = *pvEyePt;
+    m_vDefaultLookAt = m_vLookAt = *pvLookatPt;
+
+    // Calc the view matrix
+    D3DXVECTOR3 vUp(0,1,0);
+    D3DXMatrixLookAtLH( &m_mView, pvEyePt, pvLookatPt, &vUp );
+
+    D3DXMATRIX mInvView;
+    D3DXMatrixInverse( &mInvView, NULL, &m_mView );
+
+    // The axis basis vectors and camera position are stored inside the 
+    // position matrix in the 4 rows of the camera's world matrix.
+    // To figure out the yaw/pitch of the camera, we just need the Z basis vector
+    D3DXVECTOR3* pZBasis = (D3DXVECTOR3*) &mInvView._31;
+
+    m_fCameraYawAngle   = atan2f( pZBasis->x, pZBasis->z );
+    float fLen = sqrtf(pZBasis->z*pZBasis->z + pZBasis->x*pZBasis->x);
+    m_fCameraPitchAngle = -atan2f( pZBasis->y, fLen );
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+// Calculates the projection matrix based on input params
+//--------------------------------------------------------------------------------------
+VOID CBaseCamera::SetProjParams( FLOAT fFOV, FLOAT fAspect, FLOAT fNearPlane,
+                                   FLOAT fFarPlane )
+{
+    // Set attributes for the projection matrix
+    m_fFOV        = fFOV;
+    m_fAspect     = fAspect;
+    m_fNearPlane  = fNearPlane;
+    m_fFarPlane   = fFarPlane;
+
+    D3DXMatrixPerspectiveFovLH( &m_mProj, fFOV, fAspect, fNearPlane, fFarPlane );
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+// Call this from your message proc so this class can handle window messages
+//--------------------------------------------------------------------------------------
+LRESULT CBaseCamera::HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    UNREFERENCED_PARAMETER( hWnd );
+    UNREFERENCED_PARAMETER( lParam );
+
+    switch( uMsg )
+    {
+        case WM_KEYDOWN:
+        {
+            // Map this key to a D3DUtil_CameraKeys enum and update the
+            // state of m_aKeys[] by adding the KEY_WAS_DOWN_MASK|KEY_IS_DOWN_MASK mask
+            // only if the key is not down
+            D3DUtil_CameraKeys mappedKey = MapKey( (UINT)wParam );
+            if( mappedKey != CAM_UNKNOWN )
+            {
+                if( FALSE == IsKeyDown(m_aKeys[mappedKey]) )
+                {
+                    m_aKeys[ mappedKey ] = KEY_WAS_DOWN_MASK | KEY_IS_DOWN_MASK;
+                    ++m_cKeysDown;
+                }
+            }
+            break;
+        }
+
+        case WM_KEYUP:
+        {
+            // Map this key to a D3DUtil_CameraKeys enum and update the
+            // state of m_aKeys[] by removing the KEY_IS_DOWN_MASK mask.
+            D3DUtil_CameraKeys mappedKey = MapKey( (UINT)wParam );
+            if( mappedKey != CAM_UNKNOWN && (DWORD)mappedKey < 8 )
+            {
+                m_aKeys[ mappedKey ] &= ~KEY_IS_DOWN_MASK;
+                --m_cKeysDown;
+            }
+            break;
+        }
+
+        case WM_RBUTTONDOWN:
+        case WM_MBUTTONDOWN:
+        case WM_LBUTTONDOWN:
+        case WM_RBUTTONDBLCLK:
+        case WM_MBUTTONDBLCLK:
+        case WM_LBUTTONDBLCLK:
+        {
+            // Compute the drag rectangle in screen coord.
+            POINT ptCursor = { (short)LOWORD(lParam), (short)HIWORD(lParam) };
+
+            // Update member var state
+            if( ( uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONDBLCLK ) && PtInRect( &m_rcDrag, ptCursor ) )
+                { m_bMouseLButtonDown = true; m_nCurrentButtonMask |= MOUSE_LEFT_BUTTON; }
+            if( ( uMsg == WM_MBUTTONDOWN || uMsg == WM_MBUTTONDBLCLK ) && PtInRect( &m_rcDrag, ptCursor ) )
+                { m_bMouseMButtonDown = true; m_nCurrentButtonMask |= MOUSE_MIDDLE_BUTTON; }
+            if( ( uMsg == WM_RBUTTONDOWN || uMsg == WM_RBUTTONDBLCLK ) && PtInRect( &m_rcDrag, ptCursor ) )
+                { m_bMouseRButtonDown = true; m_nCurrentButtonMask |= MOUSE_RIGHT_BUTTON; }
+
+            // Capture the mouse, so if the mouse button is 
+            // released outside the window, we'll get the WM_LBUTTONUP message
+            SetCapture(hWnd);
+            GetCursorPos( &m_ptLastMousePosition );
+            return TRUE;
+        }
+
+        case WM_RBUTTONUP: 
+        case WM_MBUTTONUP: 
+        case WM_LBUTTONUP:   
+        {
+            // Update member var state
+            if( uMsg == WM_LBUTTONUP ) { m_bMouseLButtonDown = false; m_nCurrentButtonMask &= ~MOUSE_LEFT_BUTTON; }
+            if( uMsg == WM_MBUTTONUP ) { m_bMouseMButtonDown = false; m_nCurrentButtonMask &= ~MOUSE_MIDDLE_BUTTON; }
+            if( uMsg == WM_RBUTTONUP ) { m_bMouseRButtonDown = false; m_nCurrentButtonMask &= ~MOUSE_RIGHT_BUTTON; }
+
+            // Release the capture if no mouse buttons down
+            if( !m_bMouseLButtonDown  && 
+                !m_bMouseRButtonDown &&
+                !m_bMouseMButtonDown )
+            {
+                ReleaseCapture();
+            }
+            break;
+        }
+
+        case WM_MOUSEWHEEL: 
+            // Update member var state
+            m_nMouseWheelDelta = (short)HIWORD(wParam) / 120;
+            break;
+    }
+
+    return FALSE;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Figure out the velocity based on keyboard input & drag if any
+//--------------------------------------------------------------------------------------
+void CBaseCamera::GetInput( bool bGetKeyboardInput, bool bGetMouseInput, bool bGetGamepadInput, bool bResetCursorAfterMove )
+{
+    m_vKeyboardDirection = D3DXVECTOR3(0,0,0);
+    if( bGetKeyboardInput )
+    {
+        // Update acceleration vector based on keyboard state
+        if( IsKeyDown(m_aKeys[CAM_MOVE_FORWARD]) )
+            m_vKeyboardDirection.z += 1.0f;
+        if( IsKeyDown(m_aKeys[CAM_MOVE_BACKWARD]) )
+            m_vKeyboardDirection.z -= 1.0f;
+        if( m_bEnableYAxisMovement )
+        {
+            if( IsKeyDown(m_aKeys[CAM_MOVE_UP]) )
+                m_vKeyboardDirection.y += 1.0f;
+            if( IsKeyDown(m_aKeys[CAM_MOVE_DOWN]) )
+                m_vKeyboardDirection.y -= 1.0f;
+        }
+        if( IsKeyDown(m_aKeys[CAM_STRAFE_RIGHT]) )
+            m_vKeyboardDirection.x += 1.0f;
+        if( IsKeyDown(m_aKeys[CAM_STRAFE_LEFT]) )
+            m_vKeyboardDirection.x -= 1.0f;
+    }
+
+    if( bGetMouseInput )
+    {
+        // Get current position of mouse
+        POINT ptCurMouseDelta;
+        POINT ptCurMousePos;
+        
+        if( GetCursorPos( &ptCurMousePos ) )
+        {
+            // Calc how far it's moved since last frame
+            ptCurMouseDelta.x = ptCurMousePos.x - m_ptLastMousePosition.x;
+            ptCurMouseDelta.y = ptCurMousePos.y - m_ptLastMousePosition.y;
+            
+            // Record current position for next time
+            m_ptLastMousePosition = ptCurMousePos;
+        }
+        else
+        {
+            // If GetCursorPos() returns false, just set delta to zero
+            ptCurMouseDelta.x = 0;
+            ptCurMouseDelta.y = 0;
+        }
+
+        if( bResetCursorAfterMove && DXUTIsActive() )
+        {
+            // Set position of camera to center of desktop, 
+            // so it always has room to move.  This is very useful
+            // if the cursor is hidden.  If this isn't done and cursor is hidden, 
+            // then invisible cursor will hit the edge of the screen 
+            // and the user can't tell what happened
+            POINT ptCenter;
+
+            // Get the center of the current monitor
+            MONITORINFO mi;
+            mi.cbSize = sizeof(MONITORINFO);
+            DXUTGetMonitorInfo( DXUTMonitorFromWindow(DXUTGetHWND(),MONITOR_DEFAULTTONEAREST), &mi );
+            ptCenter.x = (mi.rcMonitor.left + mi.rcMonitor.right) / 2;
+            ptCenter.y = (mi.rcMonitor.top + mi.rcMonitor.bottom) / 2;   
+            SetCursorPos( ptCenter.x, ptCenter.y );
+            m_ptLastMousePosition = ptCenter;
+        }
+
+        // Smooth the relative mouse data over a few frames so it isn't 
+        // jerky when moving slowly at low frame rates.
+        float fPercentOfNew =  1.0f / m_fFramesToSmoothMouseData;
+        float fPercentOfOld =  1.0f - fPercentOfNew;
+        m_vMouseDelta.x = m_vMouseDelta.x*fPercentOfOld + ptCurMouseDelta.x*fPercentOfNew;
+        m_vMouseDelta.y = m_vMouseDelta.y*fPercentOfOld + ptCurMouseDelta.y*fPercentOfNew;
+
+    }
+
+    if( bGetGamepadInput )
+    {
+        m_vGamePadLeftThumb = D3DXVECTOR3(0,0,0);
+        m_vGamePadRightThumb = D3DXVECTOR3(0,0,0);
+
+        // Get controller state
+        for( DWORD iUserIndex=0; iUserIndex<DXUT_MAX_CONTROLLERS; iUserIndex++ )
+        {
+            DXUTGetGamepadState( iUserIndex, &m_GamePad[iUserIndex], true, true );
+
+            // Mark time if the controller is in a non-zero state
+            if( m_GamePad[iUserIndex].wButtons || 
+                m_GamePad[iUserIndex].sThumbLX || m_GamePad[iUserIndex].sThumbLX || 
+                m_GamePad[iUserIndex].sThumbRX || m_GamePad[iUserIndex].sThumbRY || 
+                m_GamePad[iUserIndex].bLeftTrigger || m_GamePad[iUserIndex].bRightTrigger )
+            {
+                m_GamePadLastActive[iUserIndex] = DXUTGetTime();
+            }
+        }
+
+        // Find out which controller was non-zero last
+        int iMostRecentlyActive = -1;
+        double fMostRecentlyActiveTime = 0.0f;
+        for( DWORD iUserIndex=0; iUserIndex<DXUT_MAX_CONTROLLERS; iUserIndex++ )
+        {
+            if( m_GamePadLastActive[iUserIndex] > fMostRecentlyActiveTime )
+            {
+                fMostRecentlyActiveTime = m_GamePadLastActive[iUserIndex];
+                iMostRecentlyActive = iUserIndex;
+            }
+        }
+
+        // Use the most recent non-zero controller if its connected
+        if( iMostRecentlyActive >= 0 && m_GamePad[iMostRecentlyActive].bConnected )
+        {
+            m_vGamePadLeftThumb.x = m_GamePad[iMostRecentlyActive].fThumbLX;
+            m_vGamePadLeftThumb.y = 0.0f;
+            m_vGamePadLeftThumb.z = m_GamePad[iMostRecentlyActive].fThumbLY;
+
+            m_vGamePadRightThumb.x = m_GamePad[iMostRecentlyActive].fThumbRX;
+            m_vGamePadRightThumb.y = 0.0f;
+            m_vGamePadRightThumb.z = m_GamePad[iMostRecentlyActive].fThumbRY;
+        }
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+// Figure out the velocity based on keyboard input & drag if any
+//--------------------------------------------------------------------------------------
+void CBaseCamera::UpdateVelocity( float fElapsedTime )
+{
+    D3DXMATRIX mRotDelta;
+
+    D3DXVECTOR2 vGamePadRightThumb = D3DXVECTOR2(m_vGamePadRightThumb.x, -m_vGamePadRightThumb.z);
+    m_vRotVelocity = m_vMouseDelta * m_fRotationScaler + vGamePadRightThumb * 0.02f;
+
+    D3DXVECTOR3 vAccel = m_vKeyboardDirection + m_vGamePadLeftThumb;
+
+    // Normalize vector so if moving 2 dirs (left & forward), 
+    // the camera doesn't move faster than if moving in 1 dir
+    D3DXVec3Normalize( &vAccel, &vAccel );
+
+    // Scale the acceleration vector
+    vAccel *= m_fMoveScaler;
+
+    if( m_bMovementDrag )
+    {
+        // Is there any acceleration this frame?
+        if( D3DXVec3LengthSq( &vAccel ) > 0 )
+        {
+            // If so, then this means the user has pressed a movement key\
+            // so change the velocity immediately to acceleration 
+            // upon keyboard input.  This isn't normal physics
+            // but it will give a quick response to keyboard input
+            m_vVelocity = vAccel;
+            m_fDragTimer = m_fTotalDragTimeToZero;
+            m_vVelocityDrag = vAccel / m_fDragTimer;
+        }
+        else 
+        {
+            // If no key being pressed, then slowly decrease velocity to 0
+            if( m_fDragTimer > 0 )
+            {
+                // Drag until timer is <= 0
+                m_vVelocity -= m_vVelocityDrag * fElapsedTime;
+                m_fDragTimer -= fElapsedTime;
+            }
+            else
+            {
+                // Zero velocity
+                m_vVelocity = D3DXVECTOR3(0,0,0);
+            }
+        }
+    }
+    else
+    {
+        // No drag, so immediately change the velocity
+        m_vVelocity = vAccel;
+    }
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+// Clamps pV to lie inside m_vMinBoundary & m_vMaxBoundary
+//--------------------------------------------------------------------------------------
+void CBaseCamera::ConstrainToBoundary( D3DXVECTOR3* pV )
+{
+    // Constrain vector to a bounding box 
+    pV->x = __max(pV->x, m_vMinBoundary.x);
+    pV->y = __max(pV->y, m_vMinBoundary.y);
+    pV->z = __max(pV->z, m_vMinBoundary.z);
+
+    pV->x = __min(pV->x, m_vMaxBoundary.x);
+    pV->y = __min(pV->y, m_vMaxBoundary.y);
+    pV->z = __min(pV->z, m_vMaxBoundary.z);
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+// Maps a windows virtual key to an enum
+//--------------------------------------------------------------------------------------
+D3DUtil_CameraKeys CBaseCamera::MapKey( UINT nKey )
+{
+    // This could be upgraded to a method that's user-definable but for 
+    // simplicity, we'll use a hardcoded mapping.
+    switch( nKey )
+    {
+        case VK_CONTROL:  return CAM_CONTROLDOWN;
+        case VK_LEFT:  return CAM_STRAFE_LEFT;
+        case VK_RIGHT: return CAM_STRAFE_RIGHT;
+        case VK_UP:    return CAM_MOVE_FORWARD;
+        case VK_DOWN:  return CAM_MOVE_BACKWARD;
+        case VK_PRIOR: return CAM_MOVE_UP;        // pgup
+        case VK_NEXT:  return CAM_MOVE_DOWN;      // pgdn
+
+        case 'A':      return CAM_STRAFE_LEFT;
+        case 'D':      return CAM_STRAFE_RIGHT;
+        case 'W':      return CAM_MOVE_FORWARD;
+        case 'S':      return CAM_MOVE_BACKWARD;
+        case 'Q':      return CAM_MOVE_DOWN;
+        case 'E':      return CAM_MOVE_UP;
+
+        case VK_NUMPAD4: return CAM_STRAFE_LEFT;
+        case VK_NUMPAD6: return CAM_STRAFE_RIGHT;
+        case VK_NUMPAD8: return CAM_MOVE_FORWARD;
+        case VK_NUMPAD2: return CAM_MOVE_BACKWARD;
+        case VK_NUMPAD9: return CAM_MOVE_UP;        
+        case VK_NUMPAD3: return CAM_MOVE_DOWN;      
+
+        case VK_HOME:   return CAM_RESET;
+    }
+
+    return CAM_UNKNOWN;
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+// Reset the camera's position back to the default
+//--------------------------------------------------------------------------------------
+VOID CBaseCamera::Reset()
+{
+    SetViewParams( &m_vDefaultEye, &m_vDefaultLookAt );
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+// Constructor
+//--------------------------------------------------------------------------------------
+CFirstPersonCamera::CFirstPersonCamera() :
+    m_nActiveButtonMask( 0x07 )
+{
+	m_bRotateWithoutButtonDown = false;
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+// Update the view matrix based on user input & elapsed time
+//--------------------------------------------------------------------------------------
+VOID CFirstPersonCamera::FrameMove( FLOAT fElapsedTime )
+{
+    if( DXUTGetGlobalTimer()->IsStopped() )
+        fElapsedTime = 1.0f / DXUTGetFPS();
+
+    if( IsKeyDown(m_aKeys[CAM_RESET]) )
+        Reset();
+
+    // Get keyboard/mouse/gamepad input
+    GetInput( m_bEnablePositionMovement, (m_nActiveButtonMask & m_nCurrentButtonMask) || m_bRotateWithoutButtonDown, true, m_bResetCursorAfterMove );
+
+    // Get amount of velocity based on the keyboard input and drag (if any)
+    UpdateVelocity( fElapsedTime );
+
+    // Simple euler method to calculate position delta
+    D3DXVECTOR3 vPosDelta = m_vVelocity * fElapsedTime;
+
+    // If rotating the camera 
+    if( (m_nActiveButtonMask & m_nCurrentButtonMask) || 
+        m_bRotateWithoutButtonDown || 
+        m_vGamePadRightThumb.x != 0 || 
+        m_vGamePadRightThumb.z != 0 )
+    {
+        // Update the pitch & yaw angle based on mouse movement
+        float fYawDelta   = m_vRotVelocity.x;
+        float fPitchDelta = m_vRotVelocity.y;
+
+        // Invert pitch if requested
+        if( m_bInvertPitch )
+            fPitchDelta = -fPitchDelta;
+
+        m_fCameraPitchAngle += fPitchDelta;
+        m_fCameraYawAngle   += fYawDelta;
+
+        // Limit pitch to straight up or straight down
+        m_fCameraPitchAngle = __max( -D3DX_PI/2.0f,  m_fCameraPitchAngle );
+        m_fCameraPitchAngle = __min( +D3DX_PI/2.0f,  m_fCameraPitchAngle );
+    }
+
+    // Make a rotation matrix based on the camera's yaw & pitch
+    D3DXMATRIX mCameraRot;
+    D3DXMatrixRotationYawPitchRoll( &mCameraRot, m_fCameraYawAngle, m_fCameraPitchAngle, 0 );
+
+    // Transform vectors based on camera's rotation matrix
+    D3DXVECTOR3 vWorldUp, vWorldAhead;
+    D3DXVECTOR3 vLocalUp    = D3DXVECTOR3(0,1,0);
+    D3DXVECTOR3 vLocalAhead = D3DXVECTOR3(0,0,1);
+    D3DXVec3TransformCoord( &vWorldUp, &vLocalUp, &mCameraRot );
+    D3DXVec3TransformCoord( &vWorldAhead, &vLocalAhead, &mCameraRot );
+
+    // Transform the position delta by the camera's rotation 
+    D3DXVECTOR3 vPosDeltaWorld;
+    if( !m_bEnableYAxisMovement )
+    {
+        // If restricting Y movement, do not include pitch
+        // when transforming position delta vector.
+        D3DXMatrixRotationYawPitchRoll( &mCameraRot, m_fCameraYawAngle, 0.0f, 0.0f );
+    }
+    D3DXVec3TransformCoord( &vPosDeltaWorld, &vPosDelta, &mCameraRot );
+
+    // Move the eye position 
+    m_vEye += vPosDeltaWorld;
+    if( m_bClipToBoundary )
+        ConstrainToBoundary( &m_vEye );
+
+    // Update the lookAt position based on the eye position 
+    m_vLookAt = m_vEye + vWorldAhead;
+
+    // Update the view matrix
+    D3DXMatrixLookAtLH( &m_mView, &m_vEye, &m_vLookAt, &vWorldUp );
+
+    D3DXMatrixInverse( &m_mCameraWorld, NULL, &m_mView );
+}
+
+
+//--------------------------------------------------------------------------------------
+// Enable or disable each of the mouse buttons for rotation drag.
+//--------------------------------------------------------------------------------------
+void CFirstPersonCamera::SetRotateButtons( bool bLeft, bool bMiddle, bool bRight, bool bRotateWithoutButtonDown )
+{
+    m_nActiveButtonMask = ( bLeft ? MOUSE_LEFT_BUTTON : 0 ) |
+                          ( bMiddle ? MOUSE_MIDDLE_BUTTON : 0 ) |
+                          ( bRight ? MOUSE_RIGHT_BUTTON : 0 );
+	m_bRotateWithoutButtonDown = bRotateWithoutButtonDown;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Constructor 
+//--------------------------------------------------------------------------------------
+CModelViewerCamera::CModelViewerCamera()
+{
+    D3DXMatrixIdentity( &m_mWorld );
+    D3DXMatrixIdentity( &m_mModelRot );
+    D3DXMatrixIdentity( &m_mModelLastRot );    
+    D3DXMatrixIdentity( &m_mCameraRotLast );    
+    m_vModelCenter = D3DXVECTOR3(0,0,0);
+    m_fRadius    = 5.0f;
+    m_fDefaultRadius = 5.0f;
+    m_fMinRadius = 1.0f;
+    m_fMaxRadius = FLT_MAX;
+    m_bLimitPitch = false;
+    m_bEnablePositionMovement = false;
+    m_bAttachCameraToModel = false;
+
+    m_nRotateModelButtonMask  = MOUSE_LEFT_BUTTON;
+    m_nZoomButtonMask         = MOUSE_WHEEL;
+    m_nRotateCameraButtonMask = MOUSE_RIGHT_BUTTON;
+    m_bDragSinceLastUpdate    = true;
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+// Update the view matrix & the model's world matrix based 
+//       on user input & elapsed time
+//--------------------------------------------------------------------------------------
+VOID CModelViewerCamera::FrameMove( FLOAT fElapsedTime )
+{
+    if( IsKeyDown(m_aKeys[CAM_RESET]) )
+        Reset();
+
+    // If no dragged has happend since last time FrameMove is called,
+    // and no camera key is held down, then no need to handle again.
+    if( !m_bDragSinceLastUpdate && 0 == m_cKeysDown )
+        return;
+    m_bDragSinceLastUpdate = false;
+
+    // Get keyboard/mouse/gamepad input
+    GetInput( m_bEnablePositionMovement, m_nCurrentButtonMask != 0, true, false );
+
+    // Get amount of velocity based on the keyboard input and drag (if any)
+    UpdateVelocity( fElapsedTime );
+
+    // Simple euler method to calculate position delta
+    D3DXVECTOR3 vPosDelta = m_vVelocity * fElapsedTime;
+
+    // Change the radius from the camera to the model based on wheel scrolling
+    if( m_nMouseWheelDelta && m_nZoomButtonMask == MOUSE_WHEEL )
+        m_fRadius -= m_nMouseWheelDelta * m_fRadius * 0.1f;
+    m_fRadius = __min( m_fMaxRadius, m_fRadius );
+    m_fRadius = __max( m_fMinRadius, m_fRadius );
+    m_nMouseWheelDelta = 0;
+
+    // Get the inverse of the arcball's rotation matrix
+    D3DXMATRIX mCameraRot;
+    D3DXMatrixInverse( &mCameraRot, NULL, m_ViewArcBall.GetRotationMatrix() );
+
+    // Transform vectors based on camera's rotation matrix
+    D3DXVECTOR3 vWorldUp, vWorldAhead;
+    D3DXVECTOR3 vLocalUp    = D3DXVECTOR3(0,1,0);
+    D3DXVECTOR3 vLocalAhead = D3DXVECTOR3(0,0,1);
+    D3DXVec3TransformCoord( &vWorldUp, &vLocalUp, &mCameraRot );
+    D3DXVec3TransformCoord( &vWorldAhead, &vLocalAhead, &mCameraRot );
+
+    // Transform the position delta by the camera's rotation 
+    D3DXVECTOR3 vPosDeltaWorld;
+    D3DXVec3TransformCoord( &vPosDeltaWorld, &vPosDelta, &mCameraRot );
+
+    // Move the lookAt position 
+    m_vLookAt += vPosDeltaWorld;
+    if( m_bClipToBoundary )
+        ConstrainToBoundary( &m_vLookAt );
+
+    // Update the eye point based on a radius away from the lookAt position
+    m_vEye = m_vLookAt - vWorldAhead * m_fRadius;
+
+    // Update the view matrix
+    D3DXMatrixLookAtLH( &m_mView, &m_vEye, &m_vLookAt, &vWorldUp );
+
+    D3DXMATRIX mInvView;
+    D3DXMatrixInverse( &mInvView, NULL, &m_mView );
+    mInvView._41 = mInvView._42 = mInvView._43 = 0;
+
+    D3DXMATRIX mModelLastRotInv;
+    D3DXMatrixInverse(&mModelLastRotInv, NULL, &m_mModelLastRot);
+
+    // Accumulate the delta of the arcball's rotation in view space.
+    // Note that per-frame delta rotations could be problematic over long periods of time.
+    D3DXMATRIX mModelRot;
+    mModelRot = *m_WorldArcBall.GetRotationMatrix();
+    m_mModelRot *= m_mView * mModelLastRotInv * mModelRot * mInvView;
+
+    if( m_ViewArcBall.IsBeingDragged() && m_bAttachCameraToModel && !IsKeyDown(m_aKeys[CAM_CONTROLDOWN]) )
+    {
+        // Attach camera to model by inverse of the model rotation
+        D3DXMATRIX mCameraLastRotInv;
+        D3DXMatrixInverse(&mCameraLastRotInv, NULL, &m_mCameraRotLast);
+        D3DXMATRIX mCameraRotDelta = mCameraLastRotInv * mCameraRot; // local to world matrix
+        m_mModelRot *= mCameraRotDelta;
+    }
+    m_mCameraRotLast = mCameraRot; 
+
+    m_mModelLastRot = mModelRot;
+
+    // Since we're accumulating delta rotations, we need to orthonormalize 
+    // the matrix to prevent eventual matrix skew
+    D3DXVECTOR3* pXBasis = (D3DXVECTOR3*) &m_mModelRot._11;
+    D3DXVECTOR3* pYBasis = (D3DXVECTOR3*) &m_mModelRot._21;
+    D3DXVECTOR3* pZBasis = (D3DXVECTOR3*) &m_mModelRot._31;
+    D3DXVec3Normalize( pXBasis, pXBasis );
+    D3DXVec3Cross( pYBasis, pZBasis, pXBasis );
+    D3DXVec3Normalize( pYBasis, pYBasis );
+    D3DXVec3Cross( pZBasis, pXBasis, pYBasis );
+
+    // Translate the rotation matrix to the same position as the lookAt position
+    m_mModelRot._41 = m_vLookAt.x;
+    m_mModelRot._42 = m_vLookAt.y;
+    m_mModelRot._43 = m_vLookAt.z;
+
+    // Translate world matrix so its at the center of the model
+    D3DXMATRIX mTrans;
+    D3DXMatrixTranslation( &mTrans, -m_vModelCenter.x, -m_vModelCenter.y, -m_vModelCenter.z );
+    m_mWorld = mTrans * m_mModelRot;
+}
+
+
+void CModelViewerCamera::SetDragRect( RECT &rc )
+{
+    CBaseCamera::SetDragRect( rc );
+
+    m_WorldArcBall.SetOffset( rc.left, rc.top );
+    m_ViewArcBall.SetOffset( rc.left, rc.top );
+    SetWindow( rc.right - rc.left, rc.bottom - rc.top );
+}
+
+
+//--------------------------------------------------------------------------------------
+// Reset the camera's position back to the default
+//--------------------------------------------------------------------------------------
+VOID CModelViewerCamera::Reset()
+{
+    CBaseCamera::Reset();
+
+    D3DXMatrixIdentity( &m_mWorld );
+    D3DXMatrixIdentity( &m_mModelRot );
+    D3DXMatrixIdentity( &m_mModelLastRot );    
+    D3DXMatrixIdentity( &m_mCameraRotLast );    
+
+    m_fRadius = m_fDefaultRadius;
+    m_WorldArcBall.Reset();
+    m_ViewArcBall.Reset();
+}
+
+
+//--------------------------------------------------------------------------------------
+// Override for setting the view parameters
+//--------------------------------------------------------------------------------------
+void CModelViewerCamera::SetViewParams( D3DXVECTOR3* pvEyePt, D3DXVECTOR3* pvLookatPt )
+{
+    CBaseCamera::SetViewParams( pvEyePt, pvLookatPt );
+
+    // Propogate changes to the member arcball
+    D3DXQUATERNION quat;
+    D3DXMATRIXA16 mRotation;
+    D3DXVECTOR3 vUp(0,1,0);
+    D3DXMatrixLookAtLH( &mRotation, pvEyePt, pvLookatPt, &vUp );
+    D3DXQuaternionRotationMatrix( &quat, &mRotation );
+    m_ViewArcBall.SetQuatNow( quat );
+
+    // Set the radius according to the distance
+    D3DXVECTOR3 vEyeToPoint;
+    D3DXVec3Subtract( &vEyeToPoint, pvLookatPt, pvEyePt );
+    SetRadius( D3DXVec3Length( &vEyeToPoint ) );
+
+    // View information changed. FrameMove should be called.
+    m_bDragSinceLastUpdate = true;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+// Call this from your message proc so this class can handle window messages
+//--------------------------------------------------------------------------------------
+LRESULT CModelViewerCamera::HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    CBaseCamera::HandleMessages( hWnd, uMsg, wParam, lParam );
+
+    if( ( (uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONDBLCLK ) && m_nRotateModelButtonMask & MOUSE_LEFT_BUTTON) ||
+        ( (uMsg == WM_MBUTTONDOWN || uMsg == WM_MBUTTONDBLCLK ) && m_nRotateModelButtonMask & MOUSE_MIDDLE_BUTTON) ||
+        ( (uMsg == WM_RBUTTONDOWN || uMsg == WM_RBUTTONDBLCLK ) && m_nRotateModelButtonMask & MOUSE_RIGHT_BUTTON) )
+    {
+        int iMouseX = (short)LOWORD(lParam);
+        int iMouseY = (short)HIWORD(lParam);
+        m_WorldArcBall.OnBegin( iMouseX, iMouseY );
+    }
+
+    if( ( (uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONDBLCLK ) && m_nRotateCameraButtonMask & MOUSE_LEFT_BUTTON) ||
+        ( (uMsg == WM_MBUTTONDOWN || uMsg == WM_MBUTTONDBLCLK ) && m_nRotateCameraButtonMask & MOUSE_MIDDLE_BUTTON) ||
+        ( (uMsg == WM_RBUTTONDOWN || uMsg == WM_RBUTTONDBLCLK ) && m_nRotateCameraButtonMask & MOUSE_RIGHT_BUTTON) )
+    {
+        int iMouseX = (short)LOWORD(lParam);
+        int iMouseY = (short)HIWORD(lParam);
+        m_ViewArcBall.OnBegin( iMouseX, iMouseY );
+    }
+
+    if( uMsg == WM_MOUSEMOVE )
+    {
+        int iMouseX = (short)LOWORD(lParam);
+        int iMouseY = (short)HIWORD(lParam);
+        m_WorldArcBall.OnMove( iMouseX, iMouseY );
+        m_ViewArcBall.OnMove( iMouseX, iMouseY );
+    }
+
+    if( (uMsg == WM_LBUTTONUP && m_nRotateModelButtonMask & MOUSE_LEFT_BUTTON) ||
+        (uMsg == WM_MBUTTONUP && m_nRotateModelButtonMask & MOUSE_MIDDLE_BUTTON) ||
+        (uMsg == WM_RBUTTONUP && m_nRotateModelButtonMask & MOUSE_RIGHT_BUTTON) )
+    {
+        m_WorldArcBall.OnEnd();
+    }
+
+    if( (uMsg == WM_LBUTTONUP && m_nRotateCameraButtonMask & MOUSE_LEFT_BUTTON) ||
+        (uMsg == WM_MBUTTONUP && m_nRotateCameraButtonMask & MOUSE_MIDDLE_BUTTON) ||
+        (uMsg == WM_RBUTTONUP && m_nRotateCameraButtonMask & MOUSE_RIGHT_BUTTON) )
+    {
+        m_ViewArcBall.OnEnd();
+    }
+
+    if( uMsg == WM_LBUTTONDOWN ||
+        uMsg == WM_LBUTTONDBLCLK ||
+        uMsg == WM_MBUTTONDOWN ||
+        uMsg == WM_MBUTTONDBLCLK ||
+        uMsg == WM_RBUTTONDOWN ||
+        uMsg == WM_RBUTTONDBLCLK ||
+        uMsg == WM_LBUTTONUP ||
+        uMsg == WM_MBUTTONUP ||
+        uMsg == WM_RBUTTONUP ||
+        uMsg == WM_MOUSEWHEEL ||
+        uMsg == WM_MOUSEMOVE )
+    {
+        m_bDragSinceLastUpdate = true;
+    }
+
+    return FALSE;
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+// Desc: Returns a view matrix for rendering to a face of a cubemap.
+//--------------------------------------------------------------------------------------
+D3DXMATRIX DXUTGetCubeMapViewMatrix( DWORD dwFace )
+{
+    D3DXVECTOR3 vEyePt   = D3DXVECTOR3( 0.0f, 0.0f, 0.0f );
+    D3DXVECTOR3 vLookDir;
+    D3DXVECTOR3 vUpDir;
+
+    switch( dwFace )
+    {
+        case D3DCUBEMAP_FACE_POSITIVE_X:
+            vLookDir = D3DXVECTOR3( 1.0f, 0.0f, 0.0f );
+            vUpDir   = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
+            break;
+        case D3DCUBEMAP_FACE_NEGATIVE_X:
+            vLookDir = D3DXVECTOR3(-1.0f, 0.0f, 0.0f );
+            vUpDir   = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
+            break;
+        case D3DCUBEMAP_FACE_POSITIVE_Y:
+            vLookDir = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
+            vUpDir   = D3DXVECTOR3( 0.0f, 0.0f,-1.0f );
+            break;
+        case D3DCUBEMAP_FACE_NEGATIVE_Y:
+            vLookDir = D3DXVECTOR3( 0.0f,-1.0f, 0.0f );
+            vUpDir   = D3DXVECTOR3( 0.0f, 0.0f, 1.0f );
+            break;
+        case D3DCUBEMAP_FACE_POSITIVE_Z:
+            vLookDir = D3DXVECTOR3( 0.0f, 0.0f, 1.0f );
+            vUpDir   = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
+            break;
+        case D3DCUBEMAP_FACE_NEGATIVE_Z:
+            vLookDir = D3DXVECTOR3( 0.0f, 0.0f,-1.0f );
+            vUpDir   = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
+            break;
+    }
+
+    // Set the view transform for this cubemap surface
+    D3DXMATRIXA16 mView;
+    D3DXMatrixLookAtLH( &mView, &vEyePt, &vLookDir, &vUpDir );
+    return mView;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Returns the string for the given D3DFORMAT.
+//--------------------------------------------------------------------------------------
+LPCWSTR DXUTD3DFormatToString( D3DFORMAT format, bool bWithPrefix )
+{
+    WCHAR* pstr = NULL;
+    switch( format )
+    {
+    case D3DFMT_UNKNOWN:         pstr = L"D3DFMT_UNKNOWN"; break;
+    case D3DFMT_R8G8B8:          pstr = L"D3DFMT_R8G8B8"; break;
+    case D3DFMT_A8R8G8B8:        pstr = L"D3DFMT_A8R8G8B8"; break;
+    case D3DFMT_X8R8G8B8:        pstr = L"D3DFMT_X8R8G8B8"; break;
+    case D3DFMT_R5G6B5:          pstr = L"D3DFMT_R5G6B5"; break;
+    case D3DFMT_X1R5G5B5:        pstr = L"D3DFMT_X1R5G5B5"; break;
+    case D3DFMT_A1R5G5B5:        pstr = L"D3DFMT_A1R5G5B5"; break;
+    case D3DFMT_A4R4G4B4:        pstr = L"D3DFMT_A4R4G4B4"; break;
+    case D3DFMT_R3G3B2:          pstr = L"D3DFMT_R3G3B2"; break;
+    case D3DFMT_A8:              pstr = L"D3DFMT_A8"; break;
+    case D3DFMT_A8R3G3B2:        pstr = L"D3DFMT_A8R3G3B2"; break;
+    case D3DFMT_X4R4G4B4:        pstr = L"D3DFMT_X4R4G4B4"; break;
+    case D3DFMT_A2B10G10R10:     pstr = L"D3DFMT_A2B10G10R10"; break;
+    case D3DFMT_A8B8G8R8:        pstr = L"D3DFMT_A8B8G8R8"; break;
+    case D3DFMT_X8B8G8R8:        pstr = L"D3DFMT_X8B8G8R8"; break;
+    case D3DFMT_G16R16:          pstr = L"D3DFMT_G16R16"; break;
+    case D3DFMT_A2R10G10B10:     pstr = L"D3DFMT_A2R10G10B10"; break;
+    case D3DFMT_A16B16G16R16:    pstr = L"D3DFMT_A16B16G16R16"; break;
+    case D3DFMT_A8P8:            pstr = L"D3DFMT_A8P8"; break;
+    case D3DFMT_P8:              pstr = L"D3DFMT_P8"; break;
+    case D3DFMT_L8:              pstr = L"D3DFMT_L8"; break;
+    case D3DFMT_A8L8:            pstr = L"D3DFMT_A8L8"; break;
+    case D3DFMT_A4L4:            pstr = L"D3DFMT_A4L4"; break;
+    case D3DFMT_V8U8:            pstr = L"D3DFMT_V8U8"; break;
+    case D3DFMT_L6V5U5:          pstr = L"D3DFMT_L6V5U5"; break;
+    case D3DFMT_X8L8V8U8:        pstr = L"D3DFMT_X8L8V8U8"; break;
+    case D3DFMT_Q8W8V8U8:        pstr = L"D3DFMT_Q8W8V8U8"; break;
+    case D3DFMT_V16U16:          pstr = L"D3DFMT_V16U16"; break;
+    case D3DFMT_A2W10V10U10:     pstr = L"D3DFMT_A2W10V10U10"; break;
+    case D3DFMT_UYVY:            pstr = L"D3DFMT_UYVY"; break;
+    case D3DFMT_YUY2:            pstr = L"D3DFMT_YUY2"; break;
+    case D3DFMT_DXT1:            pstr = L"D3DFMT_DXT1"; break;
+    case D3DFMT_DXT2:            pstr = L"D3DFMT_DXT2"; break;
+    case D3DFMT_DXT3:            pstr = L"D3DFMT_DXT3"; break;
+    case D3DFMT_DXT4:            pstr = L"D3DFMT_DXT4"; break;
+    case D3DFMT_DXT5:            pstr = L"D3DFMT_DXT5"; break;
+    case D3DFMT_D16_LOCKABLE:    pstr = L"D3DFMT_D16_LOCKABLE"; break;
+    case D3DFMT_D32:             pstr = L"D3DFMT_D32"; break;
+    case D3DFMT_D15S1:           pstr = L"D3DFMT_D15S1"; break;
+    case D3DFMT_D24S8:           pstr = L"D3DFMT_D24S8"; break;
+    case D3DFMT_D24X8:           pstr = L"D3DFMT_D24X8"; break;
+    case D3DFMT_D24X4S4:         pstr = L"D3DFMT_D24X4S4"; break;
+    case D3DFMT_D16:             pstr = L"D3DFMT_D16"; break;
+    case D3DFMT_L16:             pstr = L"D3DFMT_L16"; break;
+    case D3DFMT_VERTEXDATA:      pstr = L"D3DFMT_VERTEXDATA"; break;
+    case D3DFMT_INDEX16:         pstr = L"D3DFMT_INDEX16"; break;
+    case D3DFMT_INDEX32:         pstr = L"D3DFMT_INDEX32"; break;
+    case D3DFMT_Q16W16V16U16:    pstr = L"D3DFMT_Q16W16V16U16"; break;
+    case D3DFMT_MULTI2_ARGB8:    pstr = L"D3DFMT_MULTI2_ARGB8"; break;
+    case D3DFMT_R16F:            pstr = L"D3DFMT_R16F"; break;
+    case D3DFMT_G16R16F:         pstr = L"D3DFMT_G16R16F"; break;
+    case D3DFMT_A16B16G16R16F:   pstr = L"D3DFMT_A16B16G16R16F"; break;
+    case D3DFMT_R32F:            pstr = L"D3DFMT_R32F"; break;
+    case D3DFMT_G32R32F:         pstr = L"D3DFMT_G32R32F"; break;
+    case D3DFMT_A32B32G32R32F:   pstr = L"D3DFMT_A32B32G32R32F"; break;
+    case D3DFMT_CxV8U8:          pstr = L"D3DFMT_CxV8U8"; break;
+    default:                     pstr = L"Unknown format"; break;
+    }
+    if( bWithPrefix || wcsstr( pstr, L"D3DFMT_" )== NULL )
+        return pstr;
+    else
+        return pstr + lstrlen( L"D3DFMT_" );
+}
+
+
+
+//--------------------------------------------------------------------------------------
+// Outputs to the debug stream a formatted Unicode string with a variable-argument list.
+//--------------------------------------------------------------------------------------
+VOID DXUTOutputDebugStringW( LPCWSTR strMsg, ... )
+{
+#if defined(DEBUG) || defined(_DEBUG)
+    WCHAR strBuffer[512];
+    
+    va_list args;
+    va_start(args, strMsg);
+    StringCchVPrintfW( strBuffer, 512, strMsg, args );
+    strBuffer[511] = L'\0';
+    va_end(args);
+
+    OutputDebugString( strBuffer );
+#else
+    UNREFERENCED_PARAMETER(strMsg);
+#endif
+}
+
+
+//--------------------------------------------------------------------------------------
+// Outputs to the debug stream a formatted MBCS string with a variable-argument list.
+//--------------------------------------------------------------------------------------
+VOID DXUTOutputDebugStringA( LPCSTR strMsg, ... )
+{
+#if defined(DEBUG) || defined(_DEBUG)
+    CHAR strBuffer[512];
+    
+    va_list args;
+    va_start(args, strMsg);
+    StringCchVPrintfA( strBuffer, 512, strMsg, args );
+    strBuffer[511] = '\0';
+    va_end(args);
+
+    OutputDebugStringA( strBuffer );
+#else
+    UNREFERENCED_PARAMETER(strMsg);
+#endif
+}
+
+
+//--------------------------------------------------------------------------------------
+CDXUTLineManager::CDXUTLineManager()
+{
+    m_pd3dDevice = NULL;
+    m_pD3DXLine = NULL;
+}
+
+
+//--------------------------------------------------------------------------------------
+CDXUTLineManager::~CDXUTLineManager()
+{
+    OnDeletedDevice();
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTLineManager::OnCreatedDevice( IDirect3DDevice9* pd3dDevice )
+{
+    m_pd3dDevice = pd3dDevice;
+
+    HRESULT hr;
+    hr = D3DXCreateLine( m_pd3dDevice, &m_pD3DXLine );
+    if( FAILED(hr) )
+        return hr;
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTLineManager::OnResetDevice()
+{
+    if( m_pD3DXLine )
+        m_pD3DXLine->OnResetDevice();
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTLineManager::OnRender()
+{
+    HRESULT hr;
+    if( NULL == m_pD3DXLine )
+        return E_INVALIDARG;
+
+    bool bDrawingHasBegun = false;
+    float fLastWidth = 0.0f;
+    bool bLastAntiAlias = false;
+    
+    for( int i=0; i<m_LinesList.GetSize(); i++ )
+    {
+        LINE_NODE* pLineNode = m_LinesList.GetAt(i);
+        if( pLineNode )
+        {
+            if( !bDrawingHasBegun || 
+                fLastWidth != pLineNode->fWidth || 
+                bLastAntiAlias != pLineNode->bAntiAlias )
+            {
+                if( bDrawingHasBegun )
+                {
+                    hr = m_pD3DXLine->End();
+                    if( FAILED(hr) )
+                        return hr;
+                }
+
+                m_pD3DXLine->SetWidth( pLineNode->fWidth );
+                m_pD3DXLine->SetAntialias( pLineNode->bAntiAlias );
+
+                fLastWidth = pLineNode->fWidth;
+                bLastAntiAlias = pLineNode->bAntiAlias;
+
+                hr = m_pD3DXLine->Begin();
+                if( FAILED(hr) )
+                    return hr;
+                bDrawingHasBegun = true;
+            }
+
+            hr = m_pD3DXLine->Draw( pLineNode->pVertexList, pLineNode->dwVertexListCount, pLineNode->Color );
+            if( FAILED(hr) )
+                return hr;
+        }
+    }
+
+    if( bDrawingHasBegun )
+    {
+        hr = m_pD3DXLine->End();
+        if( FAILED(hr) )
+            return hr;
+    }
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTLineManager::OnLostDevice()
+{
+    if( m_pD3DXLine )
+        m_pD3DXLine->OnLostDevice();
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTLineManager::OnDeletedDevice()
+{
+    RemoveAllLines();
+    SAFE_RELEASE( m_pD3DXLine );
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTLineManager::AddLine( int* pnLineID, D3DXVECTOR2* pVertexList, DWORD dwVertexListCount, D3DCOLOR Color, float fWidth, float fScaleRatio, bool bAntiAlias )
+{
+    if( pVertexList == NULL || dwVertexListCount == 0 )
+        return E_INVALIDARG;
+
+    LINE_NODE* pLineNode = new LINE_NODE;
+    if( pLineNode == NULL )
+        return E_OUTOFMEMORY;
+    ZeroMemory( pLineNode, sizeof(LINE_NODE) );
+
+    pLineNode->nLineID = m_LinesList.GetSize();
+    pLineNode->Color = Color;
+    pLineNode->fWidth = fWidth;
+    pLineNode->bAntiAlias = bAntiAlias;
+    pLineNode->dwVertexListCount = dwVertexListCount;
+
+    if( pnLineID )
+        *pnLineID = pLineNode->nLineID;
+
+    pLineNode->pVertexList = new D3DXVECTOR2[dwVertexListCount];
+    if( pLineNode->pVertexList == NULL )
+    {
+        delete pLineNode;
+        return E_OUTOFMEMORY;
+    }
+    for( DWORD i=0; i<dwVertexListCount; i++ )
+    {
+        pLineNode->pVertexList[i] = pVertexList[i] * fScaleRatio;
+    }
+
+    m_LinesList.Add( pLineNode );
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTLineManager::AddRect( int* pnLineID, RECT rc, D3DCOLOR Color, float fWidth, float fScaleRatio, bool bAntiAlias )
+{
+    if( fWidth > 2.0f )
+    {
+        D3DXVECTOR2 vertexList[8];
+
+        vertexList[0].x = (float)rc.left;
+        vertexList[0].y = (float)rc.top - (fWidth/2.0f);
+
+        vertexList[1].x = (float)rc.left;
+        vertexList[1].y = (float)rc.bottom + (fWidth/2.0f);
+
+        vertexList[2].x = (float)rc.left;
+        vertexList[2].y = (float)rc.bottom - 0.5f;
+
+        vertexList[3].x = (float)rc.right;
+        vertexList[3].y = (float)rc.bottom - 0.5f;
+
+        vertexList[4].x = (float)rc.right;
+        vertexList[4].y = (float)rc.bottom + (fWidth/2.0f);
+
+        vertexList[5].x = (float)rc.right;
+        vertexList[5].y = (float)rc.top - (fWidth/2.0f);
+
+        vertexList[6].x = (float)rc.right;
+        vertexList[6].y = (float)rc.top;
+
+        vertexList[7].x = (float)rc.left;
+        vertexList[7].y = (float)rc.top;
+        
+        return AddLine( pnLineID, vertexList, 8, Color, fWidth, fScaleRatio, bAntiAlias );
+    }
+    else
+    {
+        D3DXVECTOR2 vertexList[5];
+        vertexList[0].x = (float)rc.left;
+        vertexList[0].y = (float)rc.top;
+
+        vertexList[1].x = (float)rc.left;
+        vertexList[1].y = (float)rc.bottom;
+
+        vertexList[2].x = (float)rc.right;
+        vertexList[2].y = (float)rc.bottom;
+
+        vertexList[3].x = (float)rc.right;
+        vertexList[3].y = (float)rc.top;
+
+        vertexList[4].x = (float)rc.left;
+        vertexList[4].y = (float)rc.top;
+        
+        return AddLine( pnLineID, vertexList, 5, Color, fWidth, fScaleRatio, bAntiAlias );
+    }
+}
+
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTLineManager::RemoveLine( int nLineID )
+{
+    for( int i=0; i<m_LinesList.GetSize(); i++ )
+    {
+        LINE_NODE* pLineNode = m_LinesList.GetAt(i);
+        if( pLineNode && pLineNode->nLineID == nLineID )
+        {
+            SAFE_DELETE_ARRAY( pLineNode->pVertexList );
+            delete pLineNode;
+            m_LinesList.SetAt(i, NULL);
+        }
+    }
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTLineManager::RemoveAllLines()
+{
+    for( int i=0; i<m_LinesList.GetSize(); i++ )
+    {
+        LINE_NODE* pLineNode = m_LinesList.GetAt(i);
+        if( pLineNode )
+        {
+            SAFE_DELETE_ARRAY( pLineNode->pVertexList );
+            delete pLineNode;
+        }
+    }
+    m_LinesList.RemoveAll();
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+CDXUTTextHelper::CDXUTTextHelper( ID3DXFont* pFont, ID3DXSprite* pSprite, int nLineHeight )
+{
+    m_pFont = pFont;
+    m_pSprite = pSprite;
+    m_clr = D3DXCOLOR(1,1,1,1);
+    m_pt.x = 0; 
+    m_pt.y = 0; 
+    m_nLineHeight = nLineHeight;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTTextHelper::DrawFormattedTextLine( const WCHAR* strMsg, ... )
+{
+    WCHAR strBuffer[512];
+    
+    va_list args;
+    va_start(args, strMsg);
+    StringCchVPrintf( strBuffer, 512, strMsg, args );
+    strBuffer[511] = L'\0';
+    va_end(args);
+
+    return DrawTextLine( strBuffer );
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTTextHelper::DrawTextLine( const WCHAR* strMsg )
+{
+    if( NULL == m_pFont ) 
+        return DXUT_ERR_MSGBOX( L"DrawTextLine", E_INVALIDARG );
+
+    HRESULT hr;
+    RECT rc;
+    SetRect( &rc, m_pt.x, m_pt.y, 0, 0 ); 
+    hr = m_pFont->DrawText( m_pSprite, strMsg, -1, &rc, DT_NOCLIP, m_clr );
+    if( FAILED(hr) )
+        return DXTRACE_ERR_MSGBOX( L"DrawText", hr );
+
+    m_pt.y += m_nLineHeight;
+
+    return S_OK;
+}
+
+
+HRESULT CDXUTTextHelper::DrawFormattedTextLine( RECT &rc, DWORD dwFlags, const WCHAR* strMsg, ... )
+{
+    WCHAR strBuffer[512];
+    
+    va_list args;
+    va_start(args, strMsg);
+    StringCchVPrintf( strBuffer, 512, strMsg, args );
+    strBuffer[511] = L'\0';
+    va_end(args);
+
+    return DrawTextLine( rc, dwFlags, strBuffer );
+}
+
+
+HRESULT CDXUTTextHelper::DrawTextLine( RECT &rc, DWORD dwFlags, const WCHAR* strMsg )
+{
+    if( NULL == m_pFont ) 
+        return DXUT_ERR_MSGBOX( L"DrawTextLine", E_INVALIDARG );
+
+    HRESULT hr;
+    hr = m_pFont->DrawText( m_pSprite, strMsg, -1, &rc, dwFlags, m_clr );
+    if( FAILED(hr) )
+        return DXTRACE_ERR_MSGBOX( L"DrawText", hr );
+
+    m_pt.y += m_nLineHeight;
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTTextHelper::Begin()
+{
+    if( m_pSprite )
+        m_pSprite->Begin( D3DXSPRITE_ALPHABLEND | D3DXSPRITE_SORT_TEXTURE );
+}
+void CDXUTTextHelper::End()
+{
+    if( m_pSprite )
+        m_pSprite->End();
+}
+
+
+//--------------------------------------------------------------------------------------
+IDirect3DDevice9* CDXUTDirectionWidget::s_pd3dDevice = NULL;
+ID3DXEffect*      CDXUTDirectionWidget::s_pEffect = NULL;       
+ID3DXMesh*        CDXUTDirectionWidget::s_pMesh = NULL;    
+
+
+//--------------------------------------------------------------------------------------
+CDXUTDirectionWidget::CDXUTDirectionWidget()
+{
+    m_fRadius = 1.0f;
+    m_vDefaultDir = D3DXVECTOR3(0,1,0);
+    m_vCurrentDir = m_vDefaultDir;
+    m_nRotateMask = MOUSE_RIGHT_BUTTON;
+
+    D3DXMatrixIdentity( &m_mView );
+    D3DXMatrixIdentity( &m_mRot );
+    D3DXMatrixIdentity( &m_mRotSnapshot );
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDirectionWidget::StaticOnCreateDevice( IDirect3DDevice9* pd3dDevice )
+{
+    HRESULT hr;
+
+    s_pd3dDevice = pd3dDevice;
+
+    const char* g_strBuffer = 
+    "float4 g_MaterialDiffuseColor;      // Material's diffuse color\r\n"
+    "float3 g_LightDir;                  // Light's direction in world space\r\n"
+    "float4x4 g_mWorld;                  // World matrix for object\r\n"
+    "float4x4 g_mWorldViewProjection;    // World * View * Projection matrix\r\n"
+    "\r\n"
+    "struct VS_OUTPUT\r\n"
+    "{\r\n"
+    "    float4 Position   : POSITION;   // vertex position\r\n"
+    "    float4 Diffuse    : COLOR0;     // vertex diffuse color\r\n"
+    "};\r\n"
+    "\r\n"
+    "VS_OUTPUT RenderWith1LightNoTextureVS( float4 vPos : POSITION,\r\n"
+    "                                       float3 vNormal : NORMAL )\r\n"
+    "{\r\n"
+    "    VS_OUTPUT Output;\r\n"
+    "\r\n"
+    "    // Transform the position from object space to homogeneous projection space\r\n"
+    "    Output.Position = mul(vPos, g_mWorldViewProjection);\r\n"
+    "\r\n"
+    "    // Transform the normal from object space to world space\r\n"
+    "    float3 vNormalWorldSpace;\r\n"
+    "    vNormalWorldSpace = normalize(mul(vNormal, (float3x3)g_mWorld)); // normal (world space)\r\n"
+    "\r\n"
+    "    // Compute simple directional lighting equation\r\n"
+    "    Output.Diffuse.rgb = g_MaterialDiffuseColor * max(0,dot(vNormalWorldSpace, g_LightDir));\r\n"
+    "    Output.Diffuse.a = 1.0f;\r\n"
+    "\r\n"
+    "    return Output;\r\n"
+    "}\r\n"
+    "\r\n"
+    "float4 RenderWith1LightNoTexturePS( float4 Diffuse : COLOR0 ) : COLOR0\r\n"
+    "{\r\n"
+    "    return Diffuse;\r\n"
+    "}\r\n"
+    "\r\n"
+    "technique RenderWith1LightNoTexture\r\n"
+    "{\r\n"
+    "    pass P0\r\n"
+    "    {\r\n"
+    "        VertexShader = compile vs_1_1 RenderWith1LightNoTextureVS();\r\n"
+    "        PixelShader  = compile ps_1_1 RenderWith1LightNoTexturePS();\r\n"
+    "    }\r\n"
+    "}\r\n"
+    "";
+
+    UINT dwBufferSize = (UINT)strlen(g_strBuffer) + 1; 
+
+    V_RETURN( D3DXCreateEffect( s_pd3dDevice, g_strBuffer, dwBufferSize, NULL, NULL, D3DXFX_NOT_CLONEABLE, NULL, &s_pEffect, NULL ) );
+
+    // Load the mesh with D3DX and get back a ID3DXMesh*.  For this
+    // sample we'll ignore the X file's embedded materials since we know 
+    // exactly the model we're loading.  See the mesh samples such as
+    // "OptimizedMesh" for a more generic mesh loading example.
+    V_RETURN( DXUTCreateArrowMeshFromInternalArray( s_pd3dDevice, &s_pMesh ) );
+
+    // Optimize the mesh for this graphics card's vertex cache 
+    // so when rendering the mesh's triangle list the vertices will 
+    // cache hit more often so it won't have to re-execute the vertex shader 
+    // on those vertices so it will improve perf.     
+    DWORD* rgdwAdjacency = new DWORD[s_pMesh->GetNumFaces() * 3];
+    if( rgdwAdjacency == NULL )
+        return E_OUTOFMEMORY;
+    V( s_pMesh->GenerateAdjacency(1e-6f,rgdwAdjacency) );
+    V( s_pMesh->OptimizeInplace(D3DXMESHOPT_VERTEXCACHE, rgdwAdjacency, NULL, NULL, NULL) );
+    delete []rgdwAdjacency;
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDirectionWidget::OnResetDevice( const D3DSURFACE_DESC* pBackBufferSurfaceDesc )
+{
+    m_ArcBall.SetWindow( pBackBufferSurfaceDesc->Width, pBackBufferSurfaceDesc->Height );
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDirectionWidget::StaticOnLostDevice()
+{
+    if( s_pEffect )
+        s_pEffect->OnLostDevice();
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDirectionWidget::StaticOnDestroyDevice()
+{
+    SAFE_RELEASE(s_pEffect);
+    SAFE_RELEASE(s_pMesh);
+}    
+
+
+//--------------------------------------------------------------------------------------
+LRESULT CDXUTDirectionWidget::HandleMessages( HWND hWnd, UINT uMsg, 
+                                              WPARAM wParam, LPARAM lParam )
+{
+    switch( uMsg )
+    {
+        case WM_LBUTTONDOWN:
+        case WM_MBUTTONDOWN:
+        case WM_RBUTTONDOWN:
+        {
+            if( ((m_nRotateMask & MOUSE_LEFT_BUTTON) != 0 && uMsg == WM_LBUTTONDOWN) ||
+                ((m_nRotateMask & MOUSE_MIDDLE_BUTTON) != 0 && uMsg == WM_MBUTTONDOWN) ||
+                ((m_nRotateMask & MOUSE_RIGHT_BUTTON) != 0 && uMsg == WM_RBUTTONDOWN) )
+            {
+                int iMouseX = (int)(short)LOWORD(lParam);
+                int iMouseY = (int)(short)HIWORD(lParam);
+                m_ArcBall.OnBegin( iMouseX, iMouseY );
+                SetCapture(hWnd);
+            }
+            return TRUE;
+        }
+
+        case WM_MOUSEMOVE:
+        {
+            if( m_ArcBall.IsBeingDragged() )
+            {
+                int iMouseX = (int)(short)LOWORD(lParam);
+                int iMouseY = (int)(short)HIWORD(lParam);
+                m_ArcBall.OnMove( iMouseX, iMouseY );
+                UpdateLightDir();
+            }
+            return TRUE;
+        }
+
+        case WM_LBUTTONUP:
+        case WM_MBUTTONUP:
+        case WM_RBUTTONUP:
+        {
+            if( ((m_nRotateMask & MOUSE_LEFT_BUTTON) != 0 && uMsg == WM_LBUTTONUP) ||
+                ((m_nRotateMask & MOUSE_MIDDLE_BUTTON) != 0 && uMsg == WM_MBUTTONUP) ||
+                ((m_nRotateMask & MOUSE_RIGHT_BUTTON) != 0 && uMsg == WM_RBUTTONUP) )
+            {
+                m_ArcBall.OnEnd();
+                ReleaseCapture();
+            }
+
+            UpdateLightDir();
+            return TRUE;
+        }
+    }
+
+    return 0;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDirectionWidget::OnRender( D3DXCOLOR color, const D3DXMATRIX* pmView, 
+                                        const D3DXMATRIX* pmProj, const D3DXVECTOR3* pEyePt )
+{
+    m_mView = *pmView;
+
+    // Render the light spheres so the user can visually see the light dir
+    UINT iPass, cPasses;
+    D3DXMATRIX mRotate;
+    D3DXMATRIX mScale;
+    D3DXMATRIX mTrans;
+    D3DXMATRIXA16 mWorldViewProj;
+    HRESULT hr;
+
+    V( s_pEffect->SetTechnique( "RenderWith1LightNoTexture" ) );
+    V( s_pEffect->SetVector( "g_MaterialDiffuseColor", (D3DXVECTOR4*)&color ) );
+
+    D3DXVECTOR3 vEyePt;
+    D3DXVec3Normalize( &vEyePt, pEyePt );
+    V( s_pEffect->SetValue( "g_LightDir", &vEyePt, sizeof(D3DXVECTOR3) ) );
+
+    // Rotate arrow model to point towards origin
+    D3DXMATRIX mRotateA, mRotateB;
+    D3DXVECTOR3 vAt = D3DXVECTOR3(0,0,0);
+    D3DXVECTOR3 vUp = D3DXVECTOR3(0,1,0);
+    D3DXMatrixRotationX( &mRotateB, D3DX_PI );
+    D3DXMatrixLookAtLH( &mRotateA, &m_vCurrentDir, &vAt, &vUp );
+    D3DXMatrixInverse( &mRotateA, NULL, &mRotateA );
+    mRotate = mRotateB * mRotateA;
+
+    D3DXVECTOR3 vL = m_vCurrentDir * m_fRadius * 1.0f;
+    D3DXMatrixTranslation( &mTrans, vL.x, vL.y, vL.z );
+    D3DXMatrixScaling( &mScale, m_fRadius*0.2f, m_fRadius*0.2f, m_fRadius*0.2f );
+
+    D3DXMATRIX mWorld = mRotate * mScale * mTrans;
+    mWorldViewProj = mWorld * (m_mView) * (*pmProj);
+
+    V( s_pEffect->SetMatrix( "g_mWorldViewProjection", &mWorldViewProj ) );
+    V( s_pEffect->SetMatrix( "g_mWorld", &mWorld ) );
+
+    for( int iSubset=0; iSubset<2; iSubset++ )
+    {
+        V( s_pEffect->Begin(&cPasses, 0) );
+        for (iPass = 0; iPass < cPasses; iPass++)
+        {
+            V( s_pEffect->BeginPass(iPass) );
+            V( s_pMesh->DrawSubset(iSubset) );
+            V( s_pEffect->EndPass() );
+        }
+        V( s_pEffect->End() );
+    }
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDirectionWidget::UpdateLightDir()
+{
+    D3DXMATRIX mInvView;
+    D3DXMatrixInverse(&mInvView, NULL, &m_mView);
+    mInvView._41 = mInvView._42 = mInvView._43 = 0;
+
+    D3DXMATRIX mLastRotInv;
+    D3DXMatrixInverse(&mLastRotInv, NULL, &m_mRotSnapshot);
+
+    D3DXMATRIX mRot = *m_ArcBall.GetRotationMatrix();
+    m_mRotSnapshot = mRot;
+
+    // Accumulate the delta of the arcball's rotation in view space.
+    // Note that per-frame delta rotations could be problematic over long periods of time.
+    m_mRot *= m_mView * mLastRotInv * mRot * mInvView;
+
+    // Since we're accumulating delta rotations, we need to orthonormalize 
+    // the matrix to prevent eventual matrix skew
+    D3DXVECTOR3* pXBasis = (D3DXVECTOR3*) &m_mRot._11;
+    D3DXVECTOR3* pYBasis = (D3DXVECTOR3*) &m_mRot._21;
+    D3DXVECTOR3* pZBasis = (D3DXVECTOR3*) &m_mRot._31;
+    D3DXVec3Normalize( pXBasis, pXBasis );
+    D3DXVec3Cross( pYBasis, pZBasis, pXBasis );
+    D3DXVec3Normalize( pYBasis, pYBasis );
+    D3DXVec3Cross( pZBasis, pXBasis, pYBasis );
+
+    // Transform the default direction vector by the light's rotation matrix
+    D3DXVec3TransformNormal( &m_vCurrentDir, &m_vDefaultDir, &m_mRot );
+
+    return S_OK;
+}
+
+//--------------------------------------------------------------------------------------
+// Direct3D9 dynamic linking support -- calls top-level D3D9 APIs with graceful
+// failure if APIs are not present.
+//--------------------------------------------------------------------------------------
+
+// Function prototypes
+typedef IDirect3D9* (WINAPI * LPDIRECT3DCREATE9) (UINT);
+typedef INT         (WINAPI * LPD3DPERF_BEGINEVENT)(D3DCOLOR, LPCWSTR);
+typedef INT         (WINAPI * LPD3DPERF_ENDEVENT)(void);
+typedef VOID        (WINAPI * LPD3DPERF_SETMARKER)(D3DCOLOR, LPCWSTR);
+typedef VOID        (WINAPI * LPD3DPERF_SETREGION)(D3DCOLOR, LPCWSTR);
+typedef BOOL        (WINAPI * LPD3DPERF_QUERYREPEATFRAME)(void);
+typedef VOID        (WINAPI * LPD3DPERF_SETOPTIONS)( DWORD dwOptions );
+typedef DWORD       (WINAPI * LPD3DPERF_GETSTATUS)( void );
+
+// Module and function pointers
+static HMODULE s_hModD3D9 = NULL;
+static LPDIRECT3DCREATE9 s_DynamicDirect3DCreate9 = NULL;
+static LPD3DPERF_BEGINEVENT s_DynamicD3DPERF_BeginEvent = NULL;
+static LPD3DPERF_ENDEVENT s_DynamicD3DPERF_EndEvent = NULL;
+static LPD3DPERF_SETMARKER s_DynamicD3DPERF_SetMarker = NULL;
+static LPD3DPERF_SETREGION s_DynamicD3DPERF_SetRegion = NULL;
+static LPD3DPERF_QUERYREPEATFRAME s_DynamicD3DPERF_QueryRepeatFrame = NULL;
+static LPD3DPERF_SETOPTIONS s_DynamicD3DPERF_SetOptions = NULL;
+static LPD3DPERF_GETSTATUS s_DynamicD3DPERF_GetStatus = NULL;
+
+// Ensure function pointers are initialized
+static bool DXUT_EnsureD3DAPIs( void )
+{
+    // If module is non-NULL, this function has already been called.  Note
+    // that this doesn't guarantee that all D3D9 procaddresses were found.
+    if( s_hModD3D9 != NULL )
+        return true;
+
+    // This may fail if DirectX 9 isn't installed
+    WCHAR wszPath[MAX_PATH+1];
+    if( !::GetSystemDirectory( wszPath, MAX_PATH+1 ) )
+        return false;
+    StringCchCat( wszPath, MAX_PATH, L"\\d3d9.dll" );
+    s_hModD3D9 = LoadLibrary( wszPath );
+    if( s_hModD3D9 == NULL ) 
+        return false;
+    s_DynamicDirect3DCreate9 = (LPDIRECT3DCREATE9)GetProcAddress( s_hModD3D9, "Direct3DCreate9" );
+    s_DynamicD3DPERF_BeginEvent = (LPD3DPERF_BEGINEVENT)GetProcAddress( s_hModD3D9, "D3DPERF_BeginEvent" );
+    s_DynamicD3DPERF_EndEvent = (LPD3DPERF_ENDEVENT)GetProcAddress( s_hModD3D9, "D3DPERF_EndEvent" );
+    s_DynamicD3DPERF_SetMarker = (LPD3DPERF_SETMARKER)GetProcAddress( s_hModD3D9, "D3DPERF_SetMarker" );
+    s_DynamicD3DPERF_SetRegion = (LPD3DPERF_SETREGION)GetProcAddress( s_hModD3D9, "D3DPERF_SetRegion" );
+    s_DynamicD3DPERF_QueryRepeatFrame = (LPD3DPERF_QUERYREPEATFRAME)GetProcAddress( s_hModD3D9, "D3DPERF_QueryRepeatFrame" );
+    s_DynamicD3DPERF_SetOptions = (LPD3DPERF_SETOPTIONS)GetProcAddress( s_hModD3D9, "D3DPERF_SetOptions" );
+    s_DynamicD3DPERF_GetStatus = (LPD3DPERF_GETSTATUS)GetProcAddress( s_hModD3D9, "D3DPERF_GetStatus" );
+    return true;
+}
+
+IDirect3D9 * WINAPI DXUT_Dynamic_Direct3DCreate9(UINT SDKVersion) 
+{
+    if( DXUT_EnsureD3DAPIs() && s_DynamicDirect3DCreate9 != NULL )
+        return s_DynamicDirect3DCreate9( SDKVersion );
+    else
+        return NULL;
+}
+
+int WINAPI DXUT_Dynamic_D3DPERF_BeginEvent( D3DCOLOR col, LPCWSTR wszName )
+{
+    if( DXUT_EnsureD3DAPIs() && s_DynamicD3DPERF_BeginEvent != NULL )
+        return s_DynamicD3DPERF_BeginEvent( col, wszName );
+    else
+        return -1;
+}
+
+int WINAPI DXUT_Dynamic_D3DPERF_EndEvent( void )
+{
+    if( DXUT_EnsureD3DAPIs() && s_DynamicD3DPERF_EndEvent != NULL )
+        return s_DynamicD3DPERF_EndEvent();
+    else
+        return -1;
+}
+
+void WINAPI DXUT_Dynamic_D3DPERF_SetMarker( D3DCOLOR col, LPCWSTR wszName )
+{
+    if( DXUT_EnsureD3DAPIs() && s_DynamicD3DPERF_SetMarker != NULL )
+        s_DynamicD3DPERF_SetMarker( col, wszName );
+}
+
+void WINAPI DXUT_Dynamic_D3DPERF_SetRegion( D3DCOLOR col, LPCWSTR wszName )
+{
+    if( DXUT_EnsureD3DAPIs() && s_DynamicD3DPERF_SetRegion != NULL )
+        s_DynamicD3DPERF_SetRegion( col, wszName );
+}
+
+BOOL WINAPI DXUT_Dynamic_D3DPERF_QueryRepeatFrame( void )
+{
+    if( DXUT_EnsureD3DAPIs() && s_DynamicD3DPERF_QueryRepeatFrame != NULL )
+        return s_DynamicD3DPERF_QueryRepeatFrame();
+    else
+        return FALSE;
+}
+
+void WINAPI DXUT_Dynamic_D3DPERF_SetOptions( DWORD dwOptions )
+{
+    if( DXUT_EnsureD3DAPIs() && s_DynamicD3DPERF_SetOptions != NULL )
+        s_DynamicD3DPERF_SetOptions( dwOptions );
+}
+
+DWORD WINAPI DXUT_Dynamic_D3DPERF_GetStatus( void )
+{
+    if( DXUT_EnsureD3DAPIs() && s_DynamicD3DPERF_GetStatus != NULL )
+        return s_DynamicD3DPERF_GetStatus();
+    else
+        return 0;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Trace a string description of a decl 
+//--------------------------------------------------------------------------------------
+void DXUTTraceDecl( D3DVERTEXELEMENT9 decl[MAX_FVF_DECL_SIZE] )
+{
+    int iDecl=0;
+    for( iDecl=0; iDecl<MAX_FVF_DECL_SIZE; iDecl++ )
+    {
+        if( decl[iDecl].Stream == 0xFF )
+            break;
+
+        DXUTOutputDebugString( L"decl[%d]=Stream:%d, Offset:%d, %s, %s, %s, UsageIndex:%d\n", iDecl, 
+                    decl[iDecl].Stream,
+                    decl[iDecl].Offset,
+                    DXUTTraceD3DDECLTYPEtoString( decl[iDecl].Type ),
+                    DXUTTraceD3DDECLMETHODtoString( decl[iDecl].Method ),
+                    DXUTTraceD3DDECLUSAGEtoString( decl[iDecl].Usage ),
+                    decl[iDecl].UsageIndex );
+    }
+
+    DXUTOutputDebugString( L"decl[%d]=D3DDECL_END\n", iDecl );
+}
+
+
+//--------------------------------------------------------------------------------------
+WCHAR* DXUTTraceD3DDECLTYPEtoString( BYTE t )
+{
+    switch( t )
+    {
+        case D3DDECLTYPE_FLOAT1: return L"D3DDECLTYPE_FLOAT1";
+        case D3DDECLTYPE_FLOAT2: return L"D3DDECLTYPE_FLOAT2";
+        case D3DDECLTYPE_FLOAT3: return L"D3DDECLTYPE_FLOAT3";
+        case D3DDECLTYPE_FLOAT4: return L"D3DDECLTYPE_FLOAT4";
+        case D3DDECLTYPE_D3DCOLOR: return L"D3DDECLTYPE_D3DCOLOR";
+        case D3DDECLTYPE_UBYTE4: return L"D3DDECLTYPE_UBYTE4";
+        case D3DDECLTYPE_SHORT2: return L"D3DDECLTYPE_SHORT2";
+        case D3DDECLTYPE_SHORT4: return L"D3DDECLTYPE_SHORT4";
+        case D3DDECLTYPE_UBYTE4N: return L"D3DDECLTYPE_UBYTE4N";
+        case D3DDECLTYPE_SHORT2N: return L"D3DDECLTYPE_SHORT2N";
+        case D3DDECLTYPE_SHORT4N: return L"D3DDECLTYPE_SHORT4N";
+        case D3DDECLTYPE_USHORT2N: return L"D3DDECLTYPE_USHORT2N";
+        case D3DDECLTYPE_USHORT4N: return L"D3DDECLTYPE_USHORT4N";
+        case D3DDECLTYPE_UDEC3: return L"D3DDECLTYPE_UDEC3";
+        case D3DDECLTYPE_DEC3N: return L"D3DDECLTYPE_DEC3N";
+        case D3DDECLTYPE_FLOAT16_2: return L"D3DDECLTYPE_FLOAT16_2";
+        case D3DDECLTYPE_FLOAT16_4: return L"D3DDECLTYPE_FLOAT16_4";
+        case D3DDECLTYPE_UNUSED: return L"D3DDECLTYPE_UNUSED";
+        default: return L"D3DDECLTYPE Unknown";
+    }
+}
+
+WCHAR* DXUTTraceD3DDECLMETHODtoString( BYTE m )
+{
+    switch( m )
+    {
+        case D3DDECLMETHOD_DEFAULT: return L"D3DDECLMETHOD_DEFAULT";
+        case D3DDECLMETHOD_PARTIALU: return L"D3DDECLMETHOD_PARTIALU";
+        case D3DDECLMETHOD_PARTIALV: return L"D3DDECLMETHOD_PARTIALV";
+        case D3DDECLMETHOD_CROSSUV: return L"D3DDECLMETHOD_CROSSUV";
+        case D3DDECLMETHOD_UV: return L"D3DDECLMETHOD_UV";
+        case D3DDECLMETHOD_LOOKUP: return L"D3DDECLMETHOD_LOOKUP";
+        case D3DDECLMETHOD_LOOKUPPRESAMPLED: return L"D3DDECLMETHOD_LOOKUPPRESAMPLED";
+        default: return L"D3DDECLMETHOD Unknown";
+    }
+}
+
+WCHAR* DXUTTraceD3DDECLUSAGEtoString( BYTE u )
+{
+    switch( u )
+    {
+        case D3DDECLUSAGE_POSITION: return L"D3DDECLUSAGE_POSITION";
+        case D3DDECLUSAGE_BLENDWEIGHT: return L"D3DDECLUSAGE_BLENDWEIGHT";
+        case D3DDECLUSAGE_BLENDINDICES: return L"D3DDECLUSAGE_BLENDINDICES";
+        case D3DDECLUSAGE_NORMAL: return L"D3DDECLUSAGE_NORMAL";
+        case D3DDECLUSAGE_PSIZE: return L"D3DDECLUSAGE_PSIZE";
+        case D3DDECLUSAGE_TEXCOORD: return L"D3DDECLUSAGE_TEXCOORD";
+        case D3DDECLUSAGE_TANGENT: return L"D3DDECLUSAGE_TANGENT";
+        case D3DDECLUSAGE_BINORMAL: return L"D3DDECLUSAGE_BINORMAL";
+        case D3DDECLUSAGE_TESSFACTOR: return L"D3DDECLUSAGE_TESSFACTOR";
+        case D3DDECLUSAGE_POSITIONT: return L"D3DDECLUSAGE_POSITIONT";
+        case D3DDECLUSAGE_COLOR: return L"D3DDECLUSAGE_COLOR";
+        case D3DDECLUSAGE_FOG: return L"D3DDECLUSAGE_FOG";
+        case D3DDECLUSAGE_DEPTH: return L"D3DDECLUSAGE_DEPTH";
+        case D3DDECLUSAGE_SAMPLE: return L"D3DDECLUSAGE_SAMPLE";
+        default: return L"D3DDECLUSAGE Unknown";
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+// Multimon API handling for OSes with or without multimon API support
+//--------------------------------------------------------------------------------------
+#define DXUT_PRIMARY_MONITOR ((HMONITOR)0x12340042)
+typedef HMONITOR (WINAPI* LPMONITORFROMWINDOW)(HWND, DWORD);
+typedef BOOL     (WINAPI* LPGETMONITORINFO)(HMONITOR, LPMONITORINFO);
+
+BOOL DXUTGetMonitorInfo(HMONITOR hMonitor, LPMONITORINFO lpMonitorInfo)
+{
+    static bool s_bInited = false;
+    static LPGETMONITORINFO s_pFnGetMonitorInfo = NULL;
+    if( !s_bInited )        
+    {
+        s_bInited = true;
+        HMODULE hUser32 = GetModuleHandle( L"USER32" );
+        if (hUser32 ) 
+        {
+            OSVERSIONINFOA osvi = {0}; osvi.dwOSVersionInfoSize = sizeof(osvi); GetVersionExA((OSVERSIONINFOA*)&osvi);
+            bool bNT = (VER_PLATFORM_WIN32_NT == osvi.dwPlatformId);    
+            s_pFnGetMonitorInfo = (LPGETMONITORINFO) (bNT ? GetProcAddress(hUser32,"GetMonitorInfoW") : GetProcAddress(hUser32,"GetMonitorInfoA"));
+        }
+    }
+
+    if( s_pFnGetMonitorInfo ) 
+        return s_pFnGetMonitorInfo(hMonitor, lpMonitorInfo);
+
+    RECT rcWork;
+    if ((hMonitor == DXUT_PRIMARY_MONITOR) && lpMonitorInfo && (lpMonitorInfo->cbSize >= sizeof(MONITORINFO)) && SystemParametersInfoA(SPI_GETWORKAREA, 0, &rcWork, 0))
+    {
+        lpMonitorInfo->rcMonitor.left = 0;
+        lpMonitorInfo->rcMonitor.top  = 0;
+        lpMonitorInfo->rcMonitor.right  = GetSystemMetrics(SM_CXSCREEN);
+        lpMonitorInfo->rcMonitor.bottom = GetSystemMetrics(SM_CYSCREEN);
+        lpMonitorInfo->rcWork = rcWork;
+        lpMonitorInfo->dwFlags = MONITORINFOF_PRIMARY;
+        return TRUE;
+    }
+    return FALSE;
+}
+
+
+HMONITOR DXUTMonitorFromWindow(HWND hWnd, DWORD dwFlags)
+{
+    static bool s_bInited = false;
+    static LPMONITORFROMWINDOW s_pFnGetMonitorFronWindow = NULL;
+    if( !s_bInited )        
+    {
+        s_bInited = true;
+        HMODULE hUser32 = GetModuleHandle( L"USER32" );
+        if (hUser32 ) s_pFnGetMonitorFronWindow = (LPMONITORFROMWINDOW) GetProcAddress(hUser32,"MonitorFromWindow");
+    }
+
+    if( s_pFnGetMonitorFronWindow ) 
+        return s_pFnGetMonitorFronWindow(hWnd, dwFlags);
+    if (dwFlags & (MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST))
+        return DXUT_PRIMARY_MONITOR;
+    return NULL;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Get the desktop resolution of an adapter. This isn't the same as the current resolution 
+// from GetAdapterDisplayMode since the device might be fullscreen 
+//--------------------------------------------------------------------------------------
+void DXUTGetDesktopResolution( UINT AdapterOrdinal, UINT* pWidth, UINT* pHeight )
+{
+    CD3DEnumeration* pd3dEnum = DXUTGetEnumeration();
+    CD3DEnumAdapterInfo* pAdapterInfo = pd3dEnum->GetAdapterInfo( AdapterOrdinal );                       
+    DEVMODE devMode;
+    ZeroMemory( &devMode, sizeof(DEVMODE) );
+    devMode.dmSize = sizeof(DEVMODE);
+    WCHAR strDeviceName[256];
+    MultiByteToWideChar( CP_ACP, 0, pAdapterInfo->AdapterIdentifier.DeviceName, -1, strDeviceName, 256 );
+    strDeviceName[255] = 0;
+    EnumDisplaySettings( strDeviceName, ENUM_REGISTRY_SETTINGS, &devMode );
+    
+    if( pWidth )
+        *pWidth = devMode.dmPelsWidth;
+    if( pHeight )
+        *pHeight = devMode.dmPelsHeight;
+}
+
+
+//--------------------------------------------------------------------------------------
+IDirect3DDevice9* DXUTCreateRefDevice( HWND hWnd, bool bNullRef )
+{
+    HRESULT hr;
+    IDirect3D9* pD3D = DXUT_Dynamic_Direct3DCreate9( D3D_SDK_VERSION );
+    if( NULL == pD3D )
+        return NULL;
+
+    D3DDISPLAYMODE Mode;
+    pD3D->GetAdapterDisplayMode(0, &Mode);
+
+    D3DPRESENT_PARAMETERS pp;
+    ZeroMemory( &pp, sizeof(D3DPRESENT_PARAMETERS) );
+    pp.BackBufferWidth  = 1;
+    pp.BackBufferHeight = 1;
+    pp.BackBufferFormat = Mode.Format;
+    pp.BackBufferCount  = 1;
+    pp.SwapEffect       = D3DSWAPEFFECT_COPY;
+    pp.Windowed         = TRUE;
+    pp.hDeviceWindow    = hWnd;
+
+    IDirect3DDevice9* pd3dDevice = NULL;
+    hr = pD3D->CreateDevice( D3DADAPTER_DEFAULT, bNullRef ? D3DDEVTYPE_NULLREF : D3DDEVTYPE_REF,
+                             hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &pp, &pd3dDevice );
+
+    SAFE_RELEASE( pD3D );
+    return pd3dDevice;
+}
+
+
+typedef DWORD (WINAPI* LPXINPUTGETSTATE)(DWORD dwUserIndex, XINPUT_STATE* pState );
+typedef DWORD (WINAPI* LPXINPUTSETSTATE)(DWORD dwUserIndex, XINPUT_VIBRATION* pVibration );
+typedef DWORD (WINAPI* LPXINPUTGETCAPABILITIES)( DWORD dwUserIndex, DWORD dwFlags, XINPUT_CAPABILITIES* pCapabilities );
+
+
+
+//--------------------------------------------------------------------------------------
+// Does extra processing on XInput data to make it slightly more convenient to use
+//--------------------------------------------------------------------------------------
+HRESULT DXUTGetGamepadState( DWORD dwPort, DXUT_GAMEPAD* pGamePad, bool bThumbstickDeadZone, bool bSnapThumbstickToCardinals )
+{
+    if( dwPort >= DXUT_MAX_CONTROLLERS || pGamePad == NULL )
+        return E_FAIL;
+
+    static LPXINPUTGETSTATE s_pXInputGetState = NULL;
+    static LPXINPUTGETCAPABILITIES s_pXInputGetCapabilities = NULL;
+    if( NULL == s_pXInputGetState || NULL == s_pXInputGetCapabilities )
+    {
+        WCHAR wszPath[MAX_PATH];
+        if( GetSystemDirectory( wszPath, MAX_PATH ) )
+        {
+            StringCchCat( wszPath, MAX_PATH, L"\\" );
+            StringCchCat( wszPath, MAX_PATH, XINPUT_DLL );
+            HINSTANCE hInst = LoadLibrary( wszPath );
+            if( hInst ) 
+            {
+                s_pXInputGetState = (LPXINPUTGETSTATE)GetProcAddress( hInst, "XInputGetState" );
+                s_pXInputGetCapabilities = (LPXINPUTGETCAPABILITIES)GetProcAddress( hInst, "XInputGetCapabilities" );
+            }
+        }
+    }
+    if( s_pXInputGetState == NULL )
+        return E_FAIL;
+
+    XINPUT_STATE InputState;
+    DWORD dwResult = s_pXInputGetState( dwPort, &InputState );
+
+    // Track insertion and removals
+    BOOL bWasConnected = pGamePad->bConnected;
+    pGamePad->bConnected = (dwResult == ERROR_SUCCESS);
+    pGamePad->bRemoved  = (  bWasConnected && !pGamePad->bConnected );
+    pGamePad->bInserted = ( !bWasConnected &&  pGamePad->bConnected );
+
+    // Don't update rest of the state if not connected
+    if( !pGamePad->bConnected )
+        return S_OK;
+
+    // Store the capabilities of the device
+    if( pGamePad->bInserted )
+    {
+        ZeroMemory( pGamePad, sizeof(DXUT_GAMEPAD) );
+        pGamePad->bConnected = true;
+        pGamePad->bInserted  = true;
+        if( s_pXInputGetCapabilities )
+            s_pXInputGetCapabilities( dwPort, XINPUT_DEVTYPE_GAMEPAD, &pGamePad->caps );
+    }
+
+    // Copy gamepad to local structure (assumes that XINPUT_GAMEPAD at the front in CONTROLER_STATE)
+    memcpy( pGamePad, &InputState.Gamepad, sizeof(XINPUT_GAMEPAD) );
+
+    if( bSnapThumbstickToCardinals )
+    {
+        // Apply deadzone to each axis independantly to slightly snap to up/down/left/right
+	    if( pGamePad->sThumbLX < DXUT_INPUT_DEADZONE && pGamePad->sThumbLX > -DXUT_INPUT_DEADZONE )
+		    pGamePad->sThumbLX = 0;
+        if( pGamePad->sThumbLY < DXUT_INPUT_DEADZONE && pGamePad->sThumbLY > -DXUT_INPUT_DEADZONE ) 
+		    pGamePad->sThumbLY = 0;
+        if( pGamePad->sThumbRX < DXUT_INPUT_DEADZONE && pGamePad->sThumbRX > -DXUT_INPUT_DEADZONE )
+		    pGamePad->sThumbRX = 0;
+        if( pGamePad->sThumbRY < DXUT_INPUT_DEADZONE && pGamePad->sThumbRY > -DXUT_INPUT_DEADZONE ) 
+		    pGamePad->sThumbRY = 0;
+    }
+    else if( bThumbstickDeadZone )
+    {
+        // Apply deadzone if centered
+	    if( (pGamePad->sThumbLX < DXUT_INPUT_DEADZONE && pGamePad->sThumbLX > -DXUT_INPUT_DEADZONE) && 
+            (pGamePad->sThumbLY < DXUT_INPUT_DEADZONE && pGamePad->sThumbLY > -DXUT_INPUT_DEADZONE) ) 
+	    {	
+		    pGamePad->sThumbLX = 0;
+		    pGamePad->sThumbLY = 0;
+	    }
+	    if( (pGamePad->sThumbRX < DXUT_INPUT_DEADZONE && pGamePad->sThumbRX > -DXUT_INPUT_DEADZONE) && 
+            (pGamePad->sThumbRY < DXUT_INPUT_DEADZONE && pGamePad->sThumbRY > -DXUT_INPUT_DEADZONE) ) 
+	    {
+		    pGamePad->sThumbRX = 0;
+		    pGamePad->sThumbRY = 0;
+	    }
+    }
+
+    // Convert [-1,+1] range
+    pGamePad->fThumbLX = pGamePad->sThumbLX / 32767.0f;
+    pGamePad->fThumbLY = pGamePad->sThumbLY / 32767.0f;
+    pGamePad->fThumbRX = pGamePad->sThumbRX / 32767.0f;
+    pGamePad->fThumbRY = pGamePad->sThumbRY / 32767.0f;
+
+    // Get the boolean buttons that have been pressed since the last call. 
+    // Each button is represented by one bit.
+    pGamePad->wPressedButtons = ( pGamePad->wLastButtons ^ pGamePad->wButtons ) & pGamePad->wButtons;
+    pGamePad->wLastButtons    = pGamePad->wButtons;
+
+    // Figure out if the left trigger has been pressed or released
+    bool bPressed = ( pGamePad->bLeftTrigger > DXUT_GAMEPAD_TRIGGER_THRESHOLD );
+    pGamePad->bPressedLeftTrigger = ( bPressed ) ? !pGamePad->bLastLeftTrigger : false;
+    pGamePad->bLastLeftTrigger = bPressed;
+
+    // Figure out if the right trigger has been pressed or released
+    bPressed = ( pGamePad->bRightTrigger > DXUT_GAMEPAD_TRIGGER_THRESHOLD );
+    pGamePad->bPressedRightTrigger = ( bPressed ) ? !pGamePad->bLastRightTrigger : false;
+    pGamePad->bLastRightTrigger = bPressed;
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Don't pause the game or deactive the window without first stopping rumble otherwise 
+// the controller will continue to rumble
+//--------------------------------------------------------------------------------------
+HRESULT DXUTStopRumbleOnAllControllers()
+{
+    static LPXINPUTSETSTATE s_pXInputSetState = NULL;
+    if( NULL == s_pXInputSetState )
+    {
+        WCHAR wszPath[MAX_PATH];
+        if( GetSystemDirectory( wszPath, MAX_PATH ) )
+        {
+            StringCchCat( wszPath, MAX_PATH, L"\\" );
+            StringCchCat( wszPath, MAX_PATH, XINPUT_DLL );
+            HINSTANCE hInst = LoadLibrary( wszPath );
+            if( hInst ) 
+                s_pXInputSetState = (LPXINPUTSETSTATE)GetProcAddress( hInst, "XInputSetState" );
+        }
+    }
+    if( s_pXInputSetState == NULL )
+        return E_FAIL;
+
+    XINPUT_VIBRATION vibration;
+    vibration.wLeftMotorSpeed  = 0;
+    vibration.wRightMotorSpeed = 0;
+    for( int iUserIndex=0; iUserIndex<DXUT_MAX_CONTROLLERS; iUserIndex++ )
+        s_pXInputSetState( iUserIndex, &vibration );
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Helper function to launch the Media Center UI after the program terminates
+//--------------------------------------------------------------------------------------
+bool DXUTReLaunchMediaCenter()
+{
+    // Skip if not running on a Media Center
+    if( GetSystemMetrics( 87 ) == 0 ) //  SM_MEDIACENTER == 87, but is only defined if _WIN32_WINNT >= 0x0501
+        return false;
+ 
+    // Get the path to Media Center
+    WCHAR szExpandedPath[MAX_PATH];
+    if( !ExpandEnvironmentStrings( L"%SystemRoot%\\ehome\\ehshell.exe", szExpandedPath, MAX_PATH) )
+        return false;
+
+    // Skip if ehshell.exe doesn't exist
+    if( GetFileAttributes( szExpandedPath ) == 0xFFFFFFFF )
+        return false;
+ 
+    // Launch ehshell.exe 
+    INT_PTR result = (INT_PTR)ShellExecute( NULL, TEXT("open"), szExpandedPath, NULL, NULL, SW_SHOWNORMAL);
+    return (result > 32);
+}
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTMesh.cpp
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTMesh.cpp	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTMesh.cpp	(revision 761)
@@ -0,0 +1,1080 @@
+//-----------------------------------------------------------------------------
+// File: DXUTMesh.cpp
+//
+// Desc: Support code for loading DirectX .X files.
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//-----------------------------------------------------------------------------
+#include "dxstdafx.h"
+#include <dxfile.h>
+#include <rmxfguid.h>
+#include <rmxftmpl.h>
+#include "DXUTMesh.h"
+#undef min // use __min instead
+#undef max // use __max instead
+
+
+
+
+//-----------------------------------------------------------------------------
+CDXUTMesh::CDXUTMesh( LPCWSTR strName )
+{
+    StringCchCopy( m_strName, 512, strName );
+    m_pMesh              = NULL;
+    m_dwNumMaterials     = 0L;
+    m_pMaterials         = NULL;
+    m_pTextures          = NULL;
+    m_bUseMaterials      = TRUE;
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+CDXUTMesh::~CDXUTMesh()
+{
+    Destroy();
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+HRESULT CDXUTMesh::Create( LPDIRECT3DDEVICE9 pd3dDevice, LPCWSTR strFilename )
+{
+    WCHAR        strPath[MAX_PATH];
+    LPD3DXBUFFER pAdjacencyBuffer = NULL;
+    LPD3DXBUFFER pMtrlBuffer = NULL;
+    HRESULT      hr;
+
+    // Cleanup previous mesh if any
+    Destroy();
+
+    // Find the path for the file, and convert it to ANSI (for the D3DX API)
+    DXUTFindDXSDKMediaFileCch( strPath, sizeof(strPath) / sizeof(WCHAR), strFilename );
+
+    // Load the mesh
+    if( FAILED( hr = D3DXLoadMeshFromX( strPath, D3DXMESH_MANAGED, pd3dDevice, 
+                                        &pAdjacencyBuffer, &pMtrlBuffer, NULL,
+                                        &m_dwNumMaterials, &m_pMesh ) ) )
+    {
+        return hr;
+    }
+
+    // Optimize the mesh for performance
+    if( FAILED( hr = m_pMesh->OptimizeInplace(
+                        D3DXMESHOPT_COMPACT | D3DXMESHOPT_ATTRSORT | D3DXMESHOPT_VERTEXCACHE,
+                        (DWORD*)pAdjacencyBuffer->GetBufferPointer(), NULL, NULL, NULL ) ) )
+    {
+        SAFE_RELEASE( pAdjacencyBuffer );
+        SAFE_RELEASE( pMtrlBuffer );
+        return hr;
+    }
+
+    // Set strPath to the path of the mesh file
+    WCHAR *pLastBSlash = wcsrchr( strPath, L'\\' );
+    if( pLastBSlash )
+        *(pLastBSlash + 1) = L'\0';
+    else
+        *strPath = L'\0';
+
+    D3DXMATERIAL* d3dxMtrls = (D3DXMATERIAL*)pMtrlBuffer->GetBufferPointer();
+    hr = CreateMaterials( strPath, pd3dDevice, d3dxMtrls, m_dwNumMaterials );
+
+    SAFE_RELEASE( pAdjacencyBuffer );
+    SAFE_RELEASE( pMtrlBuffer );
+
+    // Extract data from m_pMesh for easy access
+    D3DVERTEXELEMENT9 decl[MAX_FVF_DECL_SIZE];
+    m_dwNumVertices    = m_pMesh->GetNumVertices();
+    m_dwNumFaces       = m_pMesh->GetNumFaces();
+    m_dwBytesPerVertex = m_pMesh->GetNumBytesPerVertex();
+    m_pMesh->GetIndexBuffer( &m_pIB );
+    m_pMesh->GetVertexBuffer( &m_pVB );
+    m_pMesh->GetDeclaration( decl );
+    pd3dDevice->CreateVertexDeclaration( decl, &m_pDecl );
+
+    return hr;
+}
+
+
+//-----------------------------------------------------------------------------
+HRESULT CDXUTMesh::Create( LPDIRECT3DDEVICE9 pd3dDevice,
+                           LPD3DXFILEDATA pFileData )
+{
+    LPD3DXBUFFER pMtrlBuffer = NULL;
+    LPD3DXBUFFER pAdjacencyBuffer = NULL;
+    HRESULT      hr;
+
+    // Cleanup previous mesh if any
+    Destroy();
+
+    // Load the mesh from the DXFILEDATA object
+    if( FAILED( hr = D3DXLoadMeshFromXof( pFileData, D3DXMESH_MANAGED, pd3dDevice,
+                                          &pAdjacencyBuffer, &pMtrlBuffer, NULL,
+                                          &m_dwNumMaterials, &m_pMesh ) ) )
+    {
+        return hr;
+    }
+
+    // Optimize the mesh for performance
+    if( FAILED( hr = m_pMesh->OptimizeInplace(
+                        D3DXMESHOPT_COMPACT | D3DXMESHOPT_ATTRSORT | D3DXMESHOPT_VERTEXCACHE,
+                        (DWORD*)pAdjacencyBuffer->GetBufferPointer(), NULL, NULL, NULL ) ) )
+    {
+        SAFE_RELEASE( pAdjacencyBuffer );
+        SAFE_RELEASE( pMtrlBuffer );
+        return hr;
+    }
+
+    D3DXMATERIAL* d3dxMtrls = (D3DXMATERIAL*)pMtrlBuffer->GetBufferPointer();
+    hr = CreateMaterials( L"", pd3dDevice, d3dxMtrls, m_dwNumMaterials );
+
+    SAFE_RELEASE( pAdjacencyBuffer );
+    SAFE_RELEASE( pMtrlBuffer );
+
+    // Extract data from m_pMesh for easy access
+    D3DVERTEXELEMENT9 decl[MAX_FVF_DECL_SIZE];
+    m_dwNumVertices    = m_pMesh->GetNumVertices();
+    m_dwNumFaces       = m_pMesh->GetNumFaces();
+    m_dwBytesPerVertex = m_pMesh->GetNumBytesPerVertex();
+    m_pMesh->GetIndexBuffer( &m_pIB );
+    m_pMesh->GetVertexBuffer( &m_pVB );
+    m_pMesh->GetDeclaration( decl );
+    pd3dDevice->CreateVertexDeclaration( decl, &m_pDecl );
+
+    return hr;
+}
+
+
+//-----------------------------------------------------------------------------
+HRESULT CDXUTMesh::Create( LPDIRECT3DDEVICE9 pd3dDevice, ID3DXMesh* pInMesh, 
+                           D3DXMATERIAL* pd3dxMaterials, DWORD dwMaterials )
+{
+    // Cleanup previous mesh if any
+    Destroy();
+
+    // Optimize the mesh for performance
+    DWORD *rgdwAdjacency = NULL;
+    rgdwAdjacency = new DWORD[pInMesh->GetNumFaces() * 3];
+    if( rgdwAdjacency == NULL )
+        return E_OUTOFMEMORY;
+    pInMesh->GenerateAdjacency(1e-6f,rgdwAdjacency);
+
+    D3DVERTEXELEMENT9 decl[MAX_FVF_DECL_SIZE];
+    pInMesh->GetDeclaration( decl );
+
+    DWORD dwOptions = pInMesh->GetOptions();
+    dwOptions &= ~(D3DXMESH_32BIT | D3DXMESH_SYSTEMMEM | D3DXMESH_WRITEONLY);
+    dwOptions |= D3DXMESH_MANAGED;
+    dwOptions |= D3DXMESHOPT_COMPACT | D3DXMESHOPT_ATTRSORT | D3DXMESHOPT_VERTEXCACHE;
+
+    ID3DXMesh* pTempMesh = NULL;
+    if( FAILED( pInMesh->Optimize( dwOptions, rgdwAdjacency, NULL, NULL, NULL, &pTempMesh ) ) )
+    {
+        SAFE_DELETE_ARRAY( rgdwAdjacency );
+        return E_FAIL;
+    }
+
+    SAFE_DELETE_ARRAY( rgdwAdjacency );
+    SAFE_RELEASE( m_pMesh );
+    m_pMesh = pTempMesh;
+
+    HRESULT hr;
+    hr = CreateMaterials( L"", pd3dDevice, pd3dxMaterials, dwMaterials );
+
+    // Extract data from m_pMesh for easy access
+    m_dwNumVertices    = m_pMesh->GetNumVertices();
+    m_dwNumFaces       = m_pMesh->GetNumFaces();
+    m_dwBytesPerVertex = m_pMesh->GetNumBytesPerVertex();
+    m_pMesh->GetIndexBuffer( &m_pIB );
+    m_pMesh->GetVertexBuffer( &m_pVB );
+    m_pMesh->GetDeclaration( decl );
+    pd3dDevice->CreateVertexDeclaration( decl, &m_pDecl );
+
+    return hr;
+}
+
+
+//-----------------------------------------------------------------------------
+HRESULT CDXUTMesh::CreateMaterials( LPCWSTR strPath, IDirect3DDevice9 *pd3dDevice, D3DXMATERIAL* d3dxMtrls, DWORD dwNumMaterials )
+{
+    // Get material info for the mesh
+    // Get the array of materials out of the buffer
+    m_dwNumMaterials = dwNumMaterials;
+    if( d3dxMtrls && m_dwNumMaterials > 0 )
+    {
+        // Allocate memory for the materials and textures
+        m_pMaterials = new D3DMATERIAL9[m_dwNumMaterials];
+        if( m_pMaterials == NULL )
+            return E_OUTOFMEMORY;
+        m_pTextures = new LPDIRECT3DBASETEXTURE9[m_dwNumMaterials];
+        if( m_pTextures == NULL )
+            return E_OUTOFMEMORY;
+        m_strMaterials = new CHAR[m_dwNumMaterials][MAX_PATH];
+        if( m_strMaterials == NULL )
+            return E_OUTOFMEMORY;
+
+        // Copy each material and create its texture
+        for( DWORD i=0; i<m_dwNumMaterials; i++ )
+        {
+            // Copy the material
+            m_pMaterials[i]         = d3dxMtrls[i].MatD3D;
+            m_pTextures[i]          = NULL;
+
+            // Create a texture
+            if( d3dxMtrls[i].pTextureFilename )
+            {
+                StringCchCopyA( m_strMaterials[i], MAX_PATH, d3dxMtrls[i].pTextureFilename );
+
+                WCHAR strTexture[MAX_PATH];
+                WCHAR strTextureTemp[MAX_PATH];
+                D3DXIMAGE_INFO ImgInfo;
+
+                // First attempt to look for texture in the same folder as the input folder.
+                MultiByteToWideChar( CP_ACP, 0, d3dxMtrls[i].pTextureFilename, -1, strTextureTemp, MAX_PATH );
+                strTextureTemp[MAX_PATH-1] = 0;
+
+                StringCchCopy( strTexture, MAX_PATH, strPath );
+                StringCchCat( strTexture, MAX_PATH, strTextureTemp );
+
+                // Inspect the texture file to determine the texture type.
+                if( FAILED( D3DXGetImageInfoFromFile( strTexture, &ImgInfo ) ) )
+                {
+                    // Search the media folder
+                    if( FAILED( DXUTFindDXSDKMediaFileCch( strTexture, MAX_PATH, strTextureTemp ) ) )
+                        continue;  // Can't find. Skip.
+
+                    D3DXGetImageInfoFromFile( strTexture, &ImgInfo );
+                }
+
+                // Call the appropriate loader according to the texture type.
+                switch( ImgInfo.ResourceType )
+                {
+                    case D3DRTYPE_TEXTURE:
+                    {
+                        IDirect3DTexture9 *pTex;
+                        if( SUCCEEDED( D3DXCreateTextureFromFile( pd3dDevice, strTexture, &pTex ) ) )
+                        {
+                            // Obtain the base texture interface
+                            pTex->QueryInterface( IID_IDirect3DBaseTexture9, (LPVOID*)&m_pTextures[i] );
+                            // Release the specialized instance
+                            pTex->Release();
+                        }
+                        break;
+                    }
+                    case D3DRTYPE_CUBETEXTURE:
+                    {
+                        IDirect3DCubeTexture9 *pTex;
+                        if( SUCCEEDED( D3DXCreateCubeTextureFromFile( pd3dDevice, strTexture, &pTex ) ) )
+                        {
+                            // Obtain the base texture interface
+                            pTex->QueryInterface( IID_IDirect3DBaseTexture9, (LPVOID*)&m_pTextures[i] );
+                            // Release the specialized instance
+                            pTex->Release();
+                        }
+                        break;
+                    }
+                    case D3DRTYPE_VOLUMETEXTURE:
+                    {
+                        IDirect3DVolumeTexture9 *pTex;
+                        if( SUCCEEDED( D3DXCreateVolumeTextureFromFile( pd3dDevice, strTexture, &pTex ) ) )
+                        {
+                            // Obtain the base texture interface
+                            pTex->QueryInterface( IID_IDirect3DBaseTexture9, (LPVOID*)&m_pTextures[i] );
+                            // Release the specialized instance
+                            pTex->Release();
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+    }
+    return S_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+HRESULT CDXUTMesh::SetFVF( LPDIRECT3DDEVICE9 pd3dDevice, DWORD dwFVF )
+{
+    LPD3DXMESH pTempMesh = NULL;
+
+    if( m_pMesh )
+    {
+        if( FAILED( m_pMesh->CloneMeshFVF( m_pMesh->GetOptions(), dwFVF,
+                                           pd3dDevice, &pTempMesh ) ) )
+        {
+            SAFE_RELEASE( pTempMesh );
+            return E_FAIL;
+        }
+
+        DWORD dwOldFVF = 0;
+        dwOldFVF = m_pMesh->GetFVF();
+        SAFE_RELEASE( m_pMesh );
+        m_pMesh = pTempMesh;
+
+        // Compute normals if they are being requested and
+        // the old mesh does not have them.
+        if( !(dwOldFVF & D3DFVF_NORMAL) && dwFVF & D3DFVF_NORMAL )
+        {
+            D3DXComputeNormals( m_pMesh, NULL );
+        }
+    }
+
+    return S_OK;
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+// Convert the mesh to the format specified by the given vertex declarations.
+//-----------------------------------------------------------------------------
+HRESULT CDXUTMesh::SetVertexDecl( LPDIRECT3DDEVICE9 pd3dDevice, const D3DVERTEXELEMENT9 *pDecl, 
+                                  bool bAutoComputeNormals, bool bAutoComputeTangents, 
+                                  bool bSplitVertexForOptimalTangents )
+{
+    LPD3DXMESH pTempMesh = NULL;
+
+    if( m_pMesh )
+    {
+        if( FAILED( m_pMesh->CloneMesh( m_pMesh->GetOptions(), pDecl,
+                                        pd3dDevice, &pTempMesh ) ) )
+        {
+            SAFE_RELEASE( pTempMesh );
+            return E_FAIL;
+        }
+    }
+
+
+    // Check if the old declaration contains a normal.
+    bool bHadNormal = false;
+    bool bHadTangent = false;
+    D3DVERTEXELEMENT9 aOldDecl[MAX_FVF_DECL_SIZE];
+    if( m_pMesh && SUCCEEDED( m_pMesh->GetDeclaration( aOldDecl ) ) )
+    {
+        for( UINT index = 0; index < D3DXGetDeclLength( aOldDecl ); ++index )
+        {
+            if( aOldDecl[index].Usage == D3DDECLUSAGE_NORMAL )
+            {
+                bHadNormal = true;
+            }
+            if( aOldDecl[index].Usage == D3DDECLUSAGE_TANGENT )
+            {
+                bHadTangent = true;
+            }
+        }
+    }
+
+    // Check if the new declaration contains a normal.
+    bool bHaveNormalNow = false;
+    bool bHaveTangentNow = false;
+    D3DVERTEXELEMENT9 aNewDecl[MAX_FVF_DECL_SIZE];
+    if( pTempMesh && SUCCEEDED( pTempMesh->GetDeclaration( aNewDecl ) ) )
+    {
+        for( UINT index = 0; index < D3DXGetDeclLength( aNewDecl ); ++index )
+        {
+            if( aNewDecl[index].Usage == D3DDECLUSAGE_NORMAL )
+            {
+                bHaveNormalNow = true;
+            }
+            if( aNewDecl[index].Usage == D3DDECLUSAGE_TANGENT )
+            {
+                bHaveTangentNow = true;
+            }
+        }
+    }
+
+    SAFE_RELEASE( m_pMesh );
+
+    if( pTempMesh )
+    {
+        m_pMesh = pTempMesh;
+
+        if( !bHadNormal && bHaveNormalNow && bAutoComputeNormals )
+        {
+            // Compute normals in case the meshes have them
+            D3DXComputeNormals( m_pMesh, NULL );
+        }
+
+        if( bHaveNormalNow && !bHadTangent && bHaveTangentNow && bAutoComputeTangents )
+        {
+            ID3DXMesh* pNewMesh;
+            HRESULT hr;
+
+            DWORD *rgdwAdjacency = NULL;
+            rgdwAdjacency = new DWORD[m_pMesh->GetNumFaces() * 3];
+            if( rgdwAdjacency == NULL )
+                return E_OUTOFMEMORY;
+            V( m_pMesh->GenerateAdjacency(1e-6f,rgdwAdjacency) );
+
+            float fPartialEdgeThreshold;
+            float fSingularPointThreshold;
+            float fNormalEdgeThreshold;
+            if( bSplitVertexForOptimalTangents )
+            {
+                fPartialEdgeThreshold = 0.01f;
+                fSingularPointThreshold = 0.25f;
+                fNormalEdgeThreshold = 0.01f;
+            }
+            else
+            {
+                fPartialEdgeThreshold = -1.01f;
+                fSingularPointThreshold = 0.01f;
+                fNormalEdgeThreshold = -1.01f;
+            }
+
+            // Compute tangents, which are required for normal mapping
+            hr = D3DXComputeTangentFrameEx( m_pMesh, 
+                                            D3DDECLUSAGE_TEXCOORD, 0, 
+                                            D3DDECLUSAGE_TANGENT, 0,
+                                            D3DX_DEFAULT, 0, 
+                                            D3DDECLUSAGE_NORMAL, 0,
+                                            0, rgdwAdjacency, 
+                                            fPartialEdgeThreshold, fSingularPointThreshold, fNormalEdgeThreshold, 
+                                            &pNewMesh, NULL );
+
+            SAFE_DELETE_ARRAY( rgdwAdjacency );
+            if( FAILED(hr) )
+                return hr;
+
+            SAFE_RELEASE( m_pMesh );
+            m_pMesh = pNewMesh;
+        }
+    }
+
+    return S_OK;
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+HRESULT CDXUTMesh::RestoreDeviceObjects( LPDIRECT3DDEVICE9 pd3dDevice )
+{
+    return S_OK;
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+HRESULT CDXUTMesh::InvalidateDeviceObjects()
+{
+    SAFE_RELEASE( m_pIB );
+    SAFE_RELEASE( m_pVB );
+    SAFE_RELEASE( m_pDecl );
+
+    return S_OK;
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+HRESULT CDXUTMesh::Destroy()
+{
+    InvalidateDeviceObjects();
+    for( UINT i=0; i<m_dwNumMaterials; i++ )
+        SAFE_RELEASE( m_pTextures[i] );
+    SAFE_DELETE_ARRAY( m_pTextures );
+    SAFE_DELETE_ARRAY( m_pMaterials );
+    SAFE_DELETE_ARRAY( m_strMaterials );
+
+    SAFE_RELEASE( m_pMesh );
+
+    m_dwNumMaterials = 0L;
+
+    return S_OK;
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+HRESULT CDXUTMesh::Render( LPDIRECT3DDEVICE9 pd3dDevice, bool bDrawOpaqueSubsets,
+                          bool bDrawAlphaSubsets )
+{
+    if( NULL == m_pMesh )
+        return E_FAIL;
+
+    // Frist, draw the subsets without alpha
+    if( bDrawOpaqueSubsets )
+    {
+        for( DWORD i=0; i<m_dwNumMaterials; i++ )
+        {
+            if( m_bUseMaterials )
+            {
+                if( m_pMaterials[i].Diffuse.a < 1.0f )
+                    continue;
+                pd3dDevice->SetMaterial( &m_pMaterials[i] );
+                pd3dDevice->SetTexture( 0, m_pTextures[i] );
+            }
+            m_pMesh->DrawSubset( i );
+        }
+    }
+
+    // Then, draw the subsets with alpha
+    if( bDrawAlphaSubsets && m_bUseMaterials )
+    {
+        for( DWORD i=0; i<m_dwNumMaterials; i++ )
+        {
+            if( m_pMaterials[i].Diffuse.a == 1.0f )
+                continue;
+
+            // Set the material and texture
+            pd3dDevice->SetMaterial( &m_pMaterials[i] );
+            pd3dDevice->SetTexture( 0, m_pTextures[i] );
+            m_pMesh->DrawSubset( i );
+        }
+    }
+
+    return S_OK;
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+HRESULT CDXUTMesh::Render( ID3DXEffect *pEffect,
+                           D3DXHANDLE hTexture,
+                           D3DXHANDLE hDiffuse,
+                           D3DXHANDLE hAmbient,
+                           D3DXHANDLE hSpecular,
+                           D3DXHANDLE hEmissive,
+                           D3DXHANDLE hPower,
+                           bool bDrawOpaqueSubsets,
+                           bool bDrawAlphaSubsets )
+{
+    if( NULL == m_pMesh )
+        return E_FAIL;
+
+    UINT cPasses;
+    // Frist, draw the subsets without alpha
+    if( bDrawOpaqueSubsets )
+    {
+        pEffect->Begin( &cPasses, 0 );
+        for( UINT p = 0; p < cPasses; ++p )
+        {
+            pEffect->BeginPass( p );
+            for( DWORD i=0; i<m_dwNumMaterials; i++ )
+            {
+                if( m_bUseMaterials )
+                {
+                    if( m_pMaterials[i].Diffuse.a < 1.0f )
+                        continue;
+                    if( hTexture )
+                        pEffect->SetTexture( hTexture, m_pTextures[i] );
+                    // D3DCOLORVALUE and D3DXVECTOR4 are data-wise identical.
+                    // No conversion is needed.
+                    if( hDiffuse )
+                        pEffect->SetVector( hDiffuse, (D3DXVECTOR4*)&m_pMaterials[i].Diffuse );
+                    if( hAmbient )
+                        pEffect->SetVector( hAmbient, (D3DXVECTOR4*)&m_pMaterials[i].Ambient );
+                    if( hSpecular )
+                        pEffect->SetVector( hSpecular, (D3DXVECTOR4*)&m_pMaterials[i].Specular );
+                    if( hEmissive )
+                        pEffect->SetVector( hEmissive, (D3DXVECTOR4*)&m_pMaterials[i].Emissive );
+                    if( hPower )
+                        pEffect->SetFloat( hPower, m_pMaterials[i].Power );
+                    pEffect->CommitChanges();
+                }
+                m_pMesh->DrawSubset( i );
+            }
+            pEffect->EndPass();
+        }
+        pEffect->End();
+    }
+
+    // Then, draw the subsets with alpha
+    if( bDrawAlphaSubsets && m_bUseMaterials )
+    {
+        pEffect->Begin( &cPasses, 0 );
+        for( UINT p = 0; p < cPasses; ++p )
+        {
+            pEffect->BeginPass( p );
+            for( DWORD i=0; i<m_dwNumMaterials; i++ )
+            {
+                if( m_bUseMaterials )
+                {
+                    if( m_pMaterials[i].Diffuse.a == 1.0f )
+                        continue;
+                    if( hTexture )
+                        pEffect->SetTexture( hTexture, m_pTextures[i] );
+                    // D3DCOLORVALUE and D3DXVECTOR4 are data-wise identical.
+                    // No conversion is needed.
+                    if( hDiffuse )
+                        pEffect->SetVector( hDiffuse, (D3DXVECTOR4*)&m_pMaterials[i].Diffuse );
+                    if( hAmbient )
+                        pEffect->SetVector( hAmbient, (D3DXVECTOR4*)&m_pMaterials[i].Ambient );
+                    if( hSpecular )
+                        pEffect->SetVector( hSpecular, (D3DXVECTOR4*)&m_pMaterials[i].Specular );
+                    if( hEmissive )
+                        pEffect->SetVector( hEmissive, (D3DXVECTOR4*)&m_pMaterials[i].Emissive );
+                    if( hPower )
+                        pEffect->SetFloat( hPower, m_pMaterials[i].Power );
+                    pEffect->CommitChanges();
+                }
+                m_pMesh->DrawSubset( i );
+            }
+            pEffect->EndPass();
+        }
+        pEffect->End();
+    }
+
+    return S_OK;
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+CDXUTMeshFrame::CDXUTMeshFrame( LPCWSTR strName )
+{
+    StringCchCopy( m_strName, 512, strName );
+    D3DXMatrixIdentity( &m_mat );
+    m_pMesh  = NULL;
+
+    m_pChild = NULL;
+    m_pNext  = NULL;
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+CDXUTMeshFrame::~CDXUTMeshFrame()
+{
+    SAFE_DELETE( m_pChild );
+    SAFE_DELETE( m_pNext );
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+bool CDXUTMeshFrame::EnumMeshes( bool (*EnumMeshCB)(CDXUTMesh*,void*),
+                            void* pContext )
+{
+    if( m_pMesh )
+        EnumMeshCB( m_pMesh, pContext );
+    if( m_pChild )
+        m_pChild->EnumMeshes( EnumMeshCB, pContext );
+    if( m_pNext )
+        m_pNext->EnumMeshes( EnumMeshCB, pContext );
+
+    return TRUE;
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+CDXUTMesh* CDXUTMeshFrame::FindMesh( LPCWSTR strMeshName )
+{
+    CDXUTMesh* pMesh;
+
+    if( m_pMesh )
+        if( !lstrcmpi( m_pMesh->m_strName, strMeshName ) )
+            return m_pMesh;
+
+    if( m_pChild )
+        if( NULL != ( pMesh = m_pChild->FindMesh( strMeshName ) ) )
+            return pMesh;
+
+    if( m_pNext )
+        if( NULL != ( pMesh = m_pNext->FindMesh( strMeshName ) ) )
+            return pMesh;
+
+    return NULL;
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+CDXUTMeshFrame* CDXUTMeshFrame::FindFrame( LPCWSTR strFrameName )
+{
+    CDXUTMeshFrame* pFrame;
+
+    if( !lstrcmpi( m_strName, strFrameName ) )
+        return this;
+
+    if( m_pChild )
+        if( NULL != ( pFrame = m_pChild->FindFrame( strFrameName ) ) )
+            return pFrame;
+
+    if( m_pNext )
+        if( NULL != ( pFrame = m_pNext->FindFrame( strFrameName ) ) )
+            return pFrame;
+
+    return NULL;
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+HRESULT CDXUTMeshFrame::Destroy()
+{
+    if( m_pMesh )  m_pMesh->Destroy();
+    if( m_pChild ) m_pChild->Destroy();
+    if( m_pNext )  m_pNext->Destroy();
+
+    SAFE_DELETE( m_pMesh );
+    SAFE_DELETE( m_pNext );
+    SAFE_DELETE( m_pChild );
+
+    return S_OK;
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+HRESULT CDXUTMeshFrame::RestoreDeviceObjects( LPDIRECT3DDEVICE9 pd3dDevice )
+{
+    if( m_pMesh )  m_pMesh->RestoreDeviceObjects( pd3dDevice );
+    if( m_pChild ) m_pChild->RestoreDeviceObjects( pd3dDevice );
+    if( m_pNext )  m_pNext->RestoreDeviceObjects( pd3dDevice );
+    return S_OK;
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+HRESULT CDXUTMeshFrame::InvalidateDeviceObjects()
+{
+    if( m_pMesh )  m_pMesh->InvalidateDeviceObjects();
+    if( m_pChild ) m_pChild->InvalidateDeviceObjects();
+    if( m_pNext )  m_pNext->InvalidateDeviceObjects();
+    return S_OK;
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+HRESULT CDXUTMeshFrame::Render( LPDIRECT3DDEVICE9 pd3dDevice, bool bDrawOpaqueSubsets,
+                           bool bDrawAlphaSubsets, D3DXMATRIX* pmatWorldMatrix )
+{
+    // For pure devices, specify the world transform. If the world transform is not
+    // specified on pure devices, this function will fail.
+
+    D3DXMATRIX matSavedWorld, matWorld;
+
+    if ( NULL == pmatWorldMatrix )
+        pd3dDevice->GetTransform( D3DTS_WORLD, &matSavedWorld );
+    else
+        matSavedWorld = *pmatWorldMatrix;
+
+    D3DXMatrixMultiply( &matWorld, &m_mat, &matSavedWorld );
+    pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );
+
+    if( m_pMesh )
+        m_pMesh->Render( pd3dDevice, bDrawOpaqueSubsets, bDrawAlphaSubsets );
+
+    if( m_pChild )
+        m_pChild->Render( pd3dDevice, bDrawOpaqueSubsets, bDrawAlphaSubsets, &matWorld );
+
+    pd3dDevice->SetTransform( D3DTS_WORLD, &matSavedWorld );
+
+    if( m_pNext )
+        m_pNext->Render( pd3dDevice, bDrawOpaqueSubsets, bDrawAlphaSubsets, &matSavedWorld );
+
+    return S_OK;
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+HRESULT CDXUTMeshFile::LoadFrame( LPDIRECT3DDEVICE9 pd3dDevice,
+                             LPD3DXFILEDATA pFileData,
+                             CDXUTMeshFrame* pParentFrame )
+{
+    LPD3DXFILEDATA   pChildData = NULL;
+    GUID Guid;
+    SIZE_T      cbSize;
+    CDXUTMeshFrame*  pCurrentFrame;
+    HRESULT     hr;
+
+    // Get the type of the object
+    if( FAILED( hr = pFileData->GetType( &Guid ) ) )
+        return hr;
+
+    if( Guid == TID_D3DRMMesh )
+    {
+        hr = LoadMesh( pd3dDevice, pFileData, pParentFrame );
+        if( FAILED(hr) )
+            return hr;
+    }
+    if( Guid == TID_D3DRMFrameTransformMatrix )
+    {
+        D3DXMATRIX* pmatMatrix;
+        hr = pFileData->Lock(&cbSize, (LPCVOID*)&pmatMatrix );
+        if( FAILED(hr) )
+            return hr;
+
+        // Update the parent's matrix with the new one
+        pParentFrame->SetMatrix( pmatMatrix );
+    }
+    if( Guid == TID_D3DRMFrame )
+    {
+        // Get the frame name
+        CHAR  strAnsiName[512] = "";
+        WCHAR strName[512];
+        SIZE_T dwNameLength = 512;
+        SIZE_T cChildren;
+        if( FAILED( hr = pFileData->GetName( strAnsiName, &dwNameLength ) ) )
+            return hr;
+
+        WideCharToMultiByte( CP_ACP, 0, strName, -1, strAnsiName, 512, NULL, NULL );
+        strName[511] = 0;
+
+        // Create the frame
+        pCurrentFrame = new CDXUTMeshFrame( strName );
+        if( pCurrentFrame == NULL )
+            return E_OUTOFMEMORY;
+
+        pCurrentFrame->m_pNext = pParentFrame->m_pChild;
+        pParentFrame->m_pChild = pCurrentFrame;
+
+        // Enumerate child objects
+        pFileData->GetChildren(&cChildren);
+        for (UINT iChild = 0; iChild < cChildren; iChild++)
+        {
+            // Query the child for its FileData
+            hr = pFileData->GetChild(iChild, &pChildData );
+            if( SUCCEEDED(hr) )
+            {
+                hr = LoadFrame( pd3dDevice, pChildData, pCurrentFrame );
+                SAFE_RELEASE( pChildData );
+            }
+
+            if( FAILED(hr) )
+                return hr;
+        }
+    }
+
+    return S_OK;
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+HRESULT CDXUTMeshFile::LoadMesh( LPDIRECT3DDEVICE9 pd3dDevice,
+                            LPD3DXFILEDATA pFileData,
+                            CDXUTMeshFrame* pParentFrame )
+{
+    // Currently only allowing one mesh per frame
+    if( pParentFrame->m_pMesh )
+        return E_FAIL;
+
+    // Get the mesh name
+    CHAR  strAnsiName[512] = {0};
+    WCHAR strName[512];
+    SIZE_T dwNameLength = 512;
+    HRESULT hr;
+    if( FAILED( hr = pFileData->GetName( strAnsiName, &dwNameLength ) ) )
+        return hr;
+
+    MultiByteToWideChar( CP_ACP, 0, strAnsiName, -1, strName, 512 );
+    strName[511] = 0;
+
+    // Create the mesh
+    pParentFrame->m_pMesh = new CDXUTMesh( strName );
+    if( pParentFrame->m_pMesh == NULL )
+        return E_OUTOFMEMORY;
+    pParentFrame->m_pMesh->Create( pd3dDevice, pFileData );
+
+    return S_OK;
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+HRESULT CDXUTMeshFile::CreateFromResource( LPDIRECT3DDEVICE9 pd3dDevice, LPCWSTR strResource, LPCWSTR strType )
+{
+    LPD3DXFILE           pDXFile   = NULL;
+    LPD3DXFILEENUMOBJECT pEnumObj  = NULL;
+    LPD3DXFILEDATA       pFileData = NULL;
+    HRESULT hr;
+    SIZE_T cChildren;
+
+    // Create a x file object
+    if( FAILED( hr = D3DXFileCreate( &pDXFile ) ) )
+        return E_FAIL;
+
+    // Register templates for d3drm and patch extensions.
+    if( FAILED( hr = pDXFile->RegisterTemplates( (void*)D3DRM_XTEMPLATES,
+                                                 D3DRM_XTEMPLATE_BYTES ) ) )
+    {
+        SAFE_RELEASE( pDXFile );
+        return E_FAIL;
+    }
+    
+    CHAR strTypeAnsi[MAX_PATH];
+    CHAR strResourceAnsi[MAX_PATH];
+
+    WideCharToMultiByte( CP_ACP, 0, strType, -1, strTypeAnsi, MAX_PATH, NULL, NULL );
+    strTypeAnsi[MAX_PATH-1] = 0;
+
+    WideCharToMultiByte( CP_ACP, 0, strResource, -1, strResourceAnsi, MAX_PATH, NULL, NULL );
+    strResourceAnsi[MAX_PATH-1] = 0;
+
+    D3DXF_FILELOADRESOURCE dxlr;
+    dxlr.hModule = NULL;
+    dxlr.lpName = strResourceAnsi;
+    dxlr.lpType = strTypeAnsi;
+
+    // Create enum object
+    hr = pDXFile->CreateEnumObject( (void*)&dxlr, D3DXF_FILELOAD_FROMRESOURCE, 
+                                    &pEnumObj );
+    if( FAILED(hr) )
+    {
+        SAFE_RELEASE( pDXFile );
+        return hr;
+    }
+
+    // Enumerate top level objects (which are always frames)
+    pEnumObj->GetChildren(&cChildren);
+    for (UINT iChild = 0; iChild < cChildren; iChild++)
+    {
+        hr = pEnumObj->GetChild(iChild, &pFileData);
+        if (FAILED(hr))
+            return hr;
+
+        hr = LoadFrame( pd3dDevice, pFileData, this );
+        SAFE_RELEASE( pFileData );
+        if( FAILED(hr) )
+        {
+            SAFE_RELEASE( pEnumObj );
+            SAFE_RELEASE( pDXFile );
+            return E_FAIL;
+        }
+    }
+
+    SAFE_RELEASE( pFileData );
+    SAFE_RELEASE( pEnumObj );
+    SAFE_RELEASE( pDXFile );
+
+    return S_OK;
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+HRESULT CDXUTMeshFile::Create( LPDIRECT3DDEVICE9 pd3dDevice, LPCWSTR strFilename )
+{
+    LPD3DXFILE           pDXFile   = NULL;
+    LPD3DXFILEENUMOBJECT pEnumObj  = NULL;
+    LPD3DXFILEDATA       pFileData = NULL;
+    HRESULT hr;
+    SIZE_T cChildren;
+
+    // Create a x file object
+    if( FAILED( hr = D3DXFileCreate( &pDXFile ) ) )
+        return E_FAIL;
+
+    // Register templates for d3drm and patch extensions.
+    if( FAILED( hr = pDXFile->RegisterTemplates( (void*)D3DRM_XTEMPLATES,
+                                                 D3DRM_XTEMPLATE_BYTES ) ) )
+    {
+        SAFE_RELEASE( pDXFile );
+        return E_FAIL;
+    }
+
+    // Find the path to the file, and convert it to ANSI (for the D3DXOF API)
+    WCHAR strPath[MAX_PATH];
+    CHAR  strPathANSI[MAX_PATH];
+    DXUTFindDXSDKMediaFileCch( strPath, sizeof(strPath) / sizeof(WCHAR), strFilename );
+    
+    
+    WideCharToMultiByte( CP_ACP, 0, strPath, -1, strPathANSI, MAX_PATH, NULL, NULL );
+    strPathANSI[MAX_PATH-1] = 0;
+
+    
+    // Create enum object
+    hr = pDXFile->CreateEnumObject( (void*)strPathANSI, D3DXF_FILELOAD_FROMFILE, 
+                                    &pEnumObj );
+    if( FAILED(hr) )
+    {
+        SAFE_RELEASE( pDXFile );
+        return hr;
+    }
+
+    // Enumerate top level objects (which are always frames)
+    pEnumObj->GetChildren(&cChildren);
+    for (UINT iChild = 0; iChild < cChildren; iChild++)
+    {
+        hr = pEnumObj->GetChild(iChild, &pFileData);
+        if (FAILED(hr))
+            return hr;
+
+        hr = LoadFrame( pd3dDevice, pFileData, this );
+        SAFE_RELEASE( pFileData );
+        if( FAILED(hr) )
+        {
+            SAFE_RELEASE( pEnumObj );
+            SAFE_RELEASE( pDXFile );
+            return E_FAIL;
+        }
+    }
+
+    SAFE_RELEASE( pFileData );
+    SAFE_RELEASE( pEnumObj );
+    SAFE_RELEASE( pDXFile );
+
+    return S_OK;
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+HRESULT CDXUTMeshFile::Render( LPDIRECT3DDEVICE9 pd3dDevice, D3DXMATRIX* pmatWorldMatrix )
+{
+
+    // For pure devices, specify the world transform. If the world transform is not
+    // specified on pure devices, this function will fail.
+
+    // Set up the world transformation
+    D3DXMATRIX matSavedWorld, matWorld;
+
+    if ( NULL == pmatWorldMatrix )
+        pd3dDevice->GetTransform( D3DTS_WORLD, &matSavedWorld );
+    else
+        matSavedWorld = *pmatWorldMatrix;
+
+    D3DXMatrixMultiply( &matWorld, &matSavedWorld, &m_mat );
+    pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );
+
+    // Render opaque subsets in the meshes
+    if( m_pChild )
+        m_pChild->Render( pd3dDevice, TRUE, FALSE, &matWorld );
+
+    // Enable alpha blending
+    pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
+    pd3dDevice->SetRenderState( D3DRS_SRCBLEND,  D3DBLEND_SRCALPHA );
+    pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
+
+    // Render alpha subsets in the meshes
+    if( m_pChild )
+        m_pChild->Render( pd3dDevice, FALSE, TRUE, &matWorld );
+
+    // Restore state
+    pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE );
+    pd3dDevice->SetTransform( D3DTS_WORLD, &matSavedWorld );
+
+    return S_OK;
+}
+
+
+
+
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTSettingsDlg.h
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTSettingsDlg.h	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTSettingsDlg.h	(revision 761)
@@ -0,0 +1,142 @@
+//--------------------------------------------------------------------------------------
+// File: DXUTSettingsDlg.cpp
+//
+// Copyright (c) Microsoft Corporation. All rights reserved
+//--------------------------------------------------------------------------------------
+#pragma once
+#ifndef DXUT_SETTINGS_H
+#define DXUT_SETTINGS_H
+
+
+//--------------------------------------------------------------------------------------
+// Control IDs
+//--------------------------------------------------------------------------------------
+#define DXUTSETTINGSDLG_STATIC                  -1
+#define DXUTSETTINGSDLG_OK                      1
+#define DXUTSETTINGSDLG_CANCEL                  2
+#define DXUTSETTINGSDLG_ADAPTER                 3
+#define DXUTSETTINGSDLG_DEVICE_TYPE             4
+#define DXUTSETTINGSDLG_WINDOWED                5
+#define DXUTSETTINGSDLG_FULLSCREEN              6
+#define DXUTSETTINGSDLG_ADAPTER_FORMAT          7
+#define DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL    8
+#define DXUTSETTINGSDLG_RESOLUTION              9
+#define DXUTSETTINGSDLG_RESOLUTION_LABEL        10
+#define DXUTSETTINGSDLG_REFRESH_RATE            11
+#define DXUTSETTINGSDLG_REFRESH_RATE_LABEL      12
+#define DXUTSETTINGSDLG_BACK_BUFFER_FORMAT      13
+#define DXUTSETTINGSDLG_DEPTH_STENCIL           14
+#define DXUTSETTINGSDLG_MULTISAMPLE_TYPE        15
+#define DXUTSETTINGSDLG_MULTISAMPLE_QUALITY     16
+#define DXUTSETTINGSDLG_VERTEX_PROCESSING       17
+#define DXUTSETTINGSDLG_PRESENT_INTERVAL        18
+#define DXUTSETTINGSDLG_DEVICECLIP              19
+#define DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL     20
+#define DXUTSETTINGSDLG_WINDOWED_GROUP          0x0100
+
+
+//--------------------------------------------------------------------------------------
+// Dialog for selection of device settings 
+// Use DXUTGetSettingsDialog() to access global instance
+// To control the contents of the dialog, use the CD3DEnumeration class.
+//--------------------------------------------------------------------------------------
+class CD3DSettingsDlg
+{
+public:
+    CD3DSettingsDlg();
+    ~CD3DSettingsDlg();
+
+    void Init( CDXUTDialogResourceManager* pManager );
+    void Init( CDXUTDialogResourceManager* pManager, LPCWSTR szControlTextureFileName );
+	void Init( CDXUTDialogResourceManager* pManager, LPCWSTR pszControlTextureResourcename, HMODULE hModule);
+
+    HRESULT OnCreateDevice( IDirect3DDevice9* pd3dDevice );
+    HRESULT Refresh();
+    HRESULT OnResetDevice();
+    HRESULT OnLostDevice();
+    HRESULT OnRender( float fElapsedTime );
+    HRESULT OnDestroyDevice();
+
+    CDXUTDialog* GetDialogControl() { return &m_Dialog; }
+    bool IsActive() { return m_bActive; }
+    void SetActive( bool bActive ) { m_bActive = bActive; if( bActive ) Refresh(); }
+
+    LRESULT MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
+
+protected:
+    friend CD3DSettingsDlg* DXUTGetSettingsDialog();
+
+    void CreateControls();
+    HRESULT SetDeviceSettingsFromUI();
+
+    void OnEvent( UINT nEvent, int nControlID, CDXUTControl* pControl );
+    static void WINAPI StaticOnEvent( UINT nEvent, int nControlID, CDXUTControl* pControl, void* pUserData );
+
+    CD3DEnumAdapterInfo* GetCurrentAdapterInfo();
+    CD3DEnumDeviceInfo* GetCurrentDeviceInfo();
+    CD3DEnumDeviceSettingsCombo* GetCurrentDeviceSettingsCombo();
+
+    void AddAdapter( const WCHAR* strDescription, UINT iAdapter );
+    UINT GetSelectedAdapter();
+
+    void AddDeviceType( D3DDEVTYPE devType );
+    D3DDEVTYPE GetSelectedDeviceType();
+
+    void SetWindowed( bool bWindowed );
+    bool IsWindowed();
+
+    void AddAdapterFormat( D3DFORMAT format );
+    D3DFORMAT GetSelectedAdapterFormat();
+
+    void AddResolution( DWORD dwWidth, DWORD dwHeight );
+    void GetSelectedResolution( DWORD* pdwWidth, DWORD* pdwHeight );
+
+    void AddRefreshRate( DWORD dwRate );
+    DWORD GetSelectedRefreshRate();
+
+    void AddBackBufferFormat( D3DFORMAT format );
+    D3DFORMAT GetSelectedBackBufferFormat();
+
+    void AddDepthStencilBufferFormat( D3DFORMAT format );
+    D3DFORMAT GetSelectedDepthStencilBufferFormat();
+
+    void AddMultisampleType( D3DMULTISAMPLE_TYPE type );
+    D3DMULTISAMPLE_TYPE GetSelectedMultisampleType();
+
+    void AddMultisampleQuality( DWORD dwQuality );
+    DWORD GetSelectedMultisampleQuality();
+
+    void AddVertexProcessingType( DWORD dwType );
+    DWORD GetSelectedVertexProcessingType();
+
+    DWORD GetSelectedPresentInterval();
+
+    void SetDeviceClip( bool bDeviceClip );
+    bool IsDeviceClip();
+
+    HRESULT OnAdapterChanged();
+    HRESULT OnDeviceTypeChanged();
+    HRESULT OnWindowedFullScreenChanged();
+    HRESULT OnAdapterFormatChanged();
+    HRESULT OnResolutionChanged();
+    HRESULT OnRefreshRateChanged();
+    HRESULT OnBackBufferFormatChanged();
+    HRESULT OnDepthStencilBufferFormatChanged();
+    HRESULT OnMultisampleTypeChanged();
+    HRESULT OnMultisampleQualityChanged();
+    HRESULT OnVertexProcessingChanged();
+    HRESULT OnPresentIntervalChanged();
+    HRESULT OnDeviceClipChanged();
+
+    IDirect3DStateBlock9* m_pStateBlock;
+    CDXUTDialog m_Dialog;
+    bool m_bActive; 
+};
+
+
+CD3DSettingsDlg* DXUTGetSettingsDialog();
+
+
+
+#endif
+
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT_2002.sln
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT_2002.sln	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT_2002.sln	(revision 761)
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 7.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DXUT", "DXUT_2002.vcproj", "{E0CF097B-F22D-465B-A884-D89E55BD7ECD}"
+EndProject
+Global
+	GlobalSection(SolutionConfiguration) = preSolution
+		ConfigName.0 = Debug
+		ConfigName.1 = Release
+	EndGlobalSection
+	GlobalSection(ProjectDependencies) = postSolution
+	EndGlobalSection
+	GlobalSection(ProjectConfiguration) = postSolution
+		{E0CF097B-F22D-465B-A884-D89E55BD7ECD}.Debug.ActiveCfg = Debug|Win32
+		{E0CF097B-F22D-465B-A884-D89E55BD7ECD}.Debug.Build.0 = Debug|Win32
+		{E0CF097B-F22D-465B-A884-D89E55BD7ECD}.Release.ActiveCfg = Release|Win32
+		{E0CF097B-F22D-465B-A884-D89E55BD7ECD}.Release.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+	EndGlobalSection
+	GlobalSection(ExtensibilityAddIns) = postSolution
+	EndGlobalSection
+EndGlobal
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTsound.h
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTsound.h	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTsound.h	(revision 761)
@@ -0,0 +1,151 @@
+//-----------------------------------------------------------------------------
+// File: DXUTsound.h
+//
+// Copyright (c) Microsoft Corp. All rights reserved.
+//-----------------------------------------------------------------------------
+#ifndef DXUTSOUND_H
+#define DXUTSOUND_H
+
+//-----------------------------------------------------------------------------
+// Classes used by this header
+//-----------------------------------------------------------------------------
+class CSoundManager;
+class CSound;
+class CStreamingSound;
+class CWaveFile;
+
+
+//-----------------------------------------------------------------------------
+// Typing macros 
+//-----------------------------------------------------------------------------
+#define WAVEFILE_READ   1
+#define WAVEFILE_WRITE  2
+
+#define DXUT_StopSound(s)         { if(s) s->Stop(); }
+#define DXUT_PlaySound(s)         { if(s) s->Play( 0, 0 ); }
+#define DXUT_PlaySoundLooping(s)  { if(s) s->Play( 0, DSBPLAY_LOOPING ); }
+
+
+//-----------------------------------------------------------------------------
+// Name: class CSoundManager
+// Desc: 
+//-----------------------------------------------------------------------------
+class CSoundManager
+{
+protected:
+    IDirectSound8* m_pDS;
+
+public:
+    CSoundManager();
+    ~CSoundManager();
+
+    HRESULT Initialize( HWND hWnd, DWORD dwCoopLevel );
+    inline  LPDIRECTSOUND8 GetDirectSound() { return m_pDS; }
+    HRESULT SetPrimaryBufferFormat( DWORD dwPrimaryChannels, DWORD dwPrimaryFreq, DWORD dwPrimaryBitRate );
+    HRESULT Get3DListenerInterface( LPDIRECTSOUND3DLISTENER* ppDSListener );
+
+    HRESULT Create( CSound** ppSound, LPWSTR strWaveFileName, DWORD dwCreationFlags = 0, GUID guid3DAlgorithm = GUID_NULL, DWORD dwNumBuffers = 1 );
+    HRESULT CreateFromMemory( CSound** ppSound, BYTE* pbData, ULONG ulDataSize, LPWAVEFORMATEX pwfx, DWORD dwCreationFlags = 0, GUID guid3DAlgorithm = GUID_NULL, DWORD dwNumBuffers = 1 );
+    HRESULT CreateStreaming( CStreamingSound** ppStreamingSound, LPWSTR strWaveFileName, DWORD dwCreationFlags, GUID guid3DAlgorithm, DWORD dwNotifyCount, DWORD dwNotifySize, HANDLE hNotifyEvent );
+};
+
+
+//-----------------------------------------------------------------------------
+// Name: class CSound
+// Desc: Encapsulates functionality of a DirectSound buffer.
+//-----------------------------------------------------------------------------
+class CSound
+{
+protected:
+    LPDIRECTSOUNDBUFFER* m_apDSBuffer;
+    DWORD                m_dwDSBufferSize;
+    CWaveFile*           m_pWaveFile;
+    DWORD                m_dwNumBuffers;
+    DWORD                m_dwCreationFlags;
+
+    HRESULT RestoreBuffer( LPDIRECTSOUNDBUFFER pDSB, BOOL* pbWasRestored );
+
+public:
+    CSound( LPDIRECTSOUNDBUFFER* apDSBuffer, DWORD dwDSBufferSize, DWORD dwNumBuffers, CWaveFile* pWaveFile, DWORD dwCreationFlags );
+    virtual ~CSound();
+
+    HRESULT Get3DBufferInterface( DWORD dwIndex, LPDIRECTSOUND3DBUFFER* ppDS3DBuffer );
+    HRESULT FillBufferWithSound( LPDIRECTSOUNDBUFFER pDSB, BOOL bRepeatWavIfBufferLarger );
+    LPDIRECTSOUNDBUFFER GetFreeBuffer();
+    LPDIRECTSOUNDBUFFER GetBuffer( DWORD dwIndex );
+
+    HRESULT Play( DWORD dwPriority = 0, DWORD dwFlags = 0, LONG lVolume = 0, LONG lFrequency = -1, LONG lPan = 0 );
+    HRESULT Play3D( LPDS3DBUFFER p3DBuffer, DWORD dwPriority = 0, DWORD dwFlags = 0, LONG lFrequency = 0 );
+    HRESULT Stop();
+    HRESULT Reset();
+    BOOL    IsSoundPlaying();
+};
+
+
+//-----------------------------------------------------------------------------
+// Name: class CStreamingSound
+// Desc: Encapsulates functionality to play a wave file with DirectSound.  
+//       The Create() method loads a chunk of wave file into the buffer, 
+//       and as sound plays more is written to the buffer by calling 
+//       HandleWaveStreamNotification() whenever hNotifyEvent is signaled.
+//-----------------------------------------------------------------------------
+class CStreamingSound : public CSound
+{
+protected:
+    DWORD m_dwLastPlayPos;
+    DWORD m_dwPlayProgress;
+    DWORD m_dwNotifySize;
+    DWORD m_dwNextWriteOffset;
+    BOOL  m_bFillNextNotificationWithSilence;
+
+public:
+    CStreamingSound( LPDIRECTSOUNDBUFFER pDSBuffer, DWORD dwDSBufferSize, CWaveFile* pWaveFile, DWORD dwNotifySize );
+    ~CStreamingSound();
+
+    HRESULT HandleWaveStreamNotification( BOOL bLoopedPlay );
+    HRESULT Reset();
+};
+
+
+//-----------------------------------------------------------------------------
+// Name: class CWaveFile
+// Desc: Encapsulates reading or writing sound data to or from a wave file
+//-----------------------------------------------------------------------------
+class CWaveFile
+{
+public:
+    WAVEFORMATEX* m_pwfx;        // Pointer to WAVEFORMATEX structure
+    HMMIO         m_hmmio;       // MM I/O handle for the WAVE
+    MMCKINFO      m_ck;          // Multimedia RIFF chunk
+    MMCKINFO      m_ckRiff;      // Use in opening a WAVE file
+    DWORD         m_dwSize;      // The size of the wave file
+    MMIOINFO      m_mmioinfoOut;
+    DWORD         m_dwFlags;
+    BOOL          m_bIsReadingFromMemory;
+    BYTE*         m_pbData;
+    BYTE*         m_pbDataCur;
+    ULONG         m_ulDataSize;
+    CHAR*         m_pResourceBuffer;
+
+protected:
+    HRESULT ReadMMIO();
+    HRESULT WriteMMIO( WAVEFORMATEX *pwfxDest );
+
+public:
+    CWaveFile();
+    ~CWaveFile();
+
+    HRESULT Open( LPWSTR strFileName, WAVEFORMATEX* pwfx, DWORD dwFlags );
+    HRESULT OpenFromMemory( BYTE* pbData, ULONG ulDataSize, WAVEFORMATEX* pwfx, DWORD dwFlags );
+    HRESULT Close();
+
+    HRESULT Read( BYTE* pBuffer, DWORD dwSizeToRead, DWORD* pdwSizeRead );
+    HRESULT Write( UINT nSizeToWrite, BYTE* pbData, UINT* pnSizeWrote );
+
+    DWORD   GetSize();
+    HRESULT ResetFile();
+    WAVEFORMATEX* GetFormat() { return m_pwfx; };
+};
+
+
+#endif // DXUTSOUND_H
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT_2003.sln
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT_2003.sln	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT_2003.sln	(revision 761)
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DXUT", "DXUT_2003.vcproj", "{E0CF097B-F22D-465B-A884-D89E55BD7ECD}"
+	ProjectSection(ProjectDependencies) = postProject
+	EndProjectSection
+EndProject
+Global
+	GlobalSection(SolutionConfiguration) = preSolution
+		Debug = Debug
+		Release = Release
+	EndGlobalSection
+	GlobalSection(ProjectConfiguration) = postSolution
+		{E0CF097B-F22D-465B-A884-D89E55BD7ECD}.Debug.ActiveCfg = Debug|Win32
+		{E0CF097B-F22D-465B-A884-D89E55BD7ECD}.Debug.Build.0 = Debug|Win32
+		{E0CF097B-F22D-465B-A884-D89E55BD7ECD}.Release.ActiveCfg = Release|Win32
+		{E0CF097B-F22D-465B-A884-D89E55BD7ECD}.Release.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+	EndGlobalSection
+	GlobalSection(ExtensibilityAddIns) = postSolution
+	EndGlobalSection
+EndGlobal
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTRes.h
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTRes.h	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTRes.h	(revision 761)
@@ -0,0 +1,15 @@
+//----------------------------------------------------------------------------
+// File: dxutres.h
+//
+// Functions to create DXUT media from arrays in memory 
+//
+// Copyright (c) Microsoft Corp. All rights reserved.
+//-----------------------------------------------------------------------------
+#pragma once
+#ifndef DXUT_RES_H
+#define DXUT_RES_H
+
+HRESULT DXUTCreateGUITextureFromInternalArray( LPDIRECT3DDEVICE9 pd3dDevice, IDirect3DTexture9** ppTexture, D3DXIMAGE_INFO* pInfo );
+HRESULT DXUTCreateArrowMeshFromInternalArray( LPDIRECT3DDEVICE9 pd3dDevice, ID3DXMesh** ppMesh );
+
+#endif 
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT_2005.sln
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT_2005.sln	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT_2005.sln	(revision 761)
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DXUT", "DXUT_2005.vcproj", "{E0CF097B-F22D-465B-A884-D89E55BD7ECD}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{E0CF097B-F22D-465B-A884-D89E55BD7ECD}.Debug|Win32.ActiveCfg = Debug|Win32
+		{E0CF097B-F22D-465B-A884-D89E55BD7ECD}.Debug|Win32.Build.0 = Debug|Win32
+		{E0CF097B-F22D-465B-A884-D89E55BD7ECD}.Release|Win32.ActiveCfg = Release|Win32
+		{E0CF097B-F22D-465B-A884-D89E55BD7ECD}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTmisc.h
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTmisc.h	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTmisc.h	(revision 761)
@@ -0,0 +1,1000 @@
+//--------------------------------------------------------------------------------------
+// File: DXUTMisc.h
+//
+// Helper functions for Direct3D programming.
+//
+// Copyright (c) Microsoft Corporation. All rights reserved
+//--------------------------------------------------------------------------------------
+#pragma once
+#ifndef DXUT_MISC_H
+#define DXUT_MISC_H
+
+//--------------------------------------------------------------------------------------
+// XInput helper state/function
+// This performs extra processing on XInput gamepad data to make it slightly more convenient to use
+// 
+// Example usage:
+//
+//      DXUT_GAMEPAD gamepad[4];
+//      for( DWORD iPort=0; iPort<DXUT_MAX_CONTROLLERS; iPort++ )
+//          DXUTGetGamepadState( iPort, gamepad[iPort] );
+//
+//--------------------------------------------------------------------------------------
+#define DXUT_MAX_CONTROLLERS 4  // XInput handles up to 4 controllers 
+
+struct DXUT_GAMEPAD
+{
+    // From XINPUT_GAMEPAD
+    WORD    wButtons;
+    BYTE    bLeftTrigger;
+    BYTE    bRightTrigger;
+    SHORT   sThumbLX;
+    SHORT   sThumbLY;
+    SHORT   sThumbRX;
+    SHORT   sThumbRY;
+
+    // Device properties
+    XINPUT_CAPABILITIES caps;
+    bool    bConnected; // If the controller is currently connected
+    bool    bInserted;  // If the controller was inserted this frame
+    bool    bRemoved;   // If the controller was removed this frame
+
+    // Thumb stick values converted to range [-1,+1]
+    float   fThumbRX;
+    float   fThumbRY;
+    float   fThumbLX;
+    float   fThumbLY;
+
+    // Records which buttons were pressed this frame.
+    // These are only set on the first frame that the button is pressed
+    WORD    wPressedButtons;
+    bool    bPressedLeftTrigger;
+    bool    bPressedRightTrigger;
+
+    // Last state of the buttons
+    WORD    wLastButtons;
+    bool    bLastLeftTrigger;
+    bool    bLastRightTrigger;
+};
+
+HRESULT DXUTGetGamepadState( DWORD dwPort, DXUT_GAMEPAD* pGamePad, bool bThumbstickDeadZone = true, bool bSnapThumbstickToCardinals = true );
+HRESULT DXUTStopRumbleOnAllControllers();
+
+
+//--------------------------------------------------------------------------------------
+// A growable array
+//--------------------------------------------------------------------------------------
+template< typename TYPE >
+class CGrowableArray
+{
+public:
+    CGrowableArray()  { m_pData = NULL; m_nSize = 0; m_nMaxSize = 0; }
+    CGrowableArray( const CGrowableArray<TYPE>& a ) { for( int i=0; i < a.m_nSize; i++ ) Add( a.m_pData[i] ); }
+    ~CGrowableArray() { RemoveAll(); }
+
+    const TYPE& operator[]( int nIndex ) const { return GetAt( nIndex ); }
+    TYPE& operator[]( int nIndex ) { return GetAt( nIndex ); }
+   
+    CGrowableArray& operator=( const CGrowableArray<TYPE>& a ) { if( this == &a ) return *this; RemoveAll(); for( int i=0; i < a.m_nSize; i++ ) Add( a.m_pData[i] ); return *this; }
+
+    HRESULT SetSize( int nNewMaxSize );
+    HRESULT Add( const TYPE& value );
+    HRESULT Insert( int nIndex, const TYPE& value );
+    HRESULT SetAt( int nIndex, const TYPE& value );
+    TYPE&   GetAt( int nIndex ) { assert( nIndex >= 0 && nIndex < m_nSize ); return m_pData[nIndex]; }
+    int     GetSize() const { return m_nSize; }
+    TYPE*   GetData() { return m_pData; }
+    bool    Contains( const TYPE& value ){ return ( -1 != IndexOf( value ) ); }
+
+    int     IndexOf( const TYPE& value ) { return ( m_nSize > 0 ) ? IndexOf( value, 0, m_nSize ) : -1; }
+    int     IndexOf( const TYPE& value, int iStart ) { return IndexOf( value, iStart, m_nSize - iStart ); }
+    int     IndexOf( const TYPE& value, int nIndex, int nNumElements );
+
+    int     LastIndexOf( const TYPE& value ) { return ( m_nSize > 0 ) ? LastIndexOf( value, m_nSize-1, m_nSize ) : -1; }
+    int     LastIndexOf( const TYPE& value, int nIndex ) { return LastIndexOf( value, nIndex, nIndex+1 ); }
+    int     LastIndexOf( const TYPE& value, int nIndex, int nNumElements );
+
+    HRESULT Remove( int nIndex );
+    void    RemoveAll() { SetSize(0); }
+
+protected:
+    TYPE* m_pData;      // the actual array of data
+    int m_nSize;        // # of elements (upperBound - 1)
+    int m_nMaxSize;     // max allocated
+
+    HRESULT SetSizeInternal( int nNewMaxSize );  // This version doesn't call ctor or dtor.
+};
+
+
+//--------------------------------------------------------------------------------------
+// Performs timer operations
+// Use DXUTGetGlobalTimer() to get the global instance
+//--------------------------------------------------------------------------------------
+class CDXUTTimer
+{
+public:
+    CDXUTTimer();
+
+    void Reset(); // resets the timer
+    void Start(); // starts the timer
+    void Stop();  // stop (or pause) the timer
+    void Advance(); // advance the timer by 0.1 seconds
+    double GetAbsoluteTime(); // get the absolute system time
+    double GetTime(); // get the current time
+    double GetElapsedTime(); // get the time that elapsed between GetElapsedTime() calls
+    bool IsStopped(); // returns true if timer stopped
+
+protected:
+    bool m_bUsingQPF;
+    bool m_bTimerStopped;
+    LONGLONG m_llQPFTicksPerSec;
+
+    LONGLONG m_llStopTime;
+    LONGLONG m_llLastElapsedTime;
+    LONGLONG m_llBaseTime;
+};
+
+CDXUTTimer* DXUTGetGlobalTimer();
+
+
+//-----------------------------------------------------------------------------
+// Resource cache for textures, fonts, meshs, and effects.  
+// Use DXUTGetGlobalResourceCache() to access the global cache
+//-----------------------------------------------------------------------------
+
+enum DXUTCACHE_SOURCELOCATION { DXUTCACHE_LOCATION_FILE, DXUTCACHE_LOCATION_RESOURCE };
+
+struct DXUTCache_Texture
+{
+    DXUTCACHE_SOURCELOCATION Location;
+    WCHAR wszSource[MAX_PATH];
+    HMODULE hSrcModule;
+    UINT Width;
+    UINT Height;
+    UINT Depth;
+    UINT MipLevels;
+    DWORD Usage;
+    D3DFORMAT Format;
+    D3DPOOL Pool;
+    D3DRESOURCETYPE Type;
+    IDirect3DBaseTexture9 *pTexture;
+};
+
+struct DXUTCache_Font : public D3DXFONT_DESC
+{
+    ID3DXFont *pFont;
+};
+
+struct DXUTCache_Effect
+{
+    DXUTCACHE_SOURCELOCATION Location;
+    WCHAR wszSource[MAX_PATH];
+    HMODULE hSrcModule;
+    DWORD dwFlags;
+    ID3DXEffect *pEffect;
+};
+
+
+class CDXUTResourceCache
+{
+public:
+    ~CDXUTResourceCache();
+
+    HRESULT CreateTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, LPDIRECT3DTEXTURE9 *ppTexture );
+    HRESULT CreateTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Width, UINT Height, UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO *pSrcInfo, PALETTEENTRY *pPalette, LPDIRECT3DTEXTURE9 *ppTexture );
+    HRESULT CreateTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, LPCTSTR pSrcResource, LPDIRECT3DTEXTURE9 *ppTexture );
+    HRESULT CreateTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, LPCTSTR pSrcResource, UINT Width, UINT Height, UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO *pSrcInfo, PALETTEENTRY *pPalette, LPDIRECT3DTEXTURE9 *ppTexture );
+    HRESULT CreateCubeTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, LPDIRECT3DCUBETEXTURE9 *ppCubeTexture );
+    HRESULT CreateCubeTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Size, UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO *pSrcInfo, PALETTEENTRY *pPalette, LPDIRECT3DCUBETEXTURE9 *ppCubeTexture );
+    HRESULT CreateCubeTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, LPCTSTR pSrcResource, LPDIRECT3DCUBETEXTURE9 *ppCubeTexture );
+    HRESULT CreateCubeTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, LPCTSTR pSrcResource, UINT Size, UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO *pSrcInfo, PALETTEENTRY *pPalette, LPDIRECT3DCUBETEXTURE9 *ppCubeTexture );
+    HRESULT CreateVolumeTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, LPDIRECT3DVOLUMETEXTURE9 *ppVolumeTexture );
+    HRESULT CreateVolumeTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Width, UINT Height, UINT Depth, UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO *pSrcInfo, PALETTEENTRY *pPalette, LPDIRECT3DVOLUMETEXTURE9 *ppTexture );
+    HRESULT CreateVolumeTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, LPCTSTR pSrcResource, LPDIRECT3DVOLUMETEXTURE9 *ppVolumeTexture );
+    HRESULT CreateVolumeTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, LPCTSTR pSrcResource, UINT Width, UINT Height, UINT Depth, UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO *pSrcInfo, PALETTEENTRY *pPalette, LPDIRECT3DVOLUMETEXTURE9 *ppVolumeTexture );
+    HRESULT CreateFont( LPDIRECT3DDEVICE9 pDevice, UINT Height, UINT Width, UINT Weight, UINT MipLevels, BOOL Italic, DWORD CharSet, DWORD OutputPrecision, DWORD Quality, DWORD PitchAndFamily, LPCTSTR pFacename, LPD3DXFONT *ppFont );
+    HRESULT CreateFontIndirect( LPDIRECT3DDEVICE9 pDevice, CONST D3DXFONT_DESC *pDesc, LPD3DXFONT *ppFont );
+    HRESULT CreateEffectFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, const D3DXMACRO *pDefines, LPD3DXINCLUDE pInclude, DWORD Flags, LPD3DXEFFECTPOOL pPool, LPD3DXEFFECT *ppEffect, LPD3DXBUFFER *ppCompilationErrors );
+    HRESULT CreateEffectFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, LPCTSTR pSrcResource, const D3DXMACRO *pDefines, LPD3DXINCLUDE pInclude, DWORD Flags, LPD3DXEFFECTPOOL pPool, LPD3DXEFFECT *ppEffect, LPD3DXBUFFER *ppCompilationErrors );
+
+public:
+    HRESULT OnCreateDevice( IDirect3DDevice9 *pd3dDevice );
+    HRESULT OnResetDevice( IDirect3DDevice9 *pd3dDevice );
+    HRESULT OnLostDevice();
+    HRESULT OnDestroyDevice();
+
+protected:
+    friend CDXUTResourceCache& DXUTGetGlobalResourceCache();
+    friend HRESULT DXUTInitialize3DEnvironment();
+    friend HRESULT DXUTReset3DEnvironment();
+    friend void DXUTCleanup3DEnvironment( bool bReleaseSettings );
+
+    CDXUTResourceCache() { }
+
+    CGrowableArray< DXUTCache_Texture > m_TextureCache;
+    CGrowableArray< DXUTCache_Effect > m_EffectCache;
+    CGrowableArray< DXUTCache_Font > m_FontCache;
+};
+
+CDXUTResourceCache& DXUTGetGlobalResourceCache();
+
+
+//--------------------------------------------------------------------------------------
+class CD3DArcBall
+{
+public:
+    CD3DArcBall();
+
+    // Functions to change behavior
+    void Reset(); 
+    void SetTranslationRadius( FLOAT fRadiusTranslation ) { m_fRadiusTranslation = fRadiusTranslation; }
+    void SetWindow( INT nWidth, INT nHeight, FLOAT fRadius = 0.9f ) { m_nWidth = nWidth; m_nHeight = nHeight; m_fRadius = fRadius; m_vCenter = D3DXVECTOR2(m_nWidth/2.0f,m_nHeight/2.0f); }
+    void SetOffset( INT nX, INT nY ) { m_Offset.x = nX; m_Offset.y = nY; }
+
+    // Call these from client and use GetRotationMatrix() to read new rotation matrix
+    void OnBegin( int nX, int nY );  // start the rotation (pass current mouse position)
+    void OnMove( int nX, int nY );   // continue the rotation (pass current mouse position)
+    void OnEnd();                    // end the rotation 
+
+    // Or call this to automatically handle left, middle, right buttons
+    LRESULT     HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
+
+    // Functions to get/set state
+    const D3DXMATRIX* GetRotationMatrix()                   { return D3DXMatrixRotationQuaternion(&m_mRotation, &m_qNow); };
+    const D3DXMATRIX* GetTranslationMatrix() const          { return &m_mTranslation; }
+    const D3DXMATRIX* GetTranslationDeltaMatrix() const     { return &m_mTranslationDelta; }
+    bool        IsBeingDragged() const                      { return m_bDrag; }
+    D3DXQUATERNION GetQuatNow() const                       { return m_qNow; }
+    void        SetQuatNow( D3DXQUATERNION q ) { m_qNow = q; }
+
+    static D3DXQUATERNION QuatFromBallPoints( const D3DXVECTOR3 &vFrom, const D3DXVECTOR3 &vTo );
+
+
+protected:
+    D3DXMATRIXA16  m_mRotation;         // Matrix for arc ball's orientation
+    D3DXMATRIXA16  m_mTranslation;      // Matrix for arc ball's position
+    D3DXMATRIXA16  m_mTranslationDelta; // Matrix for arc ball's position
+
+    POINT          m_Offset;   // window offset, or upper-left corner of window
+    INT            m_nWidth;   // arc ball's window width
+    INT            m_nHeight;  // arc ball's window height
+    D3DXVECTOR2    m_vCenter;  // center of arc ball 
+    FLOAT          m_fRadius;  // arc ball's radius in screen coords
+    FLOAT          m_fRadiusTranslation; // arc ball's radius for translating the target
+
+    D3DXQUATERNION m_qDown;             // Quaternion before button down
+    D3DXQUATERNION m_qNow;              // Composite quaternion for current drag
+    bool           m_bDrag;             // Whether user is dragging arc ball
+
+    POINT          m_ptLastMouse;      // position of last mouse point
+    D3DXVECTOR3    m_vDownPt;           // starting point of rotation arc
+    D3DXVECTOR3    m_vCurrentPt;        // current point of rotation arc
+
+    D3DXVECTOR3    ScreenToVector( float fScreenPtX, float fScreenPtY );
+};
+
+
+//--------------------------------------------------------------------------------------
+// used by CCamera to map WM_KEYDOWN keys
+//--------------------------------------------------------------------------------------
+enum D3DUtil_CameraKeys
+{
+    CAM_STRAFE_LEFT = 0,
+    CAM_STRAFE_RIGHT,
+    CAM_MOVE_FORWARD,
+    CAM_MOVE_BACKWARD,
+    CAM_MOVE_UP,
+    CAM_MOVE_DOWN,
+    CAM_RESET,
+    CAM_CONTROLDOWN,
+    CAM_MAX_KEYS,
+    CAM_UNKNOWN = 0xFF
+};
+
+#define KEY_WAS_DOWN_MASK 0x80
+#define KEY_IS_DOWN_MASK  0x01
+
+#define MOUSE_LEFT_BUTTON   0x01
+#define MOUSE_MIDDLE_BUTTON 0x02
+#define MOUSE_RIGHT_BUTTON  0x04
+#define MOUSE_WHEEL         0x08
+
+
+//--------------------------------------------------------------------------------------
+// Simple base camera class that moves and rotates.  The base class
+//       records mouse and keyboard input for use by a derived class, and 
+//       keeps common state.
+//--------------------------------------------------------------------------------------
+class CBaseCamera
+{
+public:
+    CBaseCamera();
+
+    // Call these from client and use Get*Matrix() to read new matrices
+    virtual LRESULT HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
+    virtual void    FrameMove( FLOAT fElapsedTime ) = 0;
+
+    // Functions to change camera matrices
+    virtual void Reset(); 
+    virtual void SetViewParams( D3DXVECTOR3* pvEyePt, D3DXVECTOR3* pvLookatPt );
+    virtual void SetProjParams( FLOAT fFOV, FLOAT fAspect, FLOAT fNearPlane, FLOAT fFarPlane );
+
+    // Functions to change behavior
+    virtual void SetDragRect( RECT &rc ) { m_rcDrag = rc; }
+    void SetInvertPitch( bool bInvertPitch ) { m_bInvertPitch = bInvertPitch; }
+    void SetDrag( bool bMovementDrag, FLOAT fTotalDragTimeToZero = 0.25f ) { m_bMovementDrag = bMovementDrag; m_fTotalDragTimeToZero = fTotalDragTimeToZero; }
+    void SetEnableYAxisMovement( bool bEnableYAxisMovement ) { m_bEnableYAxisMovement = bEnableYAxisMovement; }
+    void SetEnablePositionMovement( bool bEnablePositionMovement ) { m_bEnablePositionMovement = bEnablePositionMovement; }
+    void SetClipToBoundary( bool bClipToBoundary, D3DXVECTOR3* pvMinBoundary, D3DXVECTOR3* pvMaxBoundary ) { m_bClipToBoundary = bClipToBoundary; if( pvMinBoundary ) m_vMinBoundary = *pvMinBoundary; if( pvMaxBoundary ) m_vMaxBoundary = *pvMaxBoundary; }
+    void SetScalers( FLOAT fRotationScaler = 0.01f, FLOAT fMoveScaler = 5.0f )  { m_fRotationScaler = fRotationScaler; m_fMoveScaler = fMoveScaler; }
+    void SetNumberOfFramesToSmoothMouseData( int nFrames ) { if( nFrames > 0 ) m_fFramesToSmoothMouseData = (float)nFrames; }
+
+    // Functions to get state
+    const D3DXMATRIX*  GetViewMatrix() const { return &m_mView; }
+    const D3DXMATRIX*  GetProjMatrix() const { return &m_mProj; }
+    const D3DXVECTOR3* GetEyePt() const      { return &m_vEye; }
+    const D3DXVECTOR3* GetLookAtPt() const   { return &m_vLookAt; }
+    float GetNearClip() const { return m_fNearPlane; }
+    float GetFarClip() const { return m_fFarPlane; }
+
+    bool IsBeingDragged() const         { return (m_bMouseLButtonDown || m_bMouseMButtonDown || m_bMouseRButtonDown); }
+    bool IsMouseLButtonDown() const     { return m_bMouseLButtonDown; } 
+    bool IsMouseMButtonDown() const     { return m_bMouseMButtonDown; } 
+    bool IsMouseRButtonDown() const     { return m_bMouseRButtonDown; } 
+
+protected:
+    // Functions to map a WM_KEYDOWN key to a D3DUtil_CameraKeys enum
+    virtual D3DUtil_CameraKeys MapKey( UINT nKey );    
+    bool IsKeyDown( BYTE key ) const { return( (key & KEY_IS_DOWN_MASK) == KEY_IS_DOWN_MASK ); }
+    bool WasKeyDown( BYTE key ) const { return( (key & KEY_WAS_DOWN_MASK) == KEY_WAS_DOWN_MASK ); }
+
+    void ConstrainToBoundary( D3DXVECTOR3* pV );
+    void UpdateVelocity( float fElapsedTime );
+    void GetInput( bool bGetKeyboardInput, bool bGetMouseInput, bool bGetGamepadInput, bool bResetCursorAfterMove );
+
+    D3DXMATRIX            m_mView;              // View matrix 
+    D3DXMATRIX            m_mProj;              // Projection matrix
+
+    DXUT_GAMEPAD          m_GamePad[DXUT_MAX_CONTROLLERS]; // XInput controller state
+    D3DXVECTOR3           m_vGamePadLeftThumb;
+    D3DXVECTOR3           m_vGamePadRightThumb;
+    double                m_GamePadLastActive[DXUT_MAX_CONTROLLERS];
+
+    int                   m_cKeysDown;            // Number of camera keys that are down.
+    BYTE                  m_aKeys[CAM_MAX_KEYS];  // State of input - KEY_WAS_DOWN_MASK|KEY_IS_DOWN_MASK
+    D3DXVECTOR3           m_vKeyboardDirection;   // Direction vector of keyboard input
+    POINT                 m_ptLastMousePosition;  // Last absolute position of mouse cursor
+    bool                  m_bMouseLButtonDown;    // True if left button is down 
+    bool                  m_bMouseMButtonDown;    // True if middle button is down 
+    bool                  m_bMouseRButtonDown;    // True if right button is down 
+    int                   m_nCurrentButtonMask;   // mask of which buttons are down
+    int                   m_nMouseWheelDelta;     // Amount of middle wheel scroll (+/-) 
+    D3DXVECTOR2           m_vMouseDelta;          // Mouse relative delta smoothed over a few frames
+    float                 m_fFramesToSmoothMouseData; // Number of frames to smooth mouse data over
+
+    D3DXVECTOR3           m_vDefaultEye;          // Default camera eye position
+    D3DXVECTOR3           m_vDefaultLookAt;       // Default LookAt position
+    D3DXVECTOR3           m_vEye;                 // Camera eye position
+    D3DXVECTOR3           m_vLookAt;              // LookAt position
+    float                 m_fCameraYawAngle;      // Yaw angle of camera
+    float                 m_fCameraPitchAngle;    // Pitch angle of camera
+
+    RECT                  m_rcDrag;               // Rectangle within which a drag can be initiated.
+    D3DXVECTOR3           m_vVelocity;            // Velocity of camera
+    bool                  m_bMovementDrag;        // If true, then camera movement will slow to a stop otherwise movement is instant
+    D3DXVECTOR3           m_vVelocityDrag;        // Velocity drag force
+    FLOAT                 m_fDragTimer;           // Countdown timer to apply drag
+    FLOAT                 m_fTotalDragTimeToZero; // Time it takes for velocity to go from full to 0
+    D3DXVECTOR2           m_vRotVelocity;         // Velocity of camera
+
+    float                 m_fFOV;                 // Field of view
+    float                 m_fAspect;              // Aspect ratio
+    float                 m_fNearPlane;           // Near plane
+    float                 m_fFarPlane;            // Far plane
+
+    float                 m_fRotationScaler;      // Scaler for rotation
+    float                 m_fMoveScaler;          // Scaler for movement
+
+    bool                  m_bInvertPitch;         // Invert the pitch axis
+    bool                  m_bEnablePositionMovement; // If true, then the user can translate the camera/model 
+    bool                  m_bEnableYAxisMovement; // If true, then camera can move in the y-axis
+
+    bool                  m_bClipToBoundary;      // If true, then the camera will be clipped to the boundary
+    D3DXVECTOR3           m_vMinBoundary;         // Min point in clip boundary
+    D3DXVECTOR3           m_vMaxBoundary;         // Max point in clip boundary
+};
+
+
+//--------------------------------------------------------------------------------------
+// Simple first person camera class that moves and rotates.
+//       It allows yaw and pitch but not roll.  It uses WM_KEYDOWN and 
+//       GetCursorPos() to respond to keyboard and mouse input and updates the 
+//       view matrix based on input.  
+//--------------------------------------------------------------------------------------
+class CFirstPersonCamera : public CBaseCamera
+{
+public:
+    CFirstPersonCamera();
+
+    // Call these from client and use Get*Matrix() to read new matrices
+    virtual void FrameMove( FLOAT fElapsedTime );
+
+    // Functions to change behavior
+    void SetRotateButtons( bool bLeft, bool bMiddle, bool bRight, bool bRotateWithoutButtonDown = false );
+
+    void SetResetCursorAfterMove( bool bResetCursorAfterMove ) { m_bResetCursorAfterMove = bResetCursorAfterMove; }
+
+    // Functions to get state
+    D3DXMATRIX*  GetWorldMatrix()            { return &m_mCameraWorld; }
+
+    const D3DXVECTOR3* GetWorldRight() const { return (D3DXVECTOR3*)&m_mCameraWorld._11; } 
+    const D3DXVECTOR3* GetWorldUp() const    { return (D3DXVECTOR3*)&m_mCameraWorld._21; }
+    const D3DXVECTOR3* GetWorldAhead() const { return (D3DXVECTOR3*)&m_mCameraWorld._31; }
+    const D3DXVECTOR3* GetEyePt() const      { return (D3DXVECTOR3*)&m_mCameraWorld._41; }
+
+protected:
+    D3DXMATRIX m_mCameraWorld;       // World matrix of the camera (inverse of the view matrix)
+
+    int        m_nActiveButtonMask;  // Mask to determine which button to enable for rotation
+	bool	   m_bRotateWithoutButtonDown;
+
+    bool       m_bResetCursorAfterMove;// If true, the class will reset the cursor position so that the cursor always has space to move 
+};
+
+
+//--------------------------------------------------------------------------------------
+// Simple model viewing camera class that rotates around the object.
+//--------------------------------------------------------------------------------------
+class CModelViewerCamera : public CBaseCamera
+{
+public:
+    CModelViewerCamera();
+
+    // Call these from client and use Get*Matrix() to read new matrices
+    virtual LRESULT HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
+    virtual void FrameMove( FLOAT fElapsedTime );
+
+   
+    // Functions to change behavior
+    virtual void SetDragRect( RECT &rc );
+    void Reset(); 
+    void SetViewParams( D3DXVECTOR3* pvEyePt, D3DXVECTOR3* pvLookatPt );
+    void SetButtonMasks( int nRotateModelButtonMask = MOUSE_LEFT_BUTTON, int nZoomButtonMask = MOUSE_WHEEL, int nRotateCameraButtonMask = MOUSE_RIGHT_BUTTON ) { m_nRotateModelButtonMask = nRotateModelButtonMask, m_nZoomButtonMask = nZoomButtonMask; m_nRotateCameraButtonMask = nRotateCameraButtonMask; }
+    
+    void SetAttachCameraToModel( bool bEnable = false ) { m_bAttachCameraToModel = bEnable; }
+    void SetWindow( int nWidth, int nHeight, float fArcballRadius=0.9f ) { m_WorldArcBall.SetWindow( nWidth, nHeight, fArcballRadius ); m_ViewArcBall.SetWindow( nWidth, nHeight, fArcballRadius ); }
+    void SetRadius( float fDefaultRadius=5.0f, float fMinRadius=1.0f, float fMaxRadius=FLT_MAX  ) { m_fDefaultRadius = m_fRadius = fDefaultRadius; m_fMinRadius = fMinRadius; m_fMaxRadius = fMaxRadius; m_bDragSinceLastUpdate = true; }
+    void SetModelCenter( D3DXVECTOR3 vModelCenter ) { m_vModelCenter = vModelCenter; }
+    void SetLimitPitch( bool bLimitPitch ) { m_bLimitPitch = bLimitPitch; }
+    void SetViewQuat( D3DXQUATERNION q ) { m_ViewArcBall.SetQuatNow( q ); m_bDragSinceLastUpdate = true; }
+    void SetWorldQuat( D3DXQUATERNION q ) { m_WorldArcBall.SetQuatNow( q ); m_bDragSinceLastUpdate = true; }
+
+    // Functions to get state
+    const D3DXMATRIX* GetWorldMatrix() const { return &m_mWorld; }
+    void SetWorldMatrix( D3DXMATRIX &mWorld ) { m_mWorld = mWorld; m_bDragSinceLastUpdate = true; }
+
+protected:
+    CD3DArcBall  m_WorldArcBall;
+    CD3DArcBall  m_ViewArcBall;
+    D3DXVECTOR3  m_vModelCenter;
+    D3DXMATRIX   m_mModelLastRot;        // Last arcball rotation matrix for model 
+    D3DXMATRIX   m_mModelRot;            // Rotation matrix of model
+    D3DXMATRIX   m_mWorld;               // World matrix of model
+
+    int          m_nRotateModelButtonMask;
+    int          m_nZoomButtonMask;
+    int          m_nRotateCameraButtonMask;
+
+    bool         m_bAttachCameraToModel;
+    bool         m_bLimitPitch;
+    float        m_fRadius;              // Distance from the camera to model 
+    float        m_fDefaultRadius;       // Distance from the camera to model 
+    float        m_fMinRadius;           // Min radius
+    float        m_fMaxRadius;           // Max radius
+    bool         m_bDragSinceLastUpdate; // True if mouse drag has happened since last time FrameMove is called.
+
+    D3DXMATRIX   m_mCameraRotLast;
+
+};
+
+
+//--------------------------------------------------------------------------------------
+// Manages the intertion point when drawing text
+//--------------------------------------------------------------------------------------
+class CDXUTTextHelper
+{
+public:
+    CDXUTTextHelper( ID3DXFont* pFont, ID3DXSprite* pSprite, int nLineHeight );
+
+    void SetInsertionPos( int x, int y ) { m_pt.x = x; m_pt.y = y; }
+    void SetForegroundColor( D3DXCOLOR clr ) { m_clr = clr; }
+
+    void Begin();
+    HRESULT DrawFormattedTextLine( const WCHAR* strMsg, ... );
+    HRESULT DrawTextLine( const WCHAR* strMsg );
+    HRESULT DrawFormattedTextLine( RECT &rc, DWORD dwFlags, const WCHAR* strMsg, ... );
+    HRESULT DrawTextLine( RECT &rc, DWORD dwFlags, const WCHAR* strMsg );
+    void End();
+
+protected:
+    ID3DXFont*   m_pFont;
+    ID3DXSprite* m_pSprite;
+    D3DXCOLOR    m_clr;
+    POINT        m_pt;
+    int          m_nLineHeight;
+};
+
+
+//--------------------------------------------------------------------------------------
+// Manages a persistent list of lines and draws them using ID3DXLine
+//--------------------------------------------------------------------------------------
+class CDXUTLineManager
+{
+public:
+    CDXUTLineManager();
+    ~CDXUTLineManager();
+
+    HRESULT OnCreatedDevice( IDirect3DDevice9* pd3dDevice );
+    HRESULT OnResetDevice();
+    HRESULT OnRender();
+    HRESULT OnLostDevice();
+    HRESULT OnDeletedDevice();
+
+    HRESULT AddLine( int* pnLineID, D3DXVECTOR2* pVertexList, DWORD dwVertexListCount, D3DCOLOR Color, float fWidth, float fScaleRatio, bool bAntiAlias );
+    HRESULT AddRect( int* pnLineID, RECT rc, D3DCOLOR Color, float fWidth, float fScaleRatio, bool bAntiAlias );
+    HRESULT RemoveLine( int nLineID );
+    HRESULT RemoveAllLines();
+
+protected:
+    struct LINE_NODE
+    {
+        int      nLineID;
+        D3DCOLOR Color;
+        float    fWidth;
+        bool     bAntiAlias;
+        float    fScaleRatio;
+        D3DXVECTOR2* pVertexList;
+        DWORD    dwVertexListCount;
+    };
+
+    CGrowableArray<LINE_NODE*> m_LinesList;
+    IDirect3DDevice9* m_pd3dDevice;
+    ID3DXLine* m_pD3DXLine;
+};
+
+
+//--------------------------------------------------------------------------------------
+// Manages the mesh, direction, mouse events of a directional arrow that 
+// rotates around a radius controlled by an arcball 
+//--------------------------------------------------------------------------------------
+class CDXUTDirectionWidget
+{
+public:
+    CDXUTDirectionWidget();
+
+    static HRESULT StaticOnCreateDevice( IDirect3DDevice9* pd3dDevice );
+    HRESULT OnResetDevice( const D3DSURFACE_DESC* pBackBufferSurfaceDesc );
+    HRESULT OnRender( D3DXCOLOR color, const D3DXMATRIX* pmView, const D3DXMATRIX* pmProj, const D3DXVECTOR3* pEyePt );
+    LRESULT HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
+    static void StaticOnLostDevice();
+    static void StaticOnDestroyDevice();
+
+    D3DXVECTOR3 GetLightDirection()         { return m_vCurrentDir; };
+    void        SetLightDirection( D3DXVECTOR3 vDir ) { m_vDefaultDir = m_vCurrentDir = vDir; };
+    void        SetButtonMask( int nRotate = MOUSE_RIGHT_BUTTON ) { m_nRotateMask = nRotate; }
+
+    float GetRadius()                 { return m_fRadius; };
+    void  SetRadius( float fRadius )  { m_fRadius = fRadius; };
+
+    bool  IsBeingDragged() { return m_ArcBall.IsBeingDragged(); };
+
+protected:
+    HRESULT UpdateLightDir();
+
+    D3DXMATRIXA16  m_mRot;
+    D3DXMATRIXA16  m_mRotSnapshot;
+    static IDirect3DDevice9* s_pd3dDevice;
+    static ID3DXEffect* s_pEffect;       
+    static ID3DXMesh*   s_pMesh;    
+
+    float          m_fRadius;
+    int            m_nRotateMask;
+    CD3DArcBall    m_ArcBall;
+    D3DXVECTOR3    m_vDefaultDir;
+    D3DXVECTOR3    m_vCurrentDir;
+    D3DXMATRIX     m_mView;
+};
+
+
+//--------------------------------------------------------------------------------------
+// Shared code for samples to ask user if they want to use a REF device or quit
+//--------------------------------------------------------------------------------------
+void DXUTDisplaySwitchingToREFWarning();
+
+//--------------------------------------------------------------------------------------
+// Tries to finds a media file by searching in common locations
+//--------------------------------------------------------------------------------------
+HRESULT DXUTFindDXSDKMediaFileCch( WCHAR* strDestPath, int cchDest, LPCWSTR strFilename );
+HRESULT DXUTSetMediaSearchPath( LPCWSTR strPath );
+LPCWSTR DXUTGetMediaSearchPath();
+
+
+//--------------------------------------------------------------------------------------
+// Returns the string for the given D3DFORMAT.
+//       bWithPrefix determines whether the string should include the "D3DFMT_"
+//--------------------------------------------------------------------------------------
+LPCWSTR DXUTD3DFormatToString( D3DFORMAT format, bool bWithPrefix );
+
+
+//--------------------------------------------------------------------------------------
+// Returns a view matrix for rendering to a face of a cubemap.
+//--------------------------------------------------------------------------------------
+D3DXMATRIX DXUTGetCubeMapViewMatrix( DWORD dwFace );
+
+
+//--------------------------------------------------------------------------------------
+// Helper function to launch the Media Center UI after the program terminates
+//--------------------------------------------------------------------------------------
+bool DXUTReLaunchMediaCenter();
+
+
+//--------------------------------------------------------------------------------------
+// Debug printing support
+// See dxerr9.h for more debug printing support
+//--------------------------------------------------------------------------------------
+void DXUTOutputDebugStringW( LPCWSTR strMsg, ... );
+void DXUTOutputDebugStringA( LPCSTR strMsg, ... );
+HRESULT WINAPI DXUTTrace( const CHAR* strFile, DWORD dwLine, HRESULT hr, const WCHAR* strMsg, bool bPopMsgBox );
+void DXUTTraceDecl( D3DVERTEXELEMENT9 decl[MAX_FVF_DECL_SIZE] );
+WCHAR* DXUTTraceD3DDECLUSAGEtoString( BYTE u );
+WCHAR* DXUTTraceD3DDECLMETHODtoString( BYTE m );
+WCHAR* DXUTTraceD3DDECLTYPEtoString( BYTE t );
+
+#ifdef UNICODE
+#define DXUTOutputDebugString DXUTOutputDebugStringW
+#else
+#define DXUTOutputDebugString DXUTOutputDebugStringA
+#endif
+
+// These macros are very similar to dxerr9's but it special cases the HRESULT defined
+// by DXUT to pop better message boxes. 
+#if defined(DEBUG) || defined(_DEBUG)
+#define DXUT_ERR(str,hr)           DXUTTrace( __FILE__, (DWORD)__LINE__, hr, str, false )
+#define DXUT_ERR_MSGBOX(str,hr)    DXUTTrace( __FILE__, (DWORD)__LINE__, hr, str, true )
+#define DXUTTRACE                  DXUTOutputDebugString
+#else
+#define DXUT_ERR(str,hr)           (hr)
+#define DXUT_ERR_MSGBOX(str,hr)    (hr)
+#define DXUTTRACE                  (__noop)
+#endif
+
+
+//--------------------------------------------------------------------------------------
+// Direct3D9 dynamic linking support -- calls top-level D3D9 APIs with graceful
+// failure if APIs are not present.
+//--------------------------------------------------------------------------------------
+
+IDirect3D9 * WINAPI DXUT_Dynamic_Direct3DCreate9(UINT SDKVersion);
+int WINAPI DXUT_Dynamic_D3DPERF_BeginEvent( D3DCOLOR col, LPCWSTR wszName );
+int WINAPI DXUT_Dynamic_D3DPERF_EndEvent( void );
+void WINAPI DXUT_Dynamic_D3DPERF_SetMarker( D3DCOLOR col, LPCWSTR wszName );
+void WINAPI DXUT_Dynamic_D3DPERF_SetRegion( D3DCOLOR col, LPCWSTR wszName );
+BOOL WINAPI DXUT_Dynamic_D3DPERF_QueryRepeatFrame( void );
+void WINAPI DXUT_Dynamic_D3DPERF_SetOptions( DWORD dwOptions );
+DWORD WINAPI DXUT_Dynamic_D3DPERF_GetStatus( void );
+
+
+//--------------------------------------------------------------------------------------
+// Profiling/instrumentation support
+//--------------------------------------------------------------------------------------
+
+//--------------------------------------------------------------------------------------
+// Some D3DPERF APIs take a color that can be used when displaying user events in 
+// performance analysis tools.  The following constants are provided for your 
+// convenience, but you can use any colors you like.
+//--------------------------------------------------------------------------------------
+const D3DCOLOR DXUT_PERFEVENTCOLOR  = D3DCOLOR_XRGB(200,100,100);
+const D3DCOLOR DXUT_PERFEVENTCOLOR2 = D3DCOLOR_XRGB(100,200,100);
+const D3DCOLOR DXUT_PERFEVENTCOLOR3 = D3DCOLOR_XRGB(100,100,200);
+
+//--------------------------------------------------------------------------------------
+// The following macros provide a convenient way for your code to call the D3DPERF 
+// functions only when PROFILE is defined.  If PROFILE is not defined (as for the final 
+// release version of a program), these macros evaluate to nothing, so no detailed event
+// information is embedded in your shipping program.  It is recommended that you create
+// and use three build configurations for your projects:
+//     Debug (nonoptimized code, asserts active, PROFILE defined to assist debugging)
+//     Profile (optimized code, asserts disabled, PROFILE defined to assist optimization)
+//     Release (optimized code, asserts disabled, PROFILE not defined)
+//--------------------------------------------------------------------------------------
+#ifdef PROFILE
+// PROFILE is defined, so these macros call the D3DPERF functions
+#define DXUT_BeginPerfEvent( color, pstrMessage )   DXUT_Dynamic_D3DPERF_BeginEvent( color, pstrMessage )
+#define DXUT_EndPerfEvent()                         DXUT_Dynamic_D3DPERF_EndEvent()
+#define DXUT_SetPerfMarker( color, pstrMessage )    DXUT_Dynamic_D3DPERF_SetMarker( color, pstrMessage )
+#else
+// PROFILE is not defined, so these macros do nothing
+#define DXUT_BeginPerfEvent( color, pstrMessage )   (__noop)
+#define DXUT_EndPerfEvent()                         (__noop)
+#define DXUT_SetPerfMarker( color, pstrMessage )    (__noop)
+#endif
+
+//--------------------------------------------------------------------------------------
+// CDXUTPerfEventGenerator is a helper class that makes it easy to attach begin and end
+// events to a block of code.  Simply define a CDXUTPerfEventGenerator variable anywhere 
+// in a block of code, and the class's constructor will call DXUT_BeginPerfEvent when 
+// the block of code begins, and the class's destructor will call DXUT_EndPerfEvent when 
+// the block ends.
+//--------------------------------------------------------------------------------------
+class CDXUTPerfEventGenerator
+{
+public:
+    CDXUTPerfEventGenerator( D3DCOLOR color, LPCWSTR pstrMessage ) { DXUT_BeginPerfEvent( color, pstrMessage ); }
+    ~CDXUTPerfEventGenerator( void ) { DXUT_EndPerfEvent(); }
+};
+
+
+//--------------------------------------------------------------------------------------
+// Multimon handling to support OSes with or without multimon API support.  
+// Purposely avoiding the use of multimon.h so DXUT.lib doesn't require 
+// COMPILE_MULTIMON_STUBS and cause complication with MFC or other users of multimon.h
+//--------------------------------------------------------------------------------------
+#ifndef MONITOR_DEFAULTTOPRIMARY
+    #define MONITORINFOF_PRIMARY        0x00000001
+    #define MONITOR_DEFAULTTONULL       0x00000000
+    #define MONITOR_DEFAULTTOPRIMARY    0x00000001
+    #define MONITOR_DEFAULTTONEAREST    0x00000002
+    typedef struct tagMONITORINFO
+    {
+        DWORD   cbSize;
+        RECT    rcMonitor;
+        RECT    rcWork;
+        DWORD   dwFlags;
+    } MONITORINFO, *LPMONITORINFO;
+    typedef struct tagMONITORINFOEXW : public tagMONITORINFO
+    {
+        WCHAR       szDevice[CCHDEVICENAME];
+    } MONITORINFOEXW, *LPMONITORINFOEXW;
+    typedef MONITORINFOEXW MONITORINFOEX;
+    typedef LPMONITORINFOEXW LPMONITORINFOEX;
+#endif
+
+HMONITOR DXUTMonitorFromWindow( HWND hWnd, DWORD dwFlags );
+BOOL     DXUTGetMonitorInfo( HMONITOR hMonitor, LPMONITORINFO lpMonitorInfo );
+void     DXUTGetDesktopResolution( UINT AdapterOrdinal, UINT* pWidth, UINT* pHeight );
+
+
+//--------------------------------------------------------------------------------------
+// Implementation of CGrowableArray
+//--------------------------------------------------------------------------------------
+
+// This version doesn't call ctor or dtor.
+template< typename TYPE >
+HRESULT CGrowableArray<TYPE>::SetSizeInternal( int nNewMaxSize )
+{
+    if( nNewMaxSize < 0 )
+    {
+        assert( false );
+        return E_INVALIDARG;
+    }
+
+    if( nNewMaxSize == 0 )
+    {
+        // Shrink to 0 size & cleanup
+        if( m_pData )
+        {
+            free( m_pData );
+            m_pData = NULL;
+        }
+
+        m_nMaxSize = 0;
+        m_nSize = 0;
+    }
+    else if( m_pData == NULL || nNewMaxSize > m_nMaxSize )
+    {
+        // Grow array
+        int nGrowBy = ( m_nMaxSize == 0 ) ? 16 : m_nMaxSize;
+        nNewMaxSize = __max( nNewMaxSize, m_nMaxSize + nGrowBy );
+
+        TYPE* pDataNew = (TYPE*) realloc( m_pData, nNewMaxSize * sizeof(TYPE) );
+        if( pDataNew == NULL )
+            return E_OUTOFMEMORY;
+
+        m_pData = pDataNew;
+        m_nMaxSize = nNewMaxSize;
+    }
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+template< typename TYPE >
+HRESULT CGrowableArray<TYPE>::SetSize( int nNewMaxSize )
+{
+    int nOldSize = m_nSize;
+
+    if( nOldSize > nNewMaxSize )
+    {
+        // Removing elements. Call dtor.
+
+        for( int i = nNewMaxSize; i < nOldSize; ++i )
+            m_pData[i].~TYPE();
+    }
+
+    // Adjust buffer.  Note that there's no need to check for error
+    // since if it happens, nOldSize == nNewMaxSize will be true.)
+    HRESULT hr = SetSizeInternal( nNewMaxSize );
+
+    if( nOldSize < nNewMaxSize )
+    {
+        // Adding elements. Call ctor.
+
+        for( int i = nOldSize; i < nNewMaxSize; ++i )
+            ::new (&m_pData[i]) TYPE;
+    }
+
+    return hr;
+}
+
+
+//--------------------------------------------------------------------------------------
+template< typename TYPE >
+HRESULT CGrowableArray<TYPE>::Add( const TYPE& value )
+{
+    HRESULT hr;
+    if( FAILED( hr = SetSizeInternal( m_nSize + 1 ) ) )
+        return hr;
+
+    // Construct the new element
+    ::new (&m_pData[m_nSize]) TYPE;
+
+    // Assign
+    m_pData[m_nSize] = value;
+    ++m_nSize;
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+template< typename TYPE >
+HRESULT CGrowableArray<TYPE>::Insert( int nIndex, const TYPE& value )
+{
+    HRESULT hr;
+
+    // Validate index
+    if( nIndex < 0 || 
+        nIndex > m_nSize )
+    {
+        assert( false );
+        return E_INVALIDARG;
+    }
+
+    // Prepare the buffer
+    if( FAILED( hr = SetSizeInternal( m_nSize + 1 ) ) )
+        return hr;
+
+    // Shift the array
+    MoveMemory( &m_pData[nIndex+1], &m_pData[nIndex], sizeof(TYPE) * (m_nSize - nIndex) );
+
+    // Construct the new element
+    ::new (&m_pData[nIndex]) TYPE;
+
+    // Set the value and increase the size
+    m_pData[nIndex] = value;
+    ++m_nSize;
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+template< typename TYPE >
+HRESULT CGrowableArray<TYPE>::SetAt( int nIndex, const TYPE& value )
+{
+    // Validate arguments
+    if( nIndex < 0 ||
+        nIndex >= m_nSize )
+    {
+        assert( false );
+        return E_INVALIDARG;
+    }
+
+    m_pData[nIndex] = value;
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Searches for the specified value and returns the index of the first occurrence
+// within the section of the data array that extends from iStart and contains the 
+// specified number of elements. Returns -1 if value is not found within the given 
+// section.
+//--------------------------------------------------------------------------------------
+template< typename TYPE >
+int CGrowableArray<TYPE>::IndexOf( const TYPE& value, int iStart, int nNumElements )
+{
+    // Validate arguments
+    if( iStart < 0 || 
+        iStart >= m_nSize ||
+        nNumElements < 0 ||
+        iStart + nNumElements > m_nSize )
+    {
+        assert( false );
+        return -1;
+    }
+
+    // Search
+    for( int i = iStart; i < (iStart + nNumElements); i++ )
+    {
+        if( value == m_pData[i] )
+            return i;
+    }
+
+    // Not found
+    return -1;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Searches for the specified value and returns the index of the last occurrence
+// within the section of the data array that contains the specified number of elements
+// and ends at iEnd. Returns -1 if value is not found within the given section.
+//--------------------------------------------------------------------------------------
+template< typename TYPE >
+int CGrowableArray<TYPE>::LastIndexOf( const TYPE& value, int iEnd, int nNumElements )
+{
+    // Validate arguments
+    if( iEnd < 0 || 
+        iEnd >= m_nSize ||
+        nNumElements < 0 ||
+        iEnd - nNumElements < 0 )
+    {
+        assert( false );
+        return -1;
+    }
+
+    // Search
+    for( int i = iEnd; i > (iEnd - nNumElements); i-- )
+    {
+        if( value == m_pData[i] )
+            return i;
+    }
+
+    // Not found
+    return -1;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+template< typename TYPE >
+HRESULT CGrowableArray<TYPE>::Remove( int nIndex )
+{
+    if( nIndex < 0 || 
+        nIndex >= m_nSize )
+    {
+        assert( false );
+        return E_INVALIDARG;
+    }
+
+    // Destruct the element to be removed
+    m_pData[nIndex].~TYPE();
+
+    // Compact the array and decrease the size
+    MoveMemory( &m_pData[nIndex], &m_pData[nIndex+1], sizeof(TYPE) * (m_nSize - (nIndex+1)) );
+    --m_nSize;
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Creates a REF or NULLREF device and returns that device.  The caller should call
+// Release() when done with the device.
+//--------------------------------------------------------------------------------------
+IDirect3DDevice9* DXUTCreateRefDevice( HWND hWnd, bool bNullRef = true );
+
+
+#endif
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTMesh.h
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTMesh.h	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTMesh.h	(revision 761)
@@ -0,0 +1,147 @@
+//-----------------------------------------------------------------------------
+// File: DXUTMesh.h
+//
+// Desc: Support code for loading DirectX .X files.
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//-----------------------------------------------------------------------------
+#pragma once
+#ifndef DXUTMESH_H
+#define DXUTMESH_H
+
+
+
+
+
+//-----------------------------------------------------------------------------
+// Name: class CDXUTMesh
+// Desc: Class for loading and rendering file-based meshes
+//-----------------------------------------------------------------------------
+class CDXUTMesh
+{
+public:
+    WCHAR                   m_strName[512];
+    LPD3DXMESH              m_pMesh;   // Managed mesh
+    
+    // Cache of data in m_pMesh for easy access
+    IDirect3DVertexBuffer9* m_pVB;
+    IDirect3DIndexBuffer9*  m_pIB;
+    IDirect3DVertexDeclaration9* m_pDecl;
+    DWORD                   m_dwNumVertices;
+    DWORD                   m_dwNumFaces;
+    DWORD                   m_dwBytesPerVertex;
+
+    DWORD                   m_dwNumMaterials; // Materials for the mesh
+    D3DMATERIAL9*           m_pMaterials;
+    CHAR					(*m_strMaterials)[MAX_PATH];
+    IDirect3DBaseTexture9** m_pTextures;
+    bool                    m_bUseMaterials;
+
+public:
+    // Rendering
+    HRESULT Render( LPDIRECT3DDEVICE9 pd3dDevice, 
+                    bool bDrawOpaqueSubsets = true,
+                    bool bDrawAlphaSubsets = true );
+    HRESULT Render( ID3DXEffect *pEffect,
+                    D3DXHANDLE hTexture = NULL,
+                    D3DXHANDLE hDiffuse = NULL,
+                    D3DXHANDLE hAmbient = NULL,
+                    D3DXHANDLE hSpecular = NULL,
+                    D3DXHANDLE hEmissive = NULL,
+                    D3DXHANDLE hPower = NULL,
+                    bool bDrawOpaqueSubsets = true,
+                    bool bDrawAlphaSubsets = true );
+
+    // Mesh access
+    LPD3DXMESH GetMesh() { return m_pMesh; }
+
+    // Rendering options
+    void    UseMeshMaterials( bool bFlag ) { m_bUseMaterials = bFlag; }
+    HRESULT SetFVF( LPDIRECT3DDEVICE9 pd3dDevice, DWORD dwFVF );
+    HRESULT SetVertexDecl( LPDIRECT3DDEVICE9 pd3dDevice, const D3DVERTEXELEMENT9 *pDecl, 
+                           bool bAutoComputeNormals = true, bool bAutoComputeTangents = true, 
+                           bool bSplitVertexForOptimalTangents = false );
+
+    // Initializing
+    HRESULT RestoreDeviceObjects( LPDIRECT3DDEVICE9 pd3dDevice );
+    HRESULT InvalidateDeviceObjects();
+
+    // Creation/destruction
+    HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, LPCWSTR strFilename );
+    HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, LPD3DXFILEDATA pFileData );
+	HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, ID3DXMesh* pInMesh, D3DXMATERIAL* pd3dxMaterials, DWORD dwMaterials );
+    HRESULT CreateMaterials( LPCWSTR strPath, IDirect3DDevice9 *pd3dDevice, D3DXMATERIAL* d3dxMtrls, DWORD dwNumMaterials );
+    HRESULT Destroy();
+
+    CDXUTMesh( LPCWSTR strName = L"CDXUTMeshFile_Mesh" );
+    virtual ~CDXUTMesh();
+};
+
+
+
+
+//-----------------------------------------------------------------------------
+// Name: class CDXUTMeshFrame
+// Desc: Class for loading and rendering file-based meshes
+//-----------------------------------------------------------------------------
+class CDXUTMeshFrame
+{
+public:
+    WCHAR      m_strName[512];
+    D3DXMATRIX m_mat;
+    CDXUTMesh*  m_pMesh;
+
+    CDXUTMeshFrame* m_pNext;
+    CDXUTMeshFrame* m_pChild;
+
+public:
+    // Matrix access
+    void        SetMatrix( D3DXMATRIX* pmat ) { m_mat = *pmat; }
+    D3DXMATRIX* GetMatrix()                   { return &m_mat; }
+
+    CDXUTMesh*   FindMesh( LPCWSTR strMeshName );
+    CDXUTMeshFrame*  FindFrame( LPCWSTR strFrameName );
+    bool        EnumMeshes( bool (*EnumMeshCB)(CDXUTMesh*,void*), 
+                            void* pContext );
+
+    HRESULT Destroy();
+    HRESULT RestoreDeviceObjects( LPDIRECT3DDEVICE9 pd3dDevice );
+    HRESULT InvalidateDeviceObjects();
+    HRESULT Render( LPDIRECT3DDEVICE9 pd3dDevice, 
+                    bool bDrawOpaqueSubsets = true,
+                    bool bDrawAlphaSubsets = true,
+                    D3DXMATRIX* pmatWorldMatrix = NULL);
+
+    CDXUTMeshFrame( LPCWSTR strName = L"CDXUTMeshFile_Frame" );
+    virtual ~CDXUTMeshFrame();
+};
+
+
+
+
+//-----------------------------------------------------------------------------
+// Name: class CDXUTMeshFile
+// Desc: Class for loading and rendering file-based meshes
+//-----------------------------------------------------------------------------
+class CDXUTMeshFile : public CDXUTMeshFrame
+{
+    HRESULT LoadMesh( LPDIRECT3DDEVICE9 pd3dDevice, LPD3DXFILEDATA pFileData, 
+                      CDXUTMeshFrame* pParentFrame );
+    HRESULT LoadFrame( LPDIRECT3DDEVICE9 pd3dDevice, LPD3DXFILEDATA pFileData, 
+                       CDXUTMeshFrame* pParentFrame );
+public:
+    HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, LPCWSTR strFilename );
+    HRESULT CreateFromResource( LPDIRECT3DDEVICE9 pd3dDevice, LPCWSTR strResource, LPCWSTR strType );
+    // For pure devices, specify the world transform. If the world transform is not
+    // specified on pure devices, this function will fail.
+    HRESULT Render( LPDIRECT3DDEVICE9 pd3dDevice, D3DXMATRIX* pmatWorldMatrix = NULL );
+
+    CDXUTMeshFile() : CDXUTMeshFrame( L"CDXUTMeshFile_Root" ) {}
+};
+
+
+
+#endif
+
+
+
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT_2002.vcproj
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT_2002.vcproj	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT_2002.vcproj	(revision 761)
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.00"
+	Name="DXUT"
+	ProjectGUID="{E0CF097B-F22D-465B-A884-D89E55BD7ECD}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="Debug"
+			IntermediateDirectory="Debug"
+			ConfigurationType="4"
+			CharacterSet="1">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
+				MinimalRebuild="TRUE"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				UsePrecompiledHeader="3"
+				PrecompiledHeaderThrough="dxstdafx.h"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="4"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="$(OutDir)/DXUT.lib"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="Release"
+			IntermediateDirectory="Release"
+			ConfigurationType="4"
+			CharacterSet="1">
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+				RuntimeLibrary="0"
+				UsePrecompiledHeader="3"
+				PrecompiledHeaderThrough="dxstdafx.h"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="$(OutDir)/DXUT.lib"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<Files>
+		<File
+			RelativePath=".\dxstdafx.cpp">
+			<FileConfiguration
+				Name="Debug|Win32">
+				<Tool
+					Name="VCCLCompilerTool"
+					UsePrecompiledHeader="1"/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Release|Win32">
+				<Tool
+					Name="VCCLCompilerTool"
+					UsePrecompiledHeader="1"/>
+			</FileConfiguration>
+		</File>
+		<File
+			RelativePath=".\dxstdafx.h">
+		</File>
+		<File
+			RelativePath=".\DXUT.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUT.h">
+		</File>
+		<File
+			RelativePath=".\DXUTenum.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUTenum.h">
+		</File>
+		<File
+			RelativePath=".\DXUTgui.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUTgui.h">
+		</File>
+		<File
+			RelativePath=".\DXUTMesh.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUTMesh.h">
+		</File>
+		<File
+			RelativePath=".\DXUTmisc.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUTmisc.h">
+		</File>
+		<File
+			RelativePath=".\DXUTRes.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUTRes.h">
+		</File>
+		<File
+			RelativePath=".\DXUTSettingsDlg.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUTSettingsDlg.h">
+		</File>
+		<File
+			RelativePath=".\DXUTsound.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUTsound.h">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT_2003.vcproj
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT_2003.vcproj	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT_2003.vcproj	(revision 761)
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="DXUT"
+	ProjectGUID="{E0CF097B-F22D-465B-A884-D89E55BD7ECD}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="Debug"
+			IntermediateDirectory="Debug"
+			ConfigurationType="4"
+			CharacterSet="1">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
+				MinimalRebuild="TRUE"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				UsePrecompiledHeader="3"
+				PrecompiledHeaderThrough="dxstdafx.h"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="4"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="$(OutDir)/DXUT.lib"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="Release"
+			IntermediateDirectory="Release"
+			ConfigurationType="4"
+			CharacterSet="1">
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+				RuntimeLibrary="0"
+				UsePrecompiledHeader="3"
+				PrecompiledHeaderThrough="dxstdafx.h"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="$(OutDir)/DXUT.lib"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath=".\dxstdafx.cpp">
+			<FileConfiguration
+				Name="Debug|Win32">
+				<Tool
+					Name="VCCLCompilerTool"
+					UsePrecompiledHeader="1"/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Release|Win32">
+				<Tool
+					Name="VCCLCompilerTool"
+					UsePrecompiledHeader="1"/>
+			</FileConfiguration>
+		</File>
+		<File
+			RelativePath=".\dxstdafx.h">
+		</File>
+		<File
+			RelativePath=".\DXUT.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUT.h">
+		</File>
+		<File
+			RelativePath=".\DXUTenum.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUTenum.h">
+		</File>
+		<File
+			RelativePath=".\DXUTgui.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUTgui.h">
+		</File>
+		<File
+			RelativePath=".\DXUTMesh.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUTMesh.h">
+		</File>
+		<File
+			RelativePath=".\DXUTmisc.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUTmisc.h">
+		</File>
+		<File
+			RelativePath=".\DXUTRes.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUTRes.h">
+		</File>
+		<File
+			RelativePath=".\DXUTSettingsDlg.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUTSettingsDlg.h">
+		</File>
+		<File
+			RelativePath=".\DXUTsound.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUTsound.h">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTenum.cpp
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTenum.cpp	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTenum.cpp	(revision 761)
@@ -0,0 +1,897 @@
+//--------------------------------------------------------------------------------------
+// File: DXUTEnum.cpp
+//
+// Enumerates D3D adapters, devices, modes, etc.
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//--------------------------------------------------------------------------------------
+#include "dxstdafx.h"
+#undef min // use __min instead
+#undef max // use __max instead
+
+
+//--------------------------------------------------------------------------------------
+// Forward declarations
+//--------------------------------------------------------------------------------------
+static int __cdecl SortModesCallback( const void* arg1, const void* arg2 );
+UINT DXUTStencilBits( D3DFORMAT fmt );
+UINT DXUTDepthBits( D3DFORMAT fmt );
+UINT DXUTAlphaChannelBits( D3DFORMAT fmt );
+UINT DXUTColorChannelBits( D3DFORMAT fmt );
+CD3DEnumeration* DXUTGetEnumeration()
+{
+    // Using an accessor function gives control of the construction order
+    static CD3DEnumeration d3denum;
+    return &d3denum;
+}
+
+
+//--------------------------------------------------------------------------------------
+CD3DEnumeration::CD3DEnumeration()
+{
+    m_pD3D = NULL;
+    m_IsDeviceAcceptableFunc = NULL;
+    m_pIsDeviceAcceptableFuncUserContext = NULL;
+    m_bRequirePostPixelShaderBlending = true;
+
+    m_nMinWidth = 640;
+    m_nMinHeight = 480;
+    m_nMaxWidth = UINT_MAX;
+    m_nMaxHeight = UINT_MAX;
+
+    m_nRefreshMin = 0;
+    m_nRefreshMax = UINT_MAX;
+
+    m_nMultisampleQualityMax = 0xFFFF;
+
+    ResetPossibleDepthStencilFormats();
+    ResetPossibleMultisampleTypeList();                                   
+    ResetPossiblePresentIntervalList();
+    SetPossibleVertexProcessingList( true, true, true, false );
+}
+
+
+//--------------------------------------------------------------------------------------
+CD3DEnumeration::~CD3DEnumeration()
+{
+    ClearAdapterInfoList();
+}
+
+
+
+//--------------------------------------------------------------------------------------
+// Enumerates available D3D adapters, devices, modes, etc.
+//--------------------------------------------------------------------------------------
+HRESULT CD3DEnumeration::Enumerate( IDirect3D9* pD3D,
+                                    LPDXUTCALLBACKISDEVICEACCEPTABLE IsDeviceAcceptableFunc,
+                                    void* pIsDeviceAcceptableFuncUserContext )
+{
+    if( pD3D == NULL )
+    {
+        pD3D = DXUTGetD3DObject();
+        if( pD3D == NULL )
+            return DXUTERR_NODIRECT3D;
+    }
+
+    m_pD3D = pD3D;
+    m_IsDeviceAcceptableFunc = IsDeviceAcceptableFunc;
+    m_pIsDeviceAcceptableFuncUserContext = pIsDeviceAcceptableFuncUserContext;
+
+    HRESULT hr;
+    ClearAdapterInfoList();
+    CGrowableArray<D3DFORMAT> adapterFormatList;
+
+    const D3DFORMAT allowedAdapterFormatArray[] = 
+    {   
+        D3DFMT_X8R8G8B8, 
+        D3DFMT_X1R5G5B5, 
+        D3DFMT_R5G6B5, 
+        D3DFMT_A2R10G10B10
+    };
+    const UINT allowedAdapterFormatArrayCount  = sizeof(allowedAdapterFormatArray) / sizeof(allowedAdapterFormatArray[0]);
+
+    UINT numAdapters = pD3D->GetAdapterCount();
+    for (UINT adapterOrdinal = 0; adapterOrdinal < numAdapters; adapterOrdinal++)
+    {
+        CD3DEnumAdapterInfo* pAdapterInfo = new CD3DEnumAdapterInfo;
+        if( pAdapterInfo == NULL )
+            return E_OUTOFMEMORY;
+
+        pAdapterInfo->AdapterOrdinal = adapterOrdinal;
+        pD3D->GetAdapterIdentifier(adapterOrdinal, 0, &pAdapterInfo->AdapterIdentifier);
+
+        // Get list of all display modes on this adapter.  
+        // Also build a temporary list of all display adapter formats.
+        adapterFormatList.RemoveAll();
+
+        for( UINT iFormatList = 0; iFormatList < allowedAdapterFormatArrayCount; iFormatList++ )
+        {
+            D3DFORMAT allowedAdapterFormat = allowedAdapterFormatArray[iFormatList];
+            UINT numAdapterModes = pD3D->GetAdapterModeCount( adapterOrdinal, allowedAdapterFormat );
+            for (UINT mode = 0; mode < numAdapterModes; mode++)
+            {
+                D3DDISPLAYMODE displayMode;
+                pD3D->EnumAdapterModes( adapterOrdinal, allowedAdapterFormat, mode, &displayMode );
+
+                if( displayMode.Width < m_nMinWidth ||
+                    displayMode.Height < m_nMinHeight || 
+                    displayMode.Width > m_nMaxWidth ||
+                    displayMode.Height > m_nMaxHeight || 
+                    displayMode.RefreshRate < m_nRefreshMin ||
+                    displayMode.RefreshRate > m_nRefreshMax )
+                {
+                    continue;
+                }
+
+                pAdapterInfo->displayModeList.Add( displayMode );
+                
+                if( !adapterFormatList.Contains(displayMode.Format) )
+                    adapterFormatList.Add( displayMode.Format );
+            }
+
+        }
+
+        D3DDISPLAYMODE displayMode;
+        pD3D->GetAdapterDisplayMode( adapterOrdinal, &displayMode );
+        if( !adapterFormatList.Contains(displayMode.Format) )
+            adapterFormatList.Add( displayMode.Format );
+
+        // Sort displaymode list
+        ::qsort( pAdapterInfo->displayModeList.GetData(), 
+               pAdapterInfo->displayModeList.GetSize(), sizeof( D3DDISPLAYMODE ),
+               SortModesCallback );
+
+        // Get info for each device on this adapter
+        if( FAILED( EnumerateDevices( pAdapterInfo, &adapterFormatList ) ) )
+        {
+            delete pAdapterInfo;
+            continue;
+        }
+
+        // If at least one device on this adapter is available and compatible
+        // with the app, add the adapterInfo to the list
+        if( pAdapterInfo->deviceInfoList.GetSize() > 0 )
+        {
+            hr = m_AdapterInfoList.Add( pAdapterInfo );
+            if( FAILED(hr) )
+                return hr;
+        } else
+            delete pAdapterInfo;
+    }
+
+    bool bUniqueDesc = true;
+    CD3DEnumAdapterInfo* pAdapterInfo;
+    for( int i=0; i<m_AdapterInfoList.GetSize(); i++ )
+    {
+        CD3DEnumAdapterInfo* pAdapterInfo1 = m_AdapterInfoList.GetAt(i);
+
+        for( int j=i+1; j<m_AdapterInfoList.GetSize(); j++ )
+        {
+            CD3DEnumAdapterInfo* pAdapterInfo2 = m_AdapterInfoList.GetAt(j);
+            if( _stricmp( pAdapterInfo1->AdapterIdentifier.Description, 
+                          pAdapterInfo2->AdapterIdentifier.Description ) == 0 )
+            {
+                bUniqueDesc = false;
+                break;
+            }
+        }
+
+        if( !bUniqueDesc )
+            break;
+    }
+
+    for( int i=0; i<m_AdapterInfoList.GetSize(); i++ )
+    {
+        pAdapterInfo = m_AdapterInfoList.GetAt(i);
+
+        MultiByteToWideChar( CP_ACP, 0, 
+                             pAdapterInfo->AdapterIdentifier.Description, -1, 
+                             pAdapterInfo->szUniqueDescription, 100 );
+        pAdapterInfo->szUniqueDescription[100] = 0;
+
+        if( !bUniqueDesc )
+        {
+            WCHAR sz[100];
+            StringCchPrintf( sz, 100, L" (#%d)", pAdapterInfo->AdapterOrdinal );
+            StringCchCat( pAdapterInfo->szUniqueDescription, 256, sz );
+
+        }
+    }
+
+    return S_OK;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+// Enumerates D3D devices for a particular adapter.
+//--------------------------------------------------------------------------------------
+HRESULT CD3DEnumeration::EnumerateDevices( CD3DEnumAdapterInfo* pAdapterInfo, CGrowableArray<D3DFORMAT>* pAdapterFormatList )
+{
+    HRESULT hr;
+
+    const D3DDEVTYPE devTypeArray[] = 
+    { 
+        D3DDEVTYPE_HAL, 
+        D3DDEVTYPE_SW, 
+        D3DDEVTYPE_REF 
+    };
+    const UINT devTypeArrayCount = sizeof(devTypeArray) / sizeof(devTypeArray[0]);
+
+    // Enumerate each Direct3D device type
+    for( UINT iDeviceType = 0; iDeviceType < devTypeArrayCount; iDeviceType++ )
+    {
+        CD3DEnumDeviceInfo* pDeviceInfo = new CD3DEnumDeviceInfo;
+        if( pDeviceInfo == NULL )
+            return E_OUTOFMEMORY;
+
+        // Fill struct w/ AdapterOrdinal and D3DDEVTYPE
+        pDeviceInfo->DeviceType = devTypeArray[iDeviceType];
+
+        // Store device caps
+        if( FAILED( hr = m_pD3D->GetDeviceCaps( pAdapterInfo->AdapterOrdinal, pDeviceInfo->DeviceType, 
+                                                &pDeviceInfo->Caps ) ) )
+        {
+            delete pDeviceInfo;
+            continue;
+        }
+
+        // Create a dummy device to verify that we really can create of this type.
+        D3DDISPLAYMODE Mode;
+        m_pD3D->GetAdapterDisplayMode(0, &Mode);
+        D3DPRESENT_PARAMETERS pp;
+        ZeroMemory( &pp, sizeof(D3DPRESENT_PARAMETERS) );
+        pp.BackBufferWidth  = 1;
+        pp.BackBufferHeight = 1;
+        pp.BackBufferFormat = Mode.Format;
+        pp.BackBufferCount  = 1;
+        pp.SwapEffect       = D3DSWAPEFFECT_COPY;
+        pp.Windowed         = TRUE;
+        pp.hDeviceWindow    = DXUTGetHWNDFocus();
+        IDirect3DDevice9 *pDevice;
+        if( FAILED( hr = m_pD3D->CreateDevice( pAdapterInfo->AdapterOrdinal, pDeviceInfo->DeviceType, DXUTGetHWNDFocus(),
+                                          D3DCREATE_HARDWARE_VERTEXPROCESSING, &pp, &pDevice ) ) )
+        {
+            if( hr == D3DERR_NOTAVAILABLE )
+            {
+                delete pDeviceInfo;
+                continue;
+            }
+        }
+        SAFE_RELEASE( pDevice );
+
+        // Get info for each devicecombo on this device
+        if( FAILED( hr = EnumerateDeviceCombos( pAdapterInfo, pDeviceInfo, pAdapterFormatList ) ) )
+        {
+            delete pDeviceInfo;
+            continue;
+        }
+
+        // If at least one devicecombo for this device is found, 
+        // add the deviceInfo to the list
+        if (pDeviceInfo->deviceSettingsComboList.GetSize() > 0 )
+            pAdapterInfo->deviceInfoList.Add( pDeviceInfo );
+        else
+            delete pDeviceInfo;
+    }
+
+    return S_OK;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+// Enumerates DeviceCombos for a particular device.
+//--------------------------------------------------------------------------------------
+HRESULT CD3DEnumeration::EnumerateDeviceCombos( CD3DEnumAdapterInfo* pAdapterInfo, CD3DEnumDeviceInfo* pDeviceInfo, CGrowableArray<D3DFORMAT>* pAdapterFormatList )
+{
+    const D3DFORMAT backBufferFormatArray[] = 
+    {   
+        D3DFMT_A8R8G8B8, 
+        D3DFMT_X8R8G8B8, 
+        D3DFMT_A2R10G10B10, 
+        D3DFMT_R5G6B5, 
+        D3DFMT_A1R5G5B5, 
+        D3DFMT_X1R5G5B5 
+    };
+    const UINT backBufferFormatArrayCount = sizeof(backBufferFormatArray) / sizeof(backBufferFormatArray[0]);
+
+    // See which adapter formats are supported by this device
+    for( int iFormat=0; iFormat<pAdapterFormatList->GetSize(); iFormat++ )
+    {
+        D3DFORMAT adapterFormat = pAdapterFormatList->GetAt(iFormat);
+
+        for( UINT iBackBufferFormat = 0; iBackBufferFormat < backBufferFormatArrayCount; iBackBufferFormat++ )
+        {
+            D3DFORMAT backBufferFormat = backBufferFormatArray[iBackBufferFormat];
+
+            for( int nWindowed = 0; nWindowed < 2; nWindowed++)
+            {
+                if( !nWindowed && pAdapterInfo->displayModeList.GetSize() == 0 )
+                    continue;
+
+                if (FAILED( m_pD3D->CheckDeviceType( pAdapterInfo->AdapterOrdinal, pDeviceInfo->DeviceType, 
+                                                     adapterFormat, backBufferFormat, nWindowed )))
+                {
+                    continue;
+                }
+
+                if( m_bRequirePostPixelShaderBlending )
+                {
+                    // If the backbuffer format doesn't support D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING
+                    // then alpha test, pixel fog, render-target blending, color write enable, and dithering. 
+                    // are not supported.
+                    if( FAILED( m_pD3D->CheckDeviceFormat( pAdapterInfo->AdapterOrdinal, pDeviceInfo->DeviceType,
+                                                           adapterFormat, D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING, 
+                                                           D3DRTYPE_TEXTURE, backBufferFormat ) ) )
+                    {
+                        continue;
+                    }
+                }
+
+                // If an application callback function has been provided, make sure this device
+                // is acceptable to the app.
+                if( m_IsDeviceAcceptableFunc != NULL )
+                {
+                    if( !m_IsDeviceAcceptableFunc( &pDeviceInfo->Caps, adapterFormat, backBufferFormat, FALSE != nWindowed, m_pIsDeviceAcceptableFuncUserContext ) )
+                        continue;
+                }
+                
+                // At this point, we have an adapter/device/adapterformat/backbufferformat/iswindowed
+                // DeviceCombo that is supported by the system and acceptable to the app. We still 
+                // need to find one or more suitable depth/stencil buffer format,
+                // multisample type, and present interval.
+                CD3DEnumDeviceSettingsCombo* pDeviceCombo = new CD3DEnumDeviceSettingsCombo;
+                if( pDeviceCombo == NULL )
+                    return E_OUTOFMEMORY;
+
+                pDeviceCombo->AdapterOrdinal = pAdapterInfo->AdapterOrdinal;
+                pDeviceCombo->DeviceType = pDeviceInfo->DeviceType;
+                pDeviceCombo->AdapterFormat = adapterFormat;
+                pDeviceCombo->BackBufferFormat = backBufferFormat;
+                pDeviceCombo->Windowed = (nWindowed != 0);
+               
+                BuildDepthStencilFormatList( pDeviceCombo );
+                BuildMultiSampleTypeList( pDeviceCombo );
+                if (pDeviceCombo->multiSampleTypeList.GetSize() == 0)
+                {
+                    delete pDeviceCombo;
+                    continue;
+                }
+                BuildDSMSConflictList( pDeviceCombo );
+                BuildPresentIntervalList(pDeviceInfo, pDeviceCombo );
+                pDeviceCombo->pAdapterInfo = pAdapterInfo;
+                pDeviceCombo->pDeviceInfo = pDeviceInfo;
+
+                pDeviceInfo->deviceSettingsComboList.Add( pDeviceCombo );
+            
+            }
+        }
+    }
+
+    return S_OK;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+// Adds all depth/stencil formats that are compatible with the device 
+//       and app to the given D3DDeviceCombo.
+//--------------------------------------------------------------------------------------
+void CD3DEnumeration::BuildDepthStencilFormatList( CD3DEnumDeviceSettingsCombo* pDeviceCombo )
+{
+    D3DFORMAT depthStencilFmt;
+    for( int idsf = 0; idsf < m_DepthStecilPossibleList.GetSize(); idsf++ )
+    {
+        depthStencilFmt = m_DepthStecilPossibleList.GetAt(idsf);
+        if (SUCCEEDED(m_pD3D->CheckDeviceFormat(pDeviceCombo->AdapterOrdinal, 
+                pDeviceCombo->DeviceType, pDeviceCombo->AdapterFormat, 
+                D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_SURFACE, depthStencilFmt)))
+        {
+            if (SUCCEEDED(m_pD3D->CheckDepthStencilMatch(pDeviceCombo->AdapterOrdinal, 
+                    pDeviceCombo->DeviceType, pDeviceCombo->AdapterFormat, 
+                    pDeviceCombo->BackBufferFormat, depthStencilFmt)))
+            {
+                pDeviceCombo->depthStencilFormatList.Add( depthStencilFmt );
+            }
+        }
+    }
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+// Adds all multisample types that are compatible with the device and app to
+//       the given D3DDeviceCombo.
+//--------------------------------------------------------------------------------------
+void CD3DEnumeration::BuildMultiSampleTypeList( CD3DEnumDeviceSettingsCombo* pDeviceCombo )
+{
+    D3DMULTISAMPLE_TYPE msType;
+    DWORD msQuality;
+    for( int imst = 0; imst < m_MultiSampleTypeList.GetSize(); imst++ )
+    {
+        msType = m_MultiSampleTypeList.GetAt(imst);
+        if( SUCCEEDED( m_pD3D->CheckDeviceMultiSampleType( pDeviceCombo->AdapterOrdinal, 
+                pDeviceCombo->DeviceType, pDeviceCombo->BackBufferFormat, 
+                pDeviceCombo->Windowed, msType, &msQuality ) ) )
+        {
+            pDeviceCombo->multiSampleTypeList.Add( msType );
+            if( msQuality > m_nMultisampleQualityMax+1 )
+                msQuality = m_nMultisampleQualityMax+1;
+            pDeviceCombo->multiSampleQualityList.Add( msQuality );
+        }
+    }
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+// Find any conflicts between the available depth/stencil formats and
+//       multisample types.
+//--------------------------------------------------------------------------------------
+void CD3DEnumeration::BuildDSMSConflictList( CD3DEnumDeviceSettingsCombo* pDeviceCombo )
+{
+    CD3DEnumDSMSConflict DSMSConflict;
+
+    for( int iDS=0; iDS<pDeviceCombo->depthStencilFormatList.GetSize(); iDS++ )
+    {
+        D3DFORMAT dsFmt = pDeviceCombo->depthStencilFormatList.GetAt(iDS);
+
+        for( int iMS=0; iMS<pDeviceCombo->multiSampleTypeList.GetSize(); iMS++ )
+        {
+            D3DMULTISAMPLE_TYPE msType = pDeviceCombo->multiSampleTypeList.GetAt(iMS);
+
+            if( FAILED( m_pD3D->CheckDeviceMultiSampleType( pDeviceCombo->AdapterOrdinal, pDeviceCombo->DeviceType,
+                                                            dsFmt, pDeviceCombo->Windowed, msType, NULL ) ) )
+            {
+                DSMSConflict.DSFormat = dsFmt;
+                DSMSConflict.MSType = msType;
+                pDeviceCombo->DSMSConflictList.Add( DSMSConflict );
+            }
+        }
+    }
+}
+
+
+
+//--------------------------------------------------------------------------------------
+// Adds all present intervals that are compatible with the device and app 
+//       to the given D3DDeviceCombo.
+//--------------------------------------------------------------------------------------
+void CD3DEnumeration::BuildPresentIntervalList( CD3DEnumDeviceInfo* pDeviceInfo, 
+                                                CD3DEnumDeviceSettingsCombo* pDeviceCombo )
+{
+    UINT pi;
+    for( int ipi = 0; ipi < m_PresentIntervalList.GetSize(); ipi++ )
+    {
+        pi = m_PresentIntervalList.GetAt(ipi);
+        if( pDeviceCombo->Windowed )
+        {
+            if( pi == D3DPRESENT_INTERVAL_TWO ||
+                pi == D3DPRESENT_INTERVAL_THREE ||
+                pi == D3DPRESENT_INTERVAL_FOUR )
+            {
+                // These intervals are not supported in windowed mode.
+                continue;
+            }
+        }
+        // Note that D3DPRESENT_INTERVAL_DEFAULT is zero, so you
+        // can't do a caps check for it -- it is always available.
+        if( pi == D3DPRESENT_INTERVAL_DEFAULT ||
+            (pDeviceInfo->Caps.PresentationIntervals & pi) )
+        {
+            pDeviceCombo->presentIntervalList.Add( pi );
+        }
+    }
+}
+
+
+
+//--------------------------------------------------------------------------------------
+// Release all the allocated CD3DEnumAdapterInfo objects and empty the list
+//--------------------------------------------------------------------------------------
+void CD3DEnumeration::ClearAdapterInfoList()
+{
+    CD3DEnumAdapterInfo* pAdapterInfo;
+    for( int i=0; i<m_AdapterInfoList.GetSize(); i++ )
+    {
+        pAdapterInfo = m_AdapterInfoList.GetAt(i);
+        delete pAdapterInfo;
+    }
+
+    m_AdapterInfoList.RemoveAll();
+}
+
+
+
+//--------------------------------------------------------------------------------------
+// Call GetAdapterInfoList() after Enumerate() to get a STL vector of 
+//       CD3DEnumAdapterInfo* 
+//--------------------------------------------------------------------------------------
+CGrowableArray<CD3DEnumAdapterInfo*>* CD3DEnumeration::GetAdapterInfoList()
+{
+    return &m_AdapterInfoList;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+CD3DEnumAdapterInfo* CD3DEnumeration::GetAdapterInfo( UINT AdapterOrdinal )
+{
+    for( int iAdapter=0; iAdapter<m_AdapterInfoList.GetSize(); iAdapter++ )
+    {
+        CD3DEnumAdapterInfo* pAdapterInfo = m_AdapterInfoList.GetAt(iAdapter);
+        if( pAdapterInfo->AdapterOrdinal == AdapterOrdinal )
+            return pAdapterInfo;
+    }
+
+    return NULL;
+}
+
+
+//--------------------------------------------------------------------------------------
+CD3DEnumDeviceInfo* CD3DEnumeration::GetDeviceInfo( UINT AdapterOrdinal, D3DDEVTYPE DeviceType )
+{
+    CD3DEnumAdapterInfo* pAdapterInfo = GetAdapterInfo( AdapterOrdinal );
+    if( pAdapterInfo )
+    {
+        for( int iDeviceInfo=0; iDeviceInfo<pAdapterInfo->deviceInfoList.GetSize(); iDeviceInfo++ )
+        {
+            CD3DEnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt(iDeviceInfo);
+            if( pDeviceInfo->DeviceType == DeviceType )
+                return pDeviceInfo;
+        }
+    }
+
+    return NULL;
+}
+
+
+//--------------------------------------------------------------------------------------
+// 
+//--------------------------------------------------------------------------------------
+CD3DEnumDeviceSettingsCombo* CD3DEnumeration::GetDeviceSettingsCombo( UINT AdapterOrdinal, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed )
+{
+    CD3DEnumDeviceInfo* pDeviceInfo = GetDeviceInfo( AdapterOrdinal, DeviceType );
+    if( pDeviceInfo )
+    {
+        for( int iDeviceCombo=0; iDeviceCombo<pDeviceInfo->deviceSettingsComboList.GetSize(); iDeviceCombo++ )
+        {
+            CD3DEnumDeviceSettingsCombo* pDeviceSettingsCombo = pDeviceInfo->deviceSettingsComboList.GetAt(iDeviceCombo);
+            if( pDeviceSettingsCombo->AdapterFormat == AdapterFormat &&
+                pDeviceSettingsCombo->BackBufferFormat == BackBufferFormat &&
+                pDeviceSettingsCombo->Windowed == bWindowed )
+                return pDeviceSettingsCombo;
+        }
+    }
+
+    return NULL;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Returns the number of color channel bits in the specified D3DFORMAT
+//--------------------------------------------------------------------------------------
+UINT DXUTColorChannelBits( D3DFORMAT fmt )
+{
+    switch( fmt )
+    {
+        case D3DFMT_R8G8B8:
+            return 8;
+        case D3DFMT_A8R8G8B8:
+            return 8;
+        case D3DFMT_X8R8G8B8:
+            return 8;
+        case D3DFMT_R5G6B5:
+            return 5;
+        case D3DFMT_X1R5G5B5:
+            return 5;
+        case D3DFMT_A1R5G5B5:
+            return 5;
+        case D3DFMT_A4R4G4B4:
+            return 4;
+        case D3DFMT_R3G3B2:
+            return 2;
+        case D3DFMT_A8R3G3B2:
+            return 2;
+        case D3DFMT_X4R4G4B4:
+            return 4;
+        case D3DFMT_A2B10G10R10:
+            return 10;
+        case D3DFMT_A8B8G8R8:
+            return 8;
+        case D3DFMT_A2R10G10B10:
+            return 10;
+        case D3DFMT_A16B16G16R16:
+            return 16;
+        default:
+            return 0;
+    }
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+// Returns the number of alpha channel bits in the specified D3DFORMAT
+//--------------------------------------------------------------------------------------
+UINT DXUTAlphaChannelBits( D3DFORMAT fmt )
+{
+    switch( fmt )
+    {
+        case D3DFMT_R8G8B8:
+            return 0;
+        case D3DFMT_A8R8G8B8:
+            return 8;
+        case D3DFMT_X8R8G8B8:
+            return 0;
+        case D3DFMT_R5G6B5:
+            return 0;
+        case D3DFMT_X1R5G5B5:
+            return 0;
+        case D3DFMT_A1R5G5B5:
+            return 1;
+        case D3DFMT_A4R4G4B4:
+            return 4;
+        case D3DFMT_R3G3B2:
+            return 0;
+        case D3DFMT_A8R3G3B2:
+            return 8;
+        case D3DFMT_X4R4G4B4:
+            return 0;
+        case D3DFMT_A2B10G10R10:
+            return 2;
+        case D3DFMT_A8B8G8R8:
+            return 8;
+        case D3DFMT_A2R10G10B10:
+            return 2;
+        case D3DFMT_A16B16G16R16:
+            return 16;
+        default:
+            return 0;
+    }
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+// Returns the number of depth bits in the specified D3DFORMAT
+//--------------------------------------------------------------------------------------
+UINT DXUTDepthBits( D3DFORMAT fmt )
+{
+    switch( fmt )
+    {
+        case D3DFMT_D32F_LOCKABLE:
+        case D3DFMT_D32:
+            return 32;
+
+        case D3DFMT_D24X8:
+        case D3DFMT_D24S8:
+        case D3DFMT_D24X4S4:
+        case D3DFMT_D24FS8:
+            return 24;
+
+        case D3DFMT_D16_LOCKABLE:
+        case D3DFMT_D16:
+            return 16;
+
+        case D3DFMT_D15S1:
+            return 15;
+
+        default:
+            return 0;
+    }
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+// Returns the number of stencil bits in the specified D3DFORMAT
+//--------------------------------------------------------------------------------------
+UINT DXUTStencilBits( D3DFORMAT fmt )
+{
+    switch( fmt )
+    {
+        case D3DFMT_D16_LOCKABLE:
+        case D3DFMT_D16:
+        case D3DFMT_D32F_LOCKABLE:
+        case D3DFMT_D32:
+        case D3DFMT_D24X8:
+            return 0;
+
+        case D3DFMT_D15S1:
+            return 1;
+
+        case D3DFMT_D24X4S4:
+            return 4;
+
+        case D3DFMT_D24S8:
+        case D3DFMT_D24FS8:
+            return 8;
+
+        default:
+            return 0;
+    }
+}
+
+
+
+//--------------------------------------------------------------------------------------
+// Used to sort D3DDISPLAYMODEs
+//--------------------------------------------------------------------------------------
+static int __cdecl SortModesCallback( const void* arg1, const void* arg2 )
+{
+    D3DDISPLAYMODE* pdm1 = (D3DDISPLAYMODE*)arg1;
+    D3DDISPLAYMODE* pdm2 = (D3DDISPLAYMODE*)arg2;
+
+    if (pdm1->Width > pdm2->Width)
+        return 1;
+    if (pdm1->Width < pdm2->Width)
+        return -1;
+    if (pdm1->Height > pdm2->Height)
+        return 1;
+    if (pdm1->Height < pdm2->Height)
+        return -1;
+    if (pdm1->Format > pdm2->Format)
+        return 1;
+    if (pdm1->Format < pdm2->Format)
+        return -1;
+    if (pdm1->RefreshRate > pdm2->RefreshRate)
+        return 1;
+    if (pdm1->RefreshRate < pdm2->RefreshRate)
+        return -1;
+    return 0;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+CD3DEnumAdapterInfo::~CD3DEnumAdapterInfo( void )
+{
+    CD3DEnumDeviceInfo* pDeviceInfo;
+    for( int i=0; i<deviceInfoList.GetSize(); i++ )
+    {
+        pDeviceInfo = deviceInfoList.GetAt(i);
+        delete pDeviceInfo;
+    }
+    deviceInfoList.RemoveAll();
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+CD3DEnumDeviceInfo::~CD3DEnumDeviceInfo( void )
+{
+    CD3DEnumDeviceSettingsCombo* pDeviceCombo;
+    for( int i=0; i<deviceSettingsComboList.GetSize(); i++ )
+    {
+        pDeviceCombo = deviceSettingsComboList.GetAt(i);
+        delete pDeviceCombo;
+    }
+    deviceSettingsComboList.RemoveAll();
+}
+
+
+//--------------------------------------------------------------------------------------
+void CD3DEnumeration::ResetPossibleDepthStencilFormats()
+{
+    m_DepthStecilPossibleList.RemoveAll();
+    m_DepthStecilPossibleList.Add( D3DFMT_D16 );
+    m_DepthStecilPossibleList.Add( D3DFMT_D15S1 );
+    m_DepthStecilPossibleList.Add( D3DFMT_D24X8 );
+    m_DepthStecilPossibleList.Add( D3DFMT_D24S8 );
+    m_DepthStecilPossibleList.Add( D3DFMT_D24X4S4 );
+    m_DepthStecilPossibleList.Add( D3DFMT_D32 );
+}
+
+
+//--------------------------------------------------------------------------------------
+CGrowableArray<D3DFORMAT>* CD3DEnumeration::GetPossibleDepthStencilFormatList() 
+{
+    return &m_DepthStecilPossibleList;
+}
+
+
+//--------------------------------------------------------------------------------------
+CGrowableArray<D3DMULTISAMPLE_TYPE>* CD3DEnumeration::GetPossibleMultisampleTypeList()
+{
+    return &m_MultiSampleTypeList;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CD3DEnumeration::ResetPossibleMultisampleTypeList()
+{
+    m_MultiSampleTypeList.RemoveAll();
+    m_MultiSampleTypeList.Add( D3DMULTISAMPLE_NONE );
+    m_MultiSampleTypeList.Add( D3DMULTISAMPLE_NONMASKABLE );
+    m_MultiSampleTypeList.Add( D3DMULTISAMPLE_2_SAMPLES );
+    m_MultiSampleTypeList.Add( D3DMULTISAMPLE_3_SAMPLES );
+    m_MultiSampleTypeList.Add( D3DMULTISAMPLE_4_SAMPLES );
+    m_MultiSampleTypeList.Add( D3DMULTISAMPLE_5_SAMPLES );
+    m_MultiSampleTypeList.Add( D3DMULTISAMPLE_6_SAMPLES );
+    m_MultiSampleTypeList.Add( D3DMULTISAMPLE_7_SAMPLES );
+    m_MultiSampleTypeList.Add( D3DMULTISAMPLE_8_SAMPLES );
+    m_MultiSampleTypeList.Add( D3DMULTISAMPLE_9_SAMPLES );
+    m_MultiSampleTypeList.Add( D3DMULTISAMPLE_10_SAMPLES );
+    m_MultiSampleTypeList.Add( D3DMULTISAMPLE_11_SAMPLES );
+    m_MultiSampleTypeList.Add( D3DMULTISAMPLE_12_SAMPLES );
+    m_MultiSampleTypeList.Add( D3DMULTISAMPLE_13_SAMPLES );
+    m_MultiSampleTypeList.Add( D3DMULTISAMPLE_14_SAMPLES );
+    m_MultiSampleTypeList.Add( D3DMULTISAMPLE_15_SAMPLES );
+    m_MultiSampleTypeList.Add( D3DMULTISAMPLE_16_SAMPLES );
+}
+
+
+//--------------------------------------------------------------------------------------
+void CD3DEnumeration::GetPossibleVertexProcessingList( bool* pbSoftwareVP, bool* pbHardwareVP, bool* pbPureHarewareVP, bool* pbMixedVP )
+{
+    *pbSoftwareVP = m_bSoftwareVP;
+    *pbHardwareVP = m_bHardwareVP;
+    *pbPureHarewareVP = m_bPureHarewareVP;
+    *pbMixedVP = m_bMixedVP;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CD3DEnumeration::SetPossibleVertexProcessingList( bool bSoftwareVP, bool bHardwareVP, bool bPureHarewareVP, bool bMixedVP )
+{
+    m_bSoftwareVP = bSoftwareVP;
+    m_bHardwareVP = bHardwareVP;
+    m_bPureHarewareVP = bPureHarewareVP;
+    m_bMixedVP = bMixedVP;
+}
+
+
+//--------------------------------------------------------------------------------------
+CGrowableArray<UINT>* CD3DEnumeration::GetPossiblePresentIntervalList()
+{
+    return &m_PresentIntervalList;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CD3DEnumeration::ResetPossiblePresentIntervalList()
+{
+    m_PresentIntervalList.RemoveAll();
+    m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_IMMEDIATE );
+    m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_DEFAULT );
+    m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_ONE );
+    m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_TWO );
+    m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_THREE );
+    m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_FOUR );
+}
+
+
+//--------------------------------------------------------------------------------------
+void CD3DEnumeration::SetResolutionMinMax( UINT nMinWidth, UINT nMinHeight, 
+                                           UINT nMaxWidth, UINT nMaxHeight )
+{
+    m_nMinWidth = nMinWidth;
+    m_nMinHeight = nMinHeight;
+    m_nMaxWidth = nMaxWidth;
+    m_nMaxHeight = nMaxHeight;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CD3DEnumeration::SetRefreshMinMax( UINT nMin, UINT nMax )
+{
+    m_nRefreshMin = nMin;
+    m_nRefreshMax = nMax;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CD3DEnumeration::SetMultisampleQualityMax( UINT nMax )
+{
+    if( nMax > 0xFFFF )
+        nMax = 0xFFFF;
+    m_nMultisampleQualityMax = nMax;
+}
+
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT_2005.vcproj
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT_2005.vcproj	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT_2005.vcproj	(revision 761)
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="DXUT"
+	ProjectGUID="{E0CF097B-F22D-465B-A884-D89E55BD7ECD}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="Debug"
+			IntermediateDirectory="Debug"
+			ConfigurationType="4"
+			InheritedPropertySheets="UpgradeFromVC71.vsprops"
+			CharacterSet="1">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				UsePrecompiledHeader="3"
+				PrecompiledHeaderThrough="dxstdafx.h"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="$(OutDir)/DXUT.lib"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="Release"
+			IntermediateDirectory="Release"
+			ConfigurationType="4"
+			InheritedPropertySheets="UpgradeFromVC71.vsprops"
+			CharacterSet="1">
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+				RuntimeLibrary="0"
+				UsePrecompiledHeader="3"
+				PrecompiledHeaderThrough="dxstdafx.h"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="$(OutDir)/DXUT.lib"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath=".\dxstdafx.cpp">
+			<FileConfiguration
+				Name="Debug|Win32">
+				<Tool
+					Name="VCCLCompilerTool"
+					UsePrecompiledHeader="1"/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Release|Win32">
+				<Tool
+					Name="VCCLCompilerTool"
+					UsePrecompiledHeader="1"/>
+			</FileConfiguration>
+		</File>
+		<File
+			RelativePath=".\dxstdafx.h">
+		</File>
+		<File
+			RelativePath=".\DXUT.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUT.h">
+		</File>
+		<File
+			RelativePath=".\DXUTenum.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUTenum.h">
+		</File>
+		<File
+			RelativePath=".\DXUTgui.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUTgui.h">
+		</File>
+		<File
+			RelativePath=".\DXUTMesh.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUTMesh.h">
+		</File>
+		<File
+			RelativePath=".\DXUTmisc.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUTmisc.h">
+		</File>
+		<File
+			RelativePath=".\DXUTRes.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUTRes.h">
+		</File>
+		<File
+			RelativePath=".\DXUTSettingsDlg.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUTSettingsDlg.h">
+		</File>
+		<File
+			RelativePath=".\DXUTsound.cpp">
+		</File>
+		<File
+			RelativePath=".\DXUTsound.h">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTenum.h
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTenum.h	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTenum.h	(revision 761)
@@ -0,0 +1,173 @@
+//--------------------------------------------------------------------------------------
+// File: DXUTEnum.h
+//
+// Enumerates D3D adapters, devices, modes, etc.
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//--------------------------------------------------------------------------------------
+#pragma once
+#ifndef DXUT_ENUM_H
+#define DXUT_ENUM_H
+
+//--------------------------------------------------------------------------------------
+// Forward declarations
+//--------------------------------------------------------------------------------------
+class CD3DEnumAdapterInfo;
+class CD3DEnumDeviceInfo;
+struct CD3DEnumDeviceSettingsCombo;
+struct CD3DEnumDSMSConflict;
+
+
+//--------------------------------------------------------------------------------------
+// Enumerates available Direct3D adapters, devices, modes, etc.
+// Use DXUTGetEnumeration() to access global instance
+//--------------------------------------------------------------------------------------
+class CD3DEnumeration
+{
+public:
+    // These should be called before Enumerate(). 
+    //
+    // Use these calls and the IsDeviceAcceptable to control the contents of 
+    // the enumeration object, which affects the device selection and the device settings dialog.
+    void SetRequirePostPixelShaderBlending( bool bRequire ) { m_bRequirePostPixelShaderBlending = bRequire; }
+    void SetResolutionMinMax( UINT nMinWidth, UINT nMinHeight, UINT nMaxWidth, UINT nMaxHeight );  
+    void SetRefreshMinMax( UINT nMin, UINT nMax );
+    void SetMultisampleQualityMax( UINT nMax );    
+    void GetPossibleVertexProcessingList( bool* pbSoftwareVP, bool* pbHardwareVP, bool* pbPureHarewareVP, bool* pbMixedVP );
+    void SetPossibleVertexProcessingList( bool bSoftwareVP, bool bHardwareVP, bool bPureHarewareVP, bool bMixedVP );
+    CGrowableArray<D3DFORMAT>* GetPossibleDepthStencilFormatList();   
+    CGrowableArray<D3DMULTISAMPLE_TYPE>* GetPossibleMultisampleTypeList();   
+    CGrowableArray<UINT>* GetPossiblePresentIntervalList();
+    void ResetPossibleDepthStencilFormats();
+    void ResetPossibleMultisampleTypeList();
+    void ResetPossiblePresentIntervalList();
+
+    // Call Enumerate() to enumerate available D3D adapters, devices, modes, etc.
+    HRESULT Enumerate( IDirect3D9* pD3D = NULL,
+                       LPDXUTCALLBACKISDEVICEACCEPTABLE IsDeviceAcceptableFunc = NULL,
+                       void* pIsDeviceAcceptableFuncUserContext = NULL );
+
+    // These should be called after Enumerate() is called
+    CGrowableArray<CD3DEnumAdapterInfo*>*   GetAdapterInfoList();  
+    CD3DEnumAdapterInfo*                    GetAdapterInfo( UINT AdapterOrdinal );  
+    CD3DEnumDeviceInfo*                     GetDeviceInfo( UINT AdapterOrdinal, D3DDEVTYPE DeviceType );    
+    CD3DEnumDeviceSettingsCombo*            GetDeviceSettingsCombo( DXUTDeviceSettings* pDeviceSettings ) { return GetDeviceSettingsCombo( pDeviceSettings->AdapterOrdinal, pDeviceSettings->DeviceType, pDeviceSettings->AdapterFormat, pDeviceSettings->pp.BackBufferFormat, pDeviceSettings->pp.Windowed ); }
+    CD3DEnumDeviceSettingsCombo*            GetDeviceSettingsCombo( UINT AdapterOrdinal, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, BOOL Windowed );  
+
+    ~CD3DEnumeration();
+
+private:
+    friend CD3DEnumeration* DXUTGetEnumeration(); 
+
+    // Use DXUTGetEnumeration() to access global instance
+    CD3DEnumeration();
+
+    IDirect3D9* m_pD3D;                                    
+    LPDXUTCALLBACKISDEVICEACCEPTABLE m_IsDeviceAcceptableFunc;
+    void* m_pIsDeviceAcceptableFuncUserContext;
+    bool m_bRequirePostPixelShaderBlending;
+    CGrowableArray<D3DFORMAT> m_DepthStecilPossibleList;
+    CGrowableArray<D3DMULTISAMPLE_TYPE> m_MultiSampleTypeList;
+    CGrowableArray<UINT> m_PresentIntervalList;
+
+    bool m_bSoftwareVP;
+    bool m_bHardwareVP;
+    bool m_bPureHarewareVP;
+    bool m_bMixedVP;
+
+    UINT m_nMinWidth;
+    UINT m_nMaxWidth;
+    UINT m_nMinHeight;
+    UINT m_nMaxHeight;
+    UINT m_nRefreshMin;
+    UINT m_nRefreshMax;
+    UINT m_nMultisampleQualityMax;
+
+    // Array of CD3DEnumAdapterInfo* with unique AdapterOrdinals
+    CGrowableArray<CD3DEnumAdapterInfo*> m_AdapterInfoList;  
+
+    HRESULT EnumerateDevices( CD3DEnumAdapterInfo* pAdapterInfo, CGrowableArray<D3DFORMAT>* pAdapterFormatList );
+    HRESULT EnumerateDeviceCombos( CD3DEnumAdapterInfo* pAdapterInfo, CD3DEnumDeviceInfo* pDeviceInfo, CGrowableArray<D3DFORMAT>* pAdapterFormatList );
+    void BuildDepthStencilFormatList( CD3DEnumDeviceSettingsCombo* pDeviceCombo );
+    void BuildMultiSampleTypeList( CD3DEnumDeviceSettingsCombo* pDeviceCombo );
+    void BuildDSMSConflictList( CD3DEnumDeviceSettingsCombo* pDeviceCombo );
+    void BuildPresentIntervalList( CD3DEnumDeviceInfo* pDeviceInfo, CD3DEnumDeviceSettingsCombo* pDeviceCombo );
+    void ClearAdapterInfoList();
+};
+
+CD3DEnumeration* DXUTGetEnumeration(); 
+
+
+//--------------------------------------------------------------------------------------
+// A class describing an adapter which contains a unique adapter ordinal 
+// that is installed on the system
+//--------------------------------------------------------------------------------------
+class CD3DEnumAdapterInfo
+{
+public:
+    ~CD3DEnumAdapterInfo();
+
+    UINT AdapterOrdinal;
+    D3DADAPTER_IDENTIFIER9 AdapterIdentifier;
+    WCHAR szUniqueDescription[256];
+
+    CGrowableArray<D3DDISPLAYMODE> displayModeList; // Array of supported D3DDISPLAYMODEs
+    CGrowableArray<CD3DEnumDeviceInfo*> deviceInfoList; // Array of CD3DEnumDeviceInfo* with unique supported DeviceTypes
+};
+
+
+//--------------------------------------------------------------------------------------
+// A class describing a Direct3D device that contains a 
+//       unique supported device type 
+//--------------------------------------------------------------------------------------
+class CD3DEnumDeviceInfo
+{
+public:
+    ~CD3DEnumDeviceInfo();
+
+    UINT AdapterOrdinal;
+    D3DDEVTYPE DeviceType;
+    D3DCAPS9 Caps;
+
+    // List of CD3DEnumDeviceSettingsCombo* with a unique set 
+    // of AdapterFormat, BackBufferFormat, and Windowed
+    CGrowableArray<CD3DEnumDeviceSettingsCombo*> deviceSettingsComboList; 
+};
+
+
+//--------------------------------------------------------------------------------------
+// A struct describing device settings that contains a unique combination of 
+// adapter format, back buffer format, and windowed that is compatible with a 
+// particular Direct3D device and the app.
+//--------------------------------------------------------------------------------------
+struct CD3DEnumDeviceSettingsCombo
+{
+    UINT AdapterOrdinal;
+    D3DDEVTYPE DeviceType;
+    D3DFORMAT AdapterFormat;
+    D3DFORMAT BackBufferFormat;
+    BOOL Windowed;
+
+    CGrowableArray<D3DFORMAT> depthStencilFormatList; // List of D3DFORMATs
+    CGrowableArray<D3DMULTISAMPLE_TYPE> multiSampleTypeList; // List of D3DMULTISAMPLE_TYPEs
+    CGrowableArray<DWORD> multiSampleQualityList; // List of number of quality levels for each multisample type
+    CGrowableArray<UINT> presentIntervalList; // List of D3DPRESENT flags
+    CGrowableArray<CD3DEnumDSMSConflict> DSMSConflictList; // List of CD3DEnumDSMSConflict
+
+    CD3DEnumAdapterInfo* pAdapterInfo;
+    CD3DEnumDeviceInfo* pDeviceInfo;
+};
+
+
+//--------------------------------------------------------------------------------------
+// A depth/stencil buffer format that is incompatible with a
+// multisample type.
+//--------------------------------------------------------------------------------------
+struct CD3DEnumDSMSConflict
+{
+    D3DFORMAT DSFormat;
+    D3DMULTISAMPLE_TYPE MSType;
+};
+
+
+#endif
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT.cpp
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT.cpp	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT.cpp	(revision 761)
@@ -0,0 +1,5151 @@
+//--------------------------------------------------------------------------------------
+// File: DXUT.cpp
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//--------------------------------------------------------------------------------------
+#include "dxstdafx.h"
+#define DXUT_MIN_WINDOW_SIZE_X 200
+#define DXUT_MIN_WINDOW_SIZE_Y 200
+#undef min // use __min instead inside this source file
+#undef max // use __max instead inside this source file
+
+
+//--------------------------------------------------------------------------------------
+// Thread safety 
+//--------------------------------------------------------------------------------------
+CRITICAL_SECTION g_cs;  
+bool g_bThreadSafe = true;
+
+
+//--------------------------------------------------------------------------------------
+// Automatically enters & leaves the CS upon object creation/deletion
+//--------------------------------------------------------------------------------------
+class DXUTLock
+{
+public:
+    inline DXUTLock()  { if( g_bThreadSafe ) EnterCriticalSection( &g_cs ); }
+    inline ~DXUTLock() { if( g_bThreadSafe ) LeaveCriticalSection( &g_cs ); }
+};
+
+
+
+//--------------------------------------------------------------------------------------
+// Helper macros to build member functions that access member variables with thread safety
+//--------------------------------------------------------------------------------------
+#define SET_ACCESSOR( x, y )       inline void Set##y( x t )  { DXUTLock l; m_state.m_##y = t; };
+#define GET_ACCESSOR( x, y )       inline x Get##y() { DXUTLock l; return m_state.m_##y; };
+#define GET_SET_ACCESSOR( x, y )   SET_ACCESSOR( x, y ) GET_ACCESSOR( x, y )
+
+#define SETP_ACCESSOR( x, y )      inline void Set##y( x* t )  { DXUTLock l; m_state.m_##y = *t; };
+#define GETP_ACCESSOR( x, y )      inline x* Get##y() { DXUTLock l; return &m_state.m_##y; };
+#define GETP_SETP_ACCESSOR( x, y ) SETP_ACCESSOR( x, y ) GETP_ACCESSOR( x, y )
+
+
+//--------------------------------------------------------------------------------------
+// Stores timer callback info
+//--------------------------------------------------------------------------------------
+struct DXUT_TIMER
+{
+    LPDXUTCALLBACKTIMER pCallbackTimer;
+    void* pCallbackUserContext;
+    float fTimeoutInSecs;
+    float fCountdown;
+    bool  bEnabled;
+};
+
+
+//--------------------------------------------------------------------------------------
+// Stores DXUT state and data access is done with thread safety (if g_bThreadSafe==true)
+//--------------------------------------------------------------------------------------
+class DXUTState
+{
+protected:
+    struct STATE
+    {
+        IDirect3D9*          m_D3D;                     // the main D3D object
+
+        IDirect3DDevice9*    m_D3DDevice;               // the D3D rendering device
+        CD3DEnumeration*     m_D3DEnumeration;          // CD3DEnumeration object
+
+        DXUTDeviceSettings*  m_CurrentDeviceSettings;   // current device settings
+        D3DSURFACE_DESC      m_BackBufferSurfaceDesc;   // back buffer surface description
+        D3DCAPS9             m_Caps;                    // D3D caps for current device
+
+        HWND  m_HWNDFocus;                  // the main app focus window
+        HWND  m_HWNDDeviceFullScreen;       // the main app device window in fullscreen mode
+        HWND  m_HWNDDeviceWindowed;         // the main app device window in windowed mode
+        HMONITOR m_AdapterMonitor;          // the monitor of the adapter 
+        HMENU m_Menu;                       // handle to menu
+
+        UINT m_FullScreenBackBufferWidthAtModeChange;  // back buffer size of fullscreen mode right before switching to windowed mode.  Used to restore to same resolution when toggling back to fullscreen
+        UINT m_FullScreenBackBufferHeightAtModeChange; // back buffer size of fullscreen mode right before switching to windowed mode.  Used to restore to same resolution when toggling back to fullscreen
+        UINT m_WindowBackBufferWidthAtModeChange;  // back buffer size of windowed mode right before switching to fullscreen mode.  Used to restore to same resolution when toggling back to windowed mode
+        UINT m_WindowBackBufferHeightAtModeChange; // back buffer size of windowed mode right before switching to fullscreen mode.  Used to restore to same resolution when toggling back to windowed mode
+        DWORD m_WindowedStyleAtModeChange;  // window style
+        WINDOWPLACEMENT m_WindowedPlacement; // record of windowed HWND position/show state/etc
+        bool  m_TopmostWhileWindowed;       // if true, the windowed HWND is topmost 
+        bool  m_Minimized;                  // if true, the HWND is minimized
+        bool  m_Maximized;                  // if true, the HWND is maximized
+        bool  m_MinimizedWhileFullscreen;   // if true, the HWND is minimized due to a focus switch away when fullscreen mode
+        bool  m_IgnoreSizeChange;           // if true, DXUT won't reset the device upon HWND size change
+
+        double m_Time;                      // current time in seconds
+        float m_ElapsedTime;                // time elapsed since last frame
+
+        HINSTANCE m_HInstance;              // handle to the app instance
+        double m_LastStatsUpdateTime;       // last time the stats were updated
+        DWORD m_LastStatsUpdateFrames;      // frames count since last time the stats were updated
+        float m_FPS;                        // frames per second
+        int   m_CurrentFrameNumber;         // the current frame number
+        HHOOK m_KeyboardHook;               // handle to keyboard hook
+        bool  m_AllowShortcutKeysWhenFullscreen; // if true, when fullscreen enable shortcut keys (Windows keys, StickyKeys shortcut, ToggleKeys shortcut, FilterKeys shortcut) 
+        bool  m_AllowShortcutKeysWhenWindowed;   // if true, when windowed enable shortcut keys (Windows keys, StickyKeys shortcut, ToggleKeys shortcut, FilterKeys shortcut) 
+        bool  m_AllowShortcutKeys;          // if true, then shortcut keys are currently disabled (Windows key, etc)
+        bool  m_CallDefWindowProc;          // if true, DXUTStaticWndProc will call DefWindowProc for unhandled messages. Applications rendering to a dialog may need to set this to false.
+        STICKYKEYS m_StartupStickyKeys;     // StickyKey settings upon startup so they can be restored later
+        TOGGLEKEYS m_StartupToggleKeys;     // ToggleKey settings upon startup so they can be restored later
+        FILTERKEYS m_StartupFilterKeys;     // FilterKey settings upon startup so they can be restored later
+
+        bool  m_HandleDefaultHotkeys;       // if true, then DXUT will handle some default hotkeys
+        bool  m_HandleAltEnter;             // if true, then DXUT will handle Alt-Enter
+        bool  m_ShowMsgBoxOnError;          // if true, then msgboxes are displayed upon errors
+        bool  m_NoStats;                    // if true, then DXUTGetFrameStats() and DXUTGetDeviceStats() will return blank strings
+        bool  m_ClipCursorWhenFullScreen;   // if true, then DXUT will keep the cursor from going outside the window when full screen
+        bool  m_ShowCursorWhenFullScreen;   // if true, then DXUT will show a cursor when full screen
+        bool  m_ConstantFrameTime;          // if true, then elapsed frame time will always be 0.05f seconds which is good for debugging or automated capture
+        float m_TimePerFrame;               // the constant time per frame in seconds, only valid if m_ConstantFrameTime==true
+        bool  m_WireframeMode;              // if true, then D3DRS_FILLMODE==D3DFILL_WIREFRAME else D3DRS_FILLMODE==D3DFILL_SOLID 
+        bool  m_AutoChangeAdapter;          // if true, then the adapter will automatically change if the window is different monitor
+        bool  m_WindowCreatedWithDefaultPositions; // if true, then CW_USEDEFAULT was used and the window should be moved to the right adapter
+        int   m_ExitCode;                   // the exit code to be returned to the command line
+
+        bool  m_DXUTInited;                 // if true, then DXUTInit() has succeeded
+        bool  m_WindowCreated;              // if true, then DXUTCreateWindow() or DXUTSetWindow() has succeeded
+        bool  m_DeviceCreated;              // if true, then DXUTCreateDevice*() or DXUTSetDevice() has succeeded
+
+        bool  m_DXUTInitCalled;             // if true, then DXUTInit() was called
+        bool  m_WindowCreateCalled;         // if true, then DXUTCreateWindow() or DXUTSetWindow() was called
+        bool  m_DeviceCreateCalled;         // if true, then DXUTCreateDevice*() or DXUTSetDevice() was called
+
+        bool  m_DeviceObjectsCreated;       // if true, then DeviceCreated callback has been called (if non-NULL)
+        bool  m_DeviceObjectsReset;         // if true, then DeviceReset callback has been called (if non-NULL)
+        bool  m_InsideDeviceCallback;       // if true, then the framework is inside an app device callback
+        bool  m_InsideMainloop;             // if true, then the framework is inside the main loop
+        bool  m_Active;                     // if true, then the app is the active top level window
+        bool  m_TimePaused;                 // if true, then time is paused
+        bool  m_RenderingPaused;            // if true, then rendering is paused
+        int   m_PauseRenderingCount;        // pause rendering ref count
+        int   m_PauseTimeCount;             // pause time ref count
+        bool  m_DeviceLost;                 // if true, then the device is lost and needs to be reset
+        bool  m_NotifyOnMouseMove;          // if true, include WM_MOUSEMOVE in mousecallback
+        bool  m_Automation;                 // if true, automation is enabled
+        bool  m_InSizeMove;                 // if true, app is inside a WM_ENTERSIZEMOVE
+
+        int   m_OverrideAdapterOrdinal;     // if != -1, then override to use this adapter ordinal
+        bool  m_OverrideWindowed;           // if true, then force to start windowed
+        bool  m_OverrideFullScreen;         // if true, then force to start full screen
+        int   m_OverrideStartX;             // if != -1, then override to this X position of the window
+        int   m_OverrideStartY;             // if != -1, then override to this Y position of the window
+        int   m_OverrideWidth;              // if != 0, then override to this width
+        int   m_OverrideHeight;             // if != 0, then override to this height
+        bool  m_OverrideForceHAL;           // if true, then force to HAL device (failing if one doesn't exist)
+        bool  m_OverrideForceREF;           // if true, then force to REF device (failing if one doesn't exist)
+        bool  m_OverrideForcePureHWVP;      // if true, then force to use pure HWVP (failing if device doesn't support it)
+        bool  m_OverrideForceHWVP;          // if true, then force to use HWVP (failing if device doesn't support it)
+        bool  m_OverrideForceSWVP;          // if true, then force to use SWVP 
+        bool  m_OverrideConstantFrameTime;  // if true, then force to constant frame time
+        float m_OverrideConstantTimePerFrame; // the constant time per frame in seconds if m_OverrideConstantFrameTime==true
+        int   m_OverrideQuitAfterFrame;     // if != 0, then it will force the app to quit after that frame
+        int   m_OverrideForceVsync;         // if == 0, then it will force the app to use D3DPRESENT_INTERVAL_IMMEDIATE, if == 1 force use of D3DPRESENT_INTERVAL_DEFAULT
+        bool  m_OverrideRelaunchMCE;          // if true, then force relaunch of MCE at exit
+
+        LPDXUTCALLBACKISDEVICEACCEPTABLE    m_IsDeviceAcceptableFunc;   // is device acceptable callback
+        LPDXUTCALLBACKMODIFYDEVICESETTINGS  m_ModifyDeviceSettingsFunc; // modify device settings callback
+        LPDXUTCALLBACKDEVICECREATED         m_DeviceCreatedFunc;        // device created callback
+        LPDXUTCALLBACKDEVICERESET           m_DeviceResetFunc;          // device reset callback
+        LPDXUTCALLBACKDEVICELOST            m_DeviceLostFunc;           // device lost callback
+        LPDXUTCALLBACKDEVICEDESTROYED       m_DeviceDestroyedFunc;      // device destroyed callback
+        LPDXUTCALLBACKFRAMEMOVE             m_FrameMoveFunc;            // frame move callback
+        LPDXUTCALLBACKFRAMERENDER           m_FrameRenderFunc;          // frame render callback
+        LPDXUTCALLBACKKEYBOARD              m_KeyboardFunc;             // keyboard callback
+        LPDXUTCALLBACKMOUSE                 m_MouseFunc;                // mouse callback
+        LPDXUTCALLBACKMSGPROC               m_WindowMsgFunc;            // window messages callback
+
+        void*                               m_IsDeviceAcceptableFuncUserContext;   // user context for is device acceptable callback
+        void*                               m_ModifyDeviceSettingsFuncUserContext; // user context for modify device settings callback
+        void*                               m_DeviceCreatedUserContext;            // user context for device created callback
+        void*                               m_DeviceCreatedFuncUserContext;        // user context for device created callback
+        void*                               m_DeviceResetFuncUserContext;          // user context for device reset callback
+        void*                               m_DeviceLostFuncUserContext;           // user context for device lost callback
+        void*                               m_DeviceDestroyedFuncUserContext;      // user context for device destroyed callback
+        void*                               m_FrameMoveFuncUserContext;            // user context for frame move callback
+        void*                               m_FrameRenderFuncUserContext;          // user context for frame render callback
+        void*                               m_KeyboardFuncUserContext;             // user context for keyboard callback
+        void*                               m_MouseFuncUserContext;                // user context for mouse callback
+        void*                               m_WindowMsgFuncUserContext;            // user context for window messages callback
+
+        bool                         m_Keys[256];                       // array of key state
+        bool                         m_MouseButtons[5];                 // array of mouse states
+
+        CGrowableArray<DXUT_TIMER>*  m_TimerList;                       // list of DXUT_TIMER structs
+        WCHAR                        m_StaticFrameStats[256];           // static part of frames stats 
+        WCHAR                        m_FPSStats[64];                    // fps stats
+        WCHAR                        m_FrameStats[256];                 // frame stats (fps, width, etc)
+        WCHAR                        m_DeviceStats[256];                // device stats (description, device type, etc)
+        WCHAR                        m_WindowTitle[256];                // window title
+    };
+    
+    STATE m_state;
+
+public:
+    DXUTState()  { Create(); }
+    ~DXUTState() { Destroy(); }
+
+    void Create()
+    {
+        // Make sure these are created before DXUTState so they 
+        // destroyed last because DXUTState cleanup needs them
+        DXUTGetGlobalResourceCache();
+
+        ZeroMemory( &m_state, sizeof(STATE) ); 
+        g_bThreadSafe = true; 
+        InitializeCriticalSection( &g_cs ); 
+        m_state.m_OverrideStartX = -1; 
+        m_state.m_OverrideStartY = -1; 
+        m_state.m_OverrideAdapterOrdinal = -1; 
+        m_state.m_OverrideForceVsync = -1;
+        m_state.m_AutoChangeAdapter = true; 
+        m_state.m_ShowMsgBoxOnError = true;
+        m_state.m_AllowShortcutKeysWhenWindowed = true;
+        m_state.m_Active = true;
+        m_state.m_CallDefWindowProc = true;
+    }
+
+    void Destroy()
+    {
+        DXUTShutdown();
+        DeleteCriticalSection( &g_cs ); 
+    }
+
+    // Macros to define access functions for thread safe access into m_state 
+    GET_SET_ACCESSOR( IDirect3D9*, D3D );
+
+    GET_SET_ACCESSOR( IDirect3DDevice9*, D3DDevice );
+    GET_SET_ACCESSOR( CD3DEnumeration*, D3DEnumeration );   
+    GET_SET_ACCESSOR( DXUTDeviceSettings*, CurrentDeviceSettings );   
+    GETP_SETP_ACCESSOR( D3DSURFACE_DESC, BackBufferSurfaceDesc );
+    GETP_SETP_ACCESSOR( D3DCAPS9, Caps );
+
+    GET_SET_ACCESSOR( HWND, HWNDFocus );
+    GET_SET_ACCESSOR( HWND, HWNDDeviceFullScreen );
+    GET_SET_ACCESSOR( HWND, HWNDDeviceWindowed );
+    GET_SET_ACCESSOR( HMONITOR, AdapterMonitor );
+    GET_SET_ACCESSOR( HMENU, Menu );   
+
+    GET_SET_ACCESSOR( UINT, FullScreenBackBufferWidthAtModeChange );
+    GET_SET_ACCESSOR( UINT, FullScreenBackBufferHeightAtModeChange );
+    GET_SET_ACCESSOR( UINT, WindowBackBufferWidthAtModeChange );
+    GET_SET_ACCESSOR( UINT, WindowBackBufferHeightAtModeChange );
+    GETP_SETP_ACCESSOR( WINDOWPLACEMENT, WindowedPlacement );
+    GET_SET_ACCESSOR( DWORD, WindowedStyleAtModeChange );
+    GET_SET_ACCESSOR( bool, TopmostWhileWindowed );
+    GET_SET_ACCESSOR( bool, Minimized );
+    GET_SET_ACCESSOR( bool, Maximized );
+    GET_SET_ACCESSOR( bool, MinimizedWhileFullscreen );
+    GET_SET_ACCESSOR( bool, IgnoreSizeChange );   
+
+    GET_SET_ACCESSOR( double, Time );
+    GET_SET_ACCESSOR( float, ElapsedTime );
+
+    GET_SET_ACCESSOR( HINSTANCE, HInstance );
+    GET_SET_ACCESSOR( double, LastStatsUpdateTime );   
+    GET_SET_ACCESSOR( DWORD, LastStatsUpdateFrames );   
+    GET_SET_ACCESSOR( float, FPS );    
+    GET_SET_ACCESSOR( int, CurrentFrameNumber );
+    GET_SET_ACCESSOR( HHOOK, KeyboardHook );
+    GET_SET_ACCESSOR( bool, AllowShortcutKeysWhenFullscreen );
+    GET_SET_ACCESSOR( bool, AllowShortcutKeysWhenWindowed );
+    GET_SET_ACCESSOR( bool, AllowShortcutKeys );
+    GET_SET_ACCESSOR( bool, CallDefWindowProc );
+    GET_SET_ACCESSOR( STICKYKEYS, StartupStickyKeys );
+    GET_SET_ACCESSOR( TOGGLEKEYS, StartupToggleKeys );
+    GET_SET_ACCESSOR( FILTERKEYS, StartupFilterKeys );
+
+    GET_SET_ACCESSOR( bool, HandleDefaultHotkeys );
+    GET_SET_ACCESSOR( bool, HandleAltEnter );
+    GET_SET_ACCESSOR( bool, ShowMsgBoxOnError );
+    GET_SET_ACCESSOR( bool, NoStats );
+    GET_SET_ACCESSOR( bool, ClipCursorWhenFullScreen );   
+    GET_SET_ACCESSOR( bool, ShowCursorWhenFullScreen );
+    GET_SET_ACCESSOR( bool, ConstantFrameTime );
+    GET_SET_ACCESSOR( float, TimePerFrame );
+    GET_SET_ACCESSOR( bool, WireframeMode );   
+    GET_SET_ACCESSOR( bool, AutoChangeAdapter );
+    GET_SET_ACCESSOR( bool, WindowCreatedWithDefaultPositions );
+    GET_SET_ACCESSOR( int, ExitCode );
+
+    GET_SET_ACCESSOR( bool, DXUTInited );
+    GET_SET_ACCESSOR( bool, WindowCreated );
+    GET_SET_ACCESSOR( bool, DeviceCreated );
+    GET_SET_ACCESSOR( bool, DXUTInitCalled );
+    GET_SET_ACCESSOR( bool, WindowCreateCalled );
+    GET_SET_ACCESSOR( bool, DeviceCreateCalled );
+    GET_SET_ACCESSOR( bool, InsideDeviceCallback );
+    GET_SET_ACCESSOR( bool, InsideMainloop );
+    GET_SET_ACCESSOR( bool, DeviceObjectsCreated );
+    GET_SET_ACCESSOR( bool, DeviceObjectsReset );
+    GET_SET_ACCESSOR( bool, Active );
+    GET_SET_ACCESSOR( bool, RenderingPaused );
+    GET_SET_ACCESSOR( bool, TimePaused );
+    GET_SET_ACCESSOR( int, PauseRenderingCount );
+    GET_SET_ACCESSOR( int, PauseTimeCount );
+    GET_SET_ACCESSOR( bool, DeviceLost );
+    GET_SET_ACCESSOR( bool, NotifyOnMouseMove );
+    GET_SET_ACCESSOR( bool, Automation );
+    GET_SET_ACCESSOR( bool, InSizeMove );
+
+    GET_SET_ACCESSOR( int, OverrideAdapterOrdinal );
+    GET_SET_ACCESSOR( bool, OverrideWindowed );
+    GET_SET_ACCESSOR( bool, OverrideFullScreen );
+    GET_SET_ACCESSOR( int, OverrideStartX );
+    GET_SET_ACCESSOR( int, OverrideStartY );
+    GET_SET_ACCESSOR( int, OverrideWidth );
+    GET_SET_ACCESSOR( int, OverrideHeight );
+    GET_SET_ACCESSOR( bool, OverrideForceHAL );
+    GET_SET_ACCESSOR( bool, OverrideForceREF );
+    GET_SET_ACCESSOR( bool, OverrideForcePureHWVP );
+    GET_SET_ACCESSOR( bool, OverrideForceHWVP );
+    GET_SET_ACCESSOR( bool, OverrideForceSWVP );
+    GET_SET_ACCESSOR( bool, OverrideConstantFrameTime );
+    GET_SET_ACCESSOR( float, OverrideConstantTimePerFrame );
+    GET_SET_ACCESSOR( int, OverrideQuitAfterFrame );
+    GET_SET_ACCESSOR( int, OverrideForceVsync );
+    GET_SET_ACCESSOR( bool, OverrideRelaunchMCE );
+
+    GET_SET_ACCESSOR( LPDXUTCALLBACKISDEVICEACCEPTABLE, IsDeviceAcceptableFunc );
+    GET_SET_ACCESSOR( LPDXUTCALLBACKMODIFYDEVICESETTINGS, ModifyDeviceSettingsFunc );
+    GET_SET_ACCESSOR( LPDXUTCALLBACKDEVICECREATED, DeviceCreatedFunc );
+    GET_SET_ACCESSOR( LPDXUTCALLBACKDEVICERESET, DeviceResetFunc );
+    GET_SET_ACCESSOR( LPDXUTCALLBACKDEVICELOST, DeviceLostFunc );
+    GET_SET_ACCESSOR( LPDXUTCALLBACKDEVICEDESTROYED, DeviceDestroyedFunc );
+    GET_SET_ACCESSOR( LPDXUTCALLBACKFRAMEMOVE, FrameMoveFunc );
+    GET_SET_ACCESSOR( LPDXUTCALLBACKFRAMERENDER, FrameRenderFunc );
+    GET_SET_ACCESSOR( LPDXUTCALLBACKKEYBOARD, KeyboardFunc );
+    GET_SET_ACCESSOR( LPDXUTCALLBACKMOUSE, MouseFunc );
+    GET_SET_ACCESSOR( LPDXUTCALLBACKMSGPROC, WindowMsgFunc );
+
+    GET_SET_ACCESSOR( void*, IsDeviceAcceptableFuncUserContext );
+    GET_SET_ACCESSOR( void*, ModifyDeviceSettingsFuncUserContext );
+    GET_SET_ACCESSOR( void*, DeviceCreatedFuncUserContext );
+    GET_SET_ACCESSOR( void*, DeviceResetFuncUserContext );
+    GET_SET_ACCESSOR( void*, DeviceLostFuncUserContext );
+    GET_SET_ACCESSOR( void*, DeviceDestroyedFuncUserContext );
+    GET_SET_ACCESSOR( void*, FrameMoveFuncUserContext );
+    GET_SET_ACCESSOR( void*, FrameRenderFuncUserContext );
+    GET_SET_ACCESSOR( void*, KeyboardFuncUserContext );
+    GET_SET_ACCESSOR( void*, MouseFuncUserContext );
+    GET_SET_ACCESSOR( void*, WindowMsgFuncUserContext );
+
+    GET_SET_ACCESSOR( CGrowableArray<DXUT_TIMER>*, TimerList );   
+    GET_ACCESSOR( bool*, Keys );
+    GET_ACCESSOR( bool*, MouseButtons );
+    GET_ACCESSOR( WCHAR*, StaticFrameStats );
+    GET_ACCESSOR( WCHAR*, FPSStats );
+    GET_ACCESSOR( WCHAR*, FrameStats );
+    GET_ACCESSOR( WCHAR*, DeviceStats );    
+    GET_ACCESSOR( WCHAR*, WindowTitle );
+};
+
+
+//--------------------------------------------------------------------------------------
+// Global state class
+//--------------------------------------------------------------------------------------
+DXUTState& GetDXUTState()
+{
+    // Using an accessor function gives control of the construction order
+    static DXUTState state;
+    return state;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Internal functions forward declarations
+//--------------------------------------------------------------------------------------
+typedef IDirect3D9* (WINAPI* LPDIRECT3DCREATE9)(UINT SDKVersion);
+typedef DECLSPEC_IMPORT UINT (WINAPI* LPTIMEBEGINPERIOD)( UINT uPeriod );
+int     DXUTMapButtonToArrayIndex( BYTE vButton );
+void    DXUTParseCommandLine();
+CD3DEnumeration* DXUTPrepareEnumerationObject( bool bEnumerate = false );
+void    DXUTBuildOptimalDeviceSettings( DXUTDeviceSettings* pOptimalDeviceSettings, DXUTDeviceSettings* pDeviceSettingsIn, DXUTMatchOptions* pMatchOptions );
+bool    DXUTDoesDeviceComboMatchPreserveOptions( CD3DEnumDeviceSettingsCombo* pDeviceSettingsCombo, DXUTDeviceSettings* pDeviceSettingsIn, DXUTMatchOptions* pMatchOptions );
+float   DXUTRankDeviceCombo( CD3DEnumDeviceSettingsCombo* pDeviceSettingsCombo, DXUTDeviceSettings* pDeviceSettingsIn, D3DDISPLAYMODE* pAdapterDesktopDisplayMode );
+void    DXUTBuildValidDeviceSettings( DXUTDeviceSettings* pDeviceSettings, CD3DEnumDeviceSettingsCombo* pBestDeviceSettingsCombo, DXUTDeviceSettings* pDeviceSettingsIn, DXUTMatchOptions* pMatchOptions );
+HRESULT DXUTFindValidResolution( CD3DEnumDeviceSettingsCombo* pBestDeviceSettingsCombo, D3DDISPLAYMODE displayModeIn, D3DDISPLAYMODE* pBestDisplayMode );
+HRESULT DXUTFindAdapterFormat( UINT AdapterOrdinal, D3DDEVTYPE DeviceType, D3DFORMAT BackBufferFormat, BOOL Windowed, D3DFORMAT* pAdapterFormat );
+HRESULT DXUTChangeDevice( DXUTDeviceSettings* pNewDeviceSettings, IDirect3DDevice9* pd3dDeviceFromApp, bool bForceRecreate, bool bClipWindowToSingleAdapter );
+void    DXUTUpdateDeviceSettingsWithOverrides( DXUTDeviceSettings* pNewDeviceSettings );
+HRESULT DXUTCreate3DEnvironment( IDirect3DDevice9* pd3dDeviceFromApp );
+HRESULT DXUTReset3DEnvironment();
+void    DXUTRender3DEnvironment();
+void    DXUTCleanup3DEnvironment( bool bReleaseSettings = true );
+void    DXUTUpdateFrameStats();
+void    DXUTUpdateDeviceStats( D3DDEVTYPE DeviceType, DWORD BehaviorFlags, D3DADAPTER_IDENTIFIER9* pAdapterIdentifier );
+void    DXUTUpdateStaticFrameStats();
+void    DXUTHandleTimers();
+bool    DXUTIsNextArg( WCHAR*& strCmdLine, WCHAR* strArg );
+bool    DXUTGetCmdParam( WCHAR*& strCmdLine, WCHAR* strFlag );
+void    DXUTDisplayErrorMessage( HRESULT hr );
+LRESULT CALLBACK DXUTStaticWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
+void    DXUTCheckForWindowSizeChange();
+void    DXUTCheckForWindowChangingMonitors();
+UINT    DXUTColorChannelBits( D3DFORMAT fmt );
+UINT    DXUTStencilBits( D3DFORMAT fmt );
+UINT    DXUTDepthBits( D3DFORMAT fmt );
+HRESULT DXUTGetAdapterOrdinalFromMonitor( HMONITOR hMonitor, UINT* pAdapterOrdinal );
+void    DXUTAllowShortcutKeys( bool bAllowKeys );
+void    DXUTUpdateBackBufferDesc();
+void    DXUTSetupCursor();
+HRESULT DXUTSetDeviceCursor( IDirect3DDevice9* pd3dDevice, HCURSOR hCursor, bool bAddWatermark );
+
+
+//--------------------------------------------------------------------------------------
+// External callback setup functions
+//--------------------------------------------------------------------------------------
+void DXUTSetCallbackDeviceCreated( LPDXUTCALLBACKDEVICECREATED pCallbackDeviceCreated, void* pUserContext ) { GetDXUTState().SetDeviceCreatedFunc( pCallbackDeviceCreated ); GetDXUTState().SetDeviceCreatedFuncUserContext( pUserContext ); }
+void DXUTSetCallbackDeviceReset( LPDXUTCALLBACKDEVICERESET pCallbackDeviceReset, void* pUserContext )       { GetDXUTState().SetDeviceResetFunc( pCallbackDeviceReset );  GetDXUTState().SetDeviceResetFuncUserContext( pUserContext ); }
+void DXUTSetCallbackDeviceLost( LPDXUTCALLBACKDEVICELOST pCallbackDeviceLost, void* pUserContext )          { GetDXUTState().SetDeviceLostFunc( pCallbackDeviceLost );  GetDXUTState().SetDeviceLostFuncUserContext( pUserContext ); }
+void DXUTSetCallbackDeviceDestroyed( LPDXUTCALLBACKDEVICEDESTROYED pCallbackDeviceDestroyed, void* pUserContext ) { GetDXUTState().SetDeviceDestroyedFunc( pCallbackDeviceDestroyed );  GetDXUTState().SetDeviceDestroyedFuncUserContext( pUserContext ); }
+void DXUTSetCallbackDeviceChanging( LPDXUTCALLBACKMODIFYDEVICESETTINGS pCallbackModifyDeviceSettings, void* pUserContext ) { GetDXUTState().SetModifyDeviceSettingsFunc( pCallbackModifyDeviceSettings );  GetDXUTState().SetModifyDeviceSettingsFuncUserContext( pUserContext ); }
+void DXUTSetCallbackFrameMove( LPDXUTCALLBACKFRAMEMOVE pCallbackFrameMove, void* pUserContext ) { GetDXUTState().SetFrameMoveFunc( pCallbackFrameMove );  GetDXUTState().SetFrameMoveFuncUserContext( pUserContext ); }
+void DXUTSetCallbackFrameRender( LPDXUTCALLBACKFRAMERENDER pCallbackFrameRender, void* pUserContext )       { GetDXUTState().SetFrameRenderFunc( pCallbackFrameRender );  GetDXUTState().SetFrameRenderFuncUserContext( pUserContext ); }
+void DXUTSetCallbackKeyboard( LPDXUTCALLBACKKEYBOARD pCallbackKeyboard, void* pUserContext )                { GetDXUTState().SetKeyboardFunc( pCallbackKeyboard );  GetDXUTState().SetKeyboardFuncUserContext( pUserContext ); }
+void DXUTSetCallbackMouse( LPDXUTCALLBACKMOUSE pCallbackMouse, bool bIncludeMouseMove, void* pUserContext ) { GetDXUTState().SetMouseFunc( pCallbackMouse ); GetDXUTState().SetNotifyOnMouseMove( bIncludeMouseMove );  GetDXUTState().SetMouseFuncUserContext( pUserContext ); }
+void DXUTSetCallbackMsgProc( LPDXUTCALLBACKMSGPROC pCallbackMsgProc, void* pUserContext )                   { GetDXUTState().SetWindowMsgFunc( pCallbackMsgProc );  GetDXUTState().SetWindowMsgFuncUserContext( pUserContext ); }
+
+
+//--------------------------------------------------------------------------------------
+// Optionally parses the command line and sets if default hotkeys are handled
+//
+//       Possible command line parameters are:
+//          -adapter:#              forces app to use this adapter # (fails if the adapter doesn't exist)
+//          -windowed               forces app to start windowed
+//          -fullscreen             forces app to start full screen
+//          -forcehal               forces app to use HAL (fails if HAL doesn't exist)
+//          -forceref               forces app to use REF (fails if REF doesn't exist)
+//          -forcepurehwvp          forces app to use pure HWVP (fails if device doesn't support it)
+//          -forcehwvp              forces app to use HWVP (fails if device doesn't support it)
+//          -forceswvp              forces app to use SWVP 
+//          -forcevsync:#           if # is 0, forces app to use D3DPRESENT_INTERVAL_IMMEDIATE otherwise force use of D3DPRESENT_INTERVAL_DEFAULT 
+//          -width:#                forces app to use # for width. for full screen, it will pick the closest possible supported mode
+//          -height:#               forces app to use # for height. for full screen, it will pick the closest possible supported mode
+//          -startx:#               forces app to use # for the x coord of the window position for windowed mode
+//          -starty:#               forces app to use # for the y coord of the window position for windowed mode
+//          -constantframetime:#    forces app to use constant frame time, where # is the time/frame in seconds
+//          -quitafterframe:x       forces app to quit after # frames
+//          -noerrormsgboxes        prevents the display of message boxes generated by the framework so the application can be run without user interaction
+//          -nostats                prevents the display of the stats
+//          -relaunchmce            re-launches the MCE UI after the app exits
+//          -automation             every CDXUTDialog created will have EnableKeyboardInput(true) called, enabling UI navigation with keyboard
+//                                  This is useful when automating application testing.
+//
+//      Hotkeys handled by default are:
+//          Alt-Enter           toggle between full screen & windowed (hotkey always enabled)
+//          ESC                 exit app 
+//          F3                  toggle HAL/REF
+//          F8                  toggle wire-frame mode
+//          Pause               pause time
+//--------------------------------------------------------------------------------------
+HRESULT DXUTInit( bool bParseCommandLine, bool bHandleDefaultHotkeys, bool bShowMsgBoxOnError, bool bHandleAltEnter )
+{
+    GetDXUTState().SetDXUTInitCalled( true );
+
+    // Not always needed, but lets the app create GDI dialogs
+    InitCommonControls();
+
+    // Save the current sticky/toggle/filter key settings so DXUT can restore them later
+    STICKYKEYS sk = {sizeof(STICKYKEYS), 0};
+    SystemParametersInfo(SPI_GETSTICKYKEYS, sizeof(STICKYKEYS), &sk, 0);
+    GetDXUTState().SetStartupStickyKeys( sk );
+
+    TOGGLEKEYS tk = {sizeof(TOGGLEKEYS), 0};
+    SystemParametersInfo(SPI_GETTOGGLEKEYS, sizeof(TOGGLEKEYS), &tk, 0);
+    GetDXUTState().SetStartupToggleKeys( tk );
+
+    FILTERKEYS fk = {sizeof(FILTERKEYS), 0};
+    SystemParametersInfo(SPI_GETFILTERKEYS, sizeof(FILTERKEYS), &fk, 0);
+    GetDXUTState().SetStartupFilterKeys( fk );
+
+    // Increase the accuracy of Sleep() without needing to link to winmm.lib
+    WCHAR wszPath[MAX_PATH+1];
+    if( GetSystemDirectory( wszPath, MAX_PATH+1 ) )
+    {
+        StringCchCat( wszPath, MAX_PATH, L"\\winmm.dll" );
+        HINSTANCE hInstWinMM = LoadLibrary( wszPath );
+        if( hInstWinMM ) 
+        {
+            LPTIMEBEGINPERIOD pTimeBeginPeriod = (LPTIMEBEGINPERIOD)GetProcAddress( hInstWinMM, "timeBeginPeriod" );
+            if( NULL != pTimeBeginPeriod )
+                pTimeBeginPeriod(1);
+
+            FreeLibrary(hInstWinMM);
+        }
+    }
+
+    GetDXUTState().SetShowMsgBoxOnError( bShowMsgBoxOnError );
+    GetDXUTState().SetHandleDefaultHotkeys( bHandleDefaultHotkeys );
+    GetDXUTState().SetHandleAltEnter( bHandleAltEnter );
+
+    if( bParseCommandLine )
+        DXUTParseCommandLine();
+
+    // Verify D3DX version
+    if( !D3DXCheckVersion( D3D_SDK_VERSION, D3DX_SDK_VERSION ) )
+    {
+        DXUTDisplayErrorMessage( DXUTERR_INCORRECTVERSION );
+        return DXUT_ERR( L"D3DXCheckVersion", DXUTERR_INCORRECTVERSION );
+    }
+
+    // Create a Direct3D object if one has not already been created
+    IDirect3D9* pD3D = DXUTGetD3DObject();
+    if( pD3D == NULL )
+    {
+        // This may fail if DirectX 9 isn't installed
+        // This may fail if the DirectX headers are out of sync with the installed DirectX DLLs
+        pD3D = DXUT_Dynamic_Direct3DCreate9( D3D_SDK_VERSION );
+        GetDXUTState().SetD3D( pD3D );
+    }
+
+    if( pD3D == NULL )
+    {
+        // If still NULL, then something went wrong
+        DXUTDisplayErrorMessage( DXUTERR_NODIRECT3D );
+        return DXUT_ERR( L"Direct3DCreate9", DXUTERR_NODIRECT3D );
+    }
+
+    // Reset the timer
+    DXUTGetGlobalTimer()->Reset();
+
+    GetDXUTState().SetDXUTInited( true );
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Parses the command line for parameters.  See DXUTInit() for list 
+//--------------------------------------------------------------------------------------
+void DXUTParseCommandLine()
+{
+    WCHAR* strCmdLine;
+    WCHAR strFlag[MAX_PATH];
+
+    int nNumArgs;
+    WCHAR** pstrArgList = CommandLineToArgvW( GetCommandLine(), &nNumArgs );
+    for( int iArg=1; iArg<nNumArgs; iArg++ )
+    {
+        strCmdLine = pstrArgList[iArg];
+
+        // Handle flag args
+        if( *strCmdLine == L'/' || *strCmdLine == L'-' )
+        {
+            strCmdLine++;
+
+            if( DXUTIsNextArg( strCmdLine, L"adapter" ) )
+            {
+                if( DXUTGetCmdParam( strCmdLine, strFlag ) )
+                {
+                    int nAdapter = _wtoi(strFlag);
+                    GetDXUTState().SetOverrideAdapterOrdinal( nAdapter );
+                    continue;
+                }
+            }
+
+            if( DXUTIsNextArg( strCmdLine, L"windowed" ) )
+            {
+                GetDXUTState().SetOverrideWindowed( true );
+                continue;
+            }
+
+            if( DXUTIsNextArg( strCmdLine, L"fullscreen" ) )
+            {
+                GetDXUTState().SetOverrideFullScreen( true );
+                continue;
+            }
+
+            if( DXUTIsNextArg( strCmdLine, L"forcehal" ) )
+            {
+                GetDXUTState().SetOverrideForceHAL( true );
+                continue;
+            }
+
+            if( DXUTIsNextArg( strCmdLine, L"forceref" ) )
+            {
+                GetDXUTState().SetOverrideForceREF( true );
+                continue;
+            }
+
+            if( DXUTIsNextArg( strCmdLine, L"forcepurehwvp" ) )
+            {
+                GetDXUTState().SetOverrideForcePureHWVP( true );
+                continue;
+            }
+
+            if( DXUTIsNextArg( strCmdLine, L"forcehwvp" ) )
+            {
+                GetDXUTState().SetOverrideForceHWVP( true );
+                continue;
+            }
+
+            if( DXUTIsNextArg( strCmdLine, L"forceswvp" ) )
+            {
+                GetDXUTState().SetOverrideForceSWVP( true );
+                continue;
+            }
+
+            if( DXUTIsNextArg( strCmdLine, L"forcevsync" ) )
+            {
+                if( DXUTGetCmdParam( strCmdLine, strFlag ) )
+                {
+                    int nOn = _wtoi(strFlag);
+                    GetDXUTState().SetOverrideForceVsync( nOn );
+                    continue;
+                }
+            }
+
+            if( DXUTIsNextArg( strCmdLine, L"width" ) )
+            {
+                if( DXUTGetCmdParam( strCmdLine, strFlag ) )
+                {
+                    int nWidth = _wtoi(strFlag);
+                    GetDXUTState().SetOverrideWidth( nWidth );
+                    continue;
+                }
+            }
+
+            if( DXUTIsNextArg( strCmdLine, L"height" ) )
+            {
+                if( DXUTGetCmdParam( strCmdLine, strFlag ) )
+                {
+                    int nHeight = _wtoi(strFlag);
+                    GetDXUTState().SetOverrideHeight( nHeight );
+                continue;
+                }
+            }
+
+            if( DXUTIsNextArg( strCmdLine, L"startx" ) )
+            {
+                if( DXUTGetCmdParam( strCmdLine, strFlag ) )
+                {
+                    int nX = _wtoi(strFlag);
+                    GetDXUTState().SetOverrideStartX( nX );
+                    continue;
+                }
+            }
+
+            if( DXUTIsNextArg( strCmdLine, L"starty" ) )
+            {
+                if( DXUTGetCmdParam( strCmdLine, strFlag ) )
+                {
+                    int nY = _wtoi(strFlag);
+                    GetDXUTState().SetOverrideStartY( nY );
+                    continue;
+                }
+            }
+
+            if( DXUTIsNextArg( strCmdLine, L"constantframetime" ) )
+            {
+                float fTimePerFrame;
+                if( DXUTGetCmdParam( strCmdLine, strFlag ) )
+                    fTimePerFrame = (float)wcstod( strFlag, NULL );
+                else
+                    fTimePerFrame = 0.0333f;
+                GetDXUTState().SetOverrideConstantFrameTime( true );
+                GetDXUTState().SetOverrideConstantTimePerFrame( fTimePerFrame );
+                DXUTSetConstantFrameTime( true, fTimePerFrame );
+                continue;
+            }
+
+            if( DXUTIsNextArg( strCmdLine, L"quitafterframe" ) )
+            {
+                if( DXUTGetCmdParam( strCmdLine, strFlag ) )
+                {
+                    int nFrame = _wtoi(strFlag);
+                    GetDXUTState().SetOverrideQuitAfterFrame( nFrame );
+                    continue;
+                }
+            }
+
+            if( DXUTIsNextArg( strCmdLine, L"noerrormsgboxes" ) )
+            {
+                GetDXUTState().SetShowMsgBoxOnError( false );
+                continue;
+            }
+
+            if( DXUTIsNextArg( strCmdLine, L"nostats" ) )
+            {
+                GetDXUTState().SetNoStats( true );
+                continue;
+            }
+
+            if( DXUTIsNextArg( strCmdLine, L"relaunchmce" ) )
+            {
+                GetDXUTState().SetOverrideRelaunchMCE( true );
+                continue;
+            }
+
+            if( DXUTIsNextArg( strCmdLine, L"automation" ) )
+            {
+                GetDXUTState().SetAutomation( true );
+                continue;
+            }
+        }
+
+        // Unrecognized flag
+        StringCchCopy( strFlag, 256, strCmdLine ); 
+        WCHAR* strSpace = strFlag;
+        while (*strSpace && (*strSpace > L' '))
+            strSpace++;
+        *strSpace = 0;
+
+        DXUTOutputDebugString( L"Unrecognized flag: %s", strFlag );
+        strCmdLine += wcslen(strFlag);
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+// Helper function for DXUTParseCommandLine
+//--------------------------------------------------------------------------------------
+bool DXUTIsNextArg( WCHAR*& strCmdLine, WCHAR* strArg )
+{
+    int nArgLen = (int) wcslen(strArg);
+    int nCmdLen = (int) wcslen(strCmdLine);
+
+    if( nCmdLen >= nArgLen && 
+        _wcsnicmp( strCmdLine, strArg, nArgLen ) == 0 && 
+        (strCmdLine[nArgLen] == 0 || strCmdLine[nArgLen] == L':') )
+    {
+        strCmdLine += nArgLen;
+        return true;
+    }
+
+    return false;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Helper function for DXUTParseCommandLine.  Updates strCmdLine and strFlag 
+//      Example: if strCmdLine=="-width:1024 -forceref"
+// then after: strCmdLine==" -forceref" and strFlag=="1024"
+//--------------------------------------------------------------------------------------
+bool DXUTGetCmdParam( WCHAR*& strCmdLine, WCHAR* strFlag )
+{
+    if( *strCmdLine == L':' )
+    {       
+        strCmdLine++; // Skip ':'
+
+        // Place NULL terminator in strFlag after current token
+        StringCchCopy( strFlag, 256, strCmdLine );
+        WCHAR* strSpace = strFlag;
+        while (*strSpace && (*strSpace > L' '))
+            strSpace++;
+        *strSpace = 0;
+    
+        // Update strCmdLine
+        strCmdLine += wcslen(strFlag);
+        return true;
+    }
+    else
+    {
+        strFlag[0] = 0;
+        return false;
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+// Creates a window with the specified window title, icon, menu, and 
+// starting position.  If DXUTInit() has not already been called, it will
+// call it with the default parameters.  Instead of calling this, you can 
+// call DXUTSetWindow() to use an existing window.  
+//--------------------------------------------------------------------------------------
+HRESULT DXUTCreateWindow( const WCHAR* strWindowTitle, HINSTANCE hInstance, 
+                          HICON hIcon, HMENU hMenu, int x, int y )
+{
+    HRESULT hr;
+
+    // Not allowed to call this from inside the device callbacks
+    if( GetDXUTState().GetInsideDeviceCallback() )
+        return DXUT_ERR_MSGBOX( L"DXUTCreateWindow", E_FAIL );
+
+    GetDXUTState().SetWindowCreateCalled( true );
+
+    if( !GetDXUTState().GetDXUTInited() ) 
+    {
+        // If DXUTInit() was already called and failed, then fail.
+        // DXUTInit() must first succeed for this function to succeed
+        if( GetDXUTState().GetDXUTInitCalled() )
+            return E_FAIL; 
+
+        // If DXUTInit() hasn't been called, then automatically call it
+        // with default params
+        hr = DXUTInit();
+        if( FAILED(hr) )
+            return hr;
+    }
+
+    if( DXUTGetHWNDFocus() == NULL )
+    {
+        if( hInstance == NULL ) 
+            hInstance = (HINSTANCE)GetModuleHandle(NULL);
+        GetDXUTState().SetHInstance( hInstance );
+
+        WCHAR szExePath[MAX_PATH];
+        GetModuleFileName( NULL, szExePath, MAX_PATH );
+        if( hIcon == NULL ) // If the icon is NULL, then use the first one found in the exe
+            hIcon = ExtractIcon( hInstance, szExePath, 0 ); 
+
+        // Register the windows class
+        WNDCLASS wndClass;
+        wndClass.style = CS_DBLCLKS;
+        wndClass.lpfnWndProc = DXUTStaticWndProc;
+        wndClass.cbClsExtra = 0;
+        wndClass.cbWndExtra = 0;
+        wndClass.hInstance = hInstance;
+        wndClass.hIcon = hIcon;
+        wndClass.hCursor = LoadCursor( NULL, IDC_ARROW );
+        wndClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
+        wndClass.lpszMenuName = NULL;
+        wndClass.lpszClassName = L"Direct3DWindowClass";
+
+        if( !RegisterClass( &wndClass ) )
+        {
+            DWORD dwError = GetLastError();
+            if( dwError != ERROR_CLASS_ALREADY_EXISTS )
+                return DXUT_ERR_MSGBOX( L"RegisterClass", HRESULT_FROM_WIN32(dwError) );
+        }
+
+        RECT rc;
+        // Override the window's initial & size position if there were cmd line args
+        if( GetDXUTState().GetOverrideStartX() != -1 )
+            x = GetDXUTState().GetOverrideStartX();
+        if( GetDXUTState().GetOverrideStartY() != -1 )
+            y = GetDXUTState().GetOverrideStartY();
+
+        GetDXUTState().SetWindowCreatedWithDefaultPositions( false );
+        if( x == CW_USEDEFAULT && y == CW_USEDEFAULT )
+            GetDXUTState().SetWindowCreatedWithDefaultPositions( true );
+
+        // Find the window's initial size, but it might be changed later
+        int nDefaultWidth = 640;
+        int nDefaultHeight = 480;
+        if( GetDXUTState().GetOverrideWidth() != 0 )
+            nDefaultWidth = GetDXUTState().GetOverrideWidth();
+        if( GetDXUTState().GetOverrideHeight() != 0 )
+            nDefaultHeight = GetDXUTState().GetOverrideHeight();
+        SetRect( &rc, 0, 0, nDefaultWidth, nDefaultHeight );        
+        AdjustWindowRect( &rc, WS_OVERLAPPEDWINDOW, ( hMenu != NULL ) ? true : false );
+
+        WCHAR* strCachedWindowTitle = GetDXUTState().GetWindowTitle();
+        StringCchCopy( strCachedWindowTitle, 256, strWindowTitle );
+
+        // Create the render window
+        HWND hWnd = CreateWindow( L"Direct3DWindowClass", strWindowTitle, WS_OVERLAPPEDWINDOW,
+                               x, y, (rc.right-rc.left), (rc.bottom-rc.top), 0,
+                               hMenu, hInstance, 0 );
+        if( hWnd == NULL )
+        {
+            DWORD dwError = GetLastError();
+            return DXUT_ERR_MSGBOX( L"CreateWindow", HRESULT_FROM_WIN32(dwError) );
+        }
+
+        GetDXUTState().SetWindowCreated( true );
+        GetDXUTState().SetHWNDFocus( hWnd );
+        GetDXUTState().SetHWNDDeviceFullScreen( hWnd );
+        GetDXUTState().SetHWNDDeviceWindowed( hWnd );
+    }
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Sets a previously created window for the framework to use.  If DXUTInit() 
+// has not already been called, it will call it with the default parameters.  
+// Instead of calling this, you can call DXUTCreateWindow() to create a new window.  
+//--------------------------------------------------------------------------------------
+HRESULT DXUTSetWindow( HWND hWndFocus, HWND hWndDeviceFullScreen, HWND hWndDeviceWindowed, bool bHandleMessages )
+{
+    HRESULT hr;
+ 
+    // Not allowed to call this from inside the device callbacks
+    if( GetDXUTState().GetInsideDeviceCallback() )
+        return DXUT_ERR_MSGBOX( L"DXUTCreateWindow", E_FAIL );
+
+    GetDXUTState().SetWindowCreateCalled( true );
+
+    // To avoid confusion, we do not allow any HWND to be NULL here.  The
+    // caller must pass in valid HWND for all three parameters.  The same
+    // HWND may be used for more than one parameter.
+    if( hWndFocus == NULL || hWndDeviceFullScreen == NULL || hWndDeviceWindowed == NULL )
+        return DXUT_ERR_MSGBOX( L"DXUTSetWindow", E_INVALIDARG );
+
+    // If subclassing the window, set the pointer to the local window procedure
+    if( bHandleMessages )
+    {
+        // Switch window procedures
+#ifdef _WIN64
+        LONG_PTR nResult = SetWindowLongPtr( hWndFocus, GWLP_WNDPROC, (LONG_PTR)DXUTStaticWndProc );
+#else
+        LONG_PTR nResult = SetWindowLongPtr( hWndFocus, GWLP_WNDPROC, (LONG)(LONG_PTR)DXUTStaticWndProc );
+#endif 
+ 
+        DWORD dwError = GetLastError();
+        if( nResult == 0 )
+            return DXUT_ERR_MSGBOX( L"SetWindowLongPtr", HRESULT_FROM_WIN32(dwError) );
+    }
+ 
+    if( !GetDXUTState().GetDXUTInited() ) 
+    {
+        // If DXUTInit() was already called and failed, then fail.
+        // DXUTInit() must first succeed for this function to succeed
+        if( GetDXUTState().GetDXUTInitCalled() )
+            return E_FAIL; 
+ 
+        // If DXUTInit() hasn't been called, then automatically call it
+        // with default params
+        hr = DXUTInit();
+        if( FAILED(hr) )
+            return hr;
+    }
+ 
+    WCHAR* strCachedWindowTitle = GetDXUTState().GetWindowTitle();
+    GetWindowText( hWndFocus, strCachedWindowTitle, 255 );
+    strCachedWindowTitle[255] = 0;
+   
+    HINSTANCE hInstance = (HINSTANCE) (LONG_PTR) GetWindowLongPtr( hWndFocus, GWLP_HINSTANCE ); 
+    GetDXUTState().SetHInstance( hInstance );
+    GetDXUTState().SetWindowCreatedWithDefaultPositions( false );
+    GetDXUTState().SetWindowCreated( true );
+    GetDXUTState().SetHWNDFocus( hWndFocus );
+    GetDXUTState().SetHWNDDeviceFullScreen( hWndDeviceFullScreen );
+    GetDXUTState().SetHWNDDeviceWindowed( hWndDeviceWindowed );
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Creates a Direct3D device. If DXUTCreateWindow() or DXUTSetWindow() has not already 
+// been called, it will call DXUTCreateWindow() with the default parameters.  
+// Instead of calling this, you can call DXUTSetDevice() or DXUTCreateDeviceFromSettings() 
+//--------------------------------------------------------------------------------------
+HRESULT DXUTCreateDevice( UINT AdapterOrdinal, bool bWindowed, 
+                          int nSuggestedWidth, int nSuggestedHeight,
+                          LPDXUTCALLBACKISDEVICEACCEPTABLE pCallbackIsDeviceAcceptable,
+                          LPDXUTCALLBACKMODIFYDEVICESETTINGS pCallbackModifyDeviceSettings,
+                          void* pUserContext )
+{
+    HRESULT hr;
+
+    // Not allowed to call this from inside the device callbacks
+    if( GetDXUTState().GetInsideDeviceCallback() )
+        return DXUT_ERR_MSGBOX( L"DXUTCreateWindow", E_FAIL );
+
+    // Record the function arguments in the global state 
+    GetDXUTState().SetIsDeviceAcceptableFunc( pCallbackIsDeviceAcceptable );
+    GetDXUTState().SetModifyDeviceSettingsFunc( pCallbackModifyDeviceSettings );
+    GetDXUTState().SetIsDeviceAcceptableFuncUserContext( pUserContext );
+    GetDXUTState().SetModifyDeviceSettingsFuncUserContext( pUserContext );
+
+    GetDXUTState().SetDeviceCreateCalled( true );
+
+    // If DXUTCreateWindow() or DXUTSetWindow() has not already been called, 
+    // then call DXUTCreateWindow() with the default parameters.         
+    if( !GetDXUTState().GetWindowCreated() ) 
+    {
+        // If DXUTCreateWindow() or DXUTSetWindow() was already called and failed, then fail.
+        // DXUTCreateWindow() or DXUTSetWindow() must first succeed for this function to succeed
+        if( GetDXUTState().GetWindowCreateCalled() )
+            return E_FAIL; 
+
+        // If DXUTCreateWindow() or DXUTSetWindow() hasn't been called, then 
+        // automatically call DXUTCreateWindow() with default params
+        hr = DXUTCreateWindow();
+        if( FAILED(hr) )
+            return hr;
+    }
+
+    // Force an enumeration with the new IsDeviceAcceptable callback
+    DXUTPrepareEnumerationObject( true );
+
+    DXUTMatchOptions matchOptions;
+    matchOptions.eAdapterOrdinal     = DXUTMT_PRESERVE_INPUT;
+    matchOptions.eDeviceType         = DXUTMT_IGNORE_INPUT;
+    matchOptions.eWindowed           = DXUTMT_PRESERVE_INPUT;
+    matchOptions.eAdapterFormat      = DXUTMT_IGNORE_INPUT;
+    matchOptions.eVertexProcessing   = DXUTMT_IGNORE_INPUT;
+    if( bWindowed || (nSuggestedWidth != 0 && nSuggestedHeight != 0) )
+        matchOptions.eResolution     = DXUTMT_CLOSEST_TO_INPUT;
+    else
+        matchOptions.eResolution     = DXUTMT_IGNORE_INPUT;
+    matchOptions.eBackBufferFormat   = DXUTMT_IGNORE_INPUT;
+    matchOptions.eBackBufferCount    = DXUTMT_IGNORE_INPUT;
+    matchOptions.eMultiSample        = DXUTMT_IGNORE_INPUT;
+    matchOptions.eSwapEffect         = DXUTMT_IGNORE_INPUT;
+    matchOptions.eDepthFormat        = DXUTMT_IGNORE_INPUT;
+    matchOptions.eStencilFormat      = DXUTMT_IGNORE_INPUT;
+    matchOptions.ePresentFlags       = DXUTMT_IGNORE_INPUT;
+    matchOptions.eRefreshRate        = DXUTMT_IGNORE_INPUT;
+    matchOptions.ePresentInterval    = DXUTMT_IGNORE_INPUT;
+
+    DXUTDeviceSettings deviceSettings;
+    ZeroMemory( &deviceSettings, sizeof(DXUTDeviceSettings) );
+    deviceSettings.AdapterOrdinal      = AdapterOrdinal;
+    deviceSettings.pp.Windowed         = bWindowed;
+    deviceSettings.pp.BackBufferWidth  = nSuggestedWidth;
+    deviceSettings.pp.BackBufferHeight = nSuggestedHeight;
+
+    // Override with settings from the command line
+    if( GetDXUTState().GetOverrideWidth() != 0 )
+        deviceSettings.pp.BackBufferWidth = GetDXUTState().GetOverrideWidth();
+    if( GetDXUTState().GetOverrideHeight() != 0 )
+        deviceSettings.pp.BackBufferHeight = GetDXUTState().GetOverrideHeight();
+
+    if( GetDXUTState().GetOverrideAdapterOrdinal() != -1 )
+        deviceSettings.AdapterOrdinal = GetDXUTState().GetOverrideAdapterOrdinal();
+
+    if( GetDXUTState().GetOverrideFullScreen() )
+    {
+        deviceSettings.pp.Windowed = FALSE;
+        if( GetDXUTState().GetOverrideWidth() == 0 && GetDXUTState().GetOverrideHeight() == 0 )
+            matchOptions.eResolution = DXUTMT_IGNORE_INPUT;
+    }
+    if( GetDXUTState().GetOverrideWindowed() )
+        deviceSettings.pp.Windowed = TRUE;
+
+    if( GetDXUTState().GetOverrideForceHAL() )
+    {
+        deviceSettings.DeviceType = D3DDEVTYPE_HAL;
+        matchOptions.eDeviceType = DXUTMT_PRESERVE_INPUT;
+    }
+    if( GetDXUTState().GetOverrideForceREF() )
+    {
+        deviceSettings.DeviceType = D3DDEVTYPE_REF;
+        matchOptions.eDeviceType = DXUTMT_PRESERVE_INPUT;
+    }
+
+    if( GetDXUTState().GetOverrideForcePureHWVP() )
+    {
+        deviceSettings.BehaviorFlags = D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_PUREDEVICE;
+        matchOptions.eVertexProcessing = DXUTMT_PRESERVE_INPUT;
+    }
+    else if( GetDXUTState().GetOverrideForceHWVP() )
+    {
+        deviceSettings.BehaviorFlags = D3DCREATE_HARDWARE_VERTEXPROCESSING;
+        matchOptions.eVertexProcessing = DXUTMT_PRESERVE_INPUT;
+    }
+    else if( GetDXUTState().GetOverrideForceSWVP() )
+    {
+        deviceSettings.BehaviorFlags = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
+        matchOptions.eVertexProcessing = DXUTMT_PRESERVE_INPUT;
+    }
+
+    if( GetDXUTState().GetOverrideForceVsync() == 0 )
+    {
+        deviceSettings.pp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
+        matchOptions.ePresentInterval = DXUTMT_PRESERVE_INPUT;
+    }
+    else if( GetDXUTState().GetOverrideForceVsync() == 1 )
+    {
+        deviceSettings.pp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
+        matchOptions.ePresentInterval = DXUTMT_PRESERVE_INPUT;
+    }
+
+    hr = DXUTFindValidDeviceSettings( &deviceSettings, &deviceSettings, &matchOptions );
+    if( FAILED(hr) ) // the call will fail if no valid devices were found
+    {
+        DXUTDisplayErrorMessage( hr );
+        return DXUT_ERR( L"DXUTFindValidDeviceSettings", hr );
+    }
+
+    // Change to a Direct3D device created from the new device settings.  
+    // If there is an existing device, then either reset or recreated the scene
+    hr = DXUTChangeDevice( &deviceSettings, NULL, false, true );
+    if( FAILED(hr) )
+        return hr;
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Passes a previously created Direct3D device for use by the framework.  
+// If DXUTCreateWindow() has not already been called, it will call it with the 
+// default parameters.  Instead of calling this, you can call DXUTCreateDevice() or 
+// DXUTCreateDeviceFromSettings() 
+//--------------------------------------------------------------------------------------
+HRESULT DXUTSetDevice( IDirect3DDevice9* pd3dDevice )
+{
+    HRESULT hr;
+
+    if( pd3dDevice == NULL )
+        return DXUT_ERR_MSGBOX( L"DXUTSetDevice", E_INVALIDARG );
+
+    // Not allowed to call this from inside the device callbacks
+    if( GetDXUTState().GetInsideDeviceCallback() )
+        return DXUT_ERR_MSGBOX( L"DXUTCreateWindow", E_FAIL );
+
+    GetDXUTState().SetDeviceCreateCalled( true );
+
+    // If DXUTCreateWindow() or DXUTSetWindow() has not already been called, 
+    // then call DXUTCreateWindow() with the default parameters.         
+    if( !GetDXUTState().GetWindowCreated() ) 
+    {
+        // If DXUTCreateWindow() or DXUTSetWindow() was already called and failed, then fail.
+        // DXUTCreateWindow() or DXUTSetWindow() must first succeed for this function to succeed
+        if( GetDXUTState().GetWindowCreateCalled() )
+            return E_FAIL; 
+
+        // If DXUTCreateWindow() or DXUTSetWindow() hasn't been called, then 
+        // automatically call DXUTCreateWindow() with default params
+        hr = DXUTCreateWindow();
+        if( FAILED(hr) )
+            return hr;
+    }
+
+    DXUTDeviceSettings* pDeviceSettings = new DXUTDeviceSettings;
+    if( pDeviceSettings == NULL )
+        return E_OUTOFMEMORY;
+    ZeroMemory( pDeviceSettings, sizeof(DXUTDeviceSettings) );
+
+    // Get the present params from the swap chain
+    IDirect3DSurface9* pBackBuffer = NULL;
+    hr = pd3dDevice->GetBackBuffer( 0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer );
+    if( SUCCEEDED(hr) )
+    {
+        IDirect3DSwapChain9* pSwapChain = NULL;
+        hr = pBackBuffer->GetContainer( IID_IDirect3DSwapChain9, (void**) &pSwapChain );
+        if( SUCCEEDED(hr) )
+        {
+            pSwapChain->GetPresentParameters( &pDeviceSettings->pp );
+            SAFE_RELEASE( pSwapChain );
+        }
+
+        SAFE_RELEASE( pBackBuffer );
+    }
+
+    D3DDEVICE_CREATION_PARAMETERS d3dCreationParams;
+    pd3dDevice->GetCreationParameters( &d3dCreationParams );
+
+    // Fill out the rest of the device settings struct
+    pDeviceSettings->AdapterOrdinal = d3dCreationParams.AdapterOrdinal;
+    pDeviceSettings->DeviceType     = d3dCreationParams.DeviceType;
+    DXUTFindAdapterFormat( pDeviceSettings->AdapterOrdinal, pDeviceSettings->DeviceType, 
+                           pDeviceSettings->pp.BackBufferFormat, pDeviceSettings->pp.Windowed, 
+                           &pDeviceSettings->AdapterFormat );
+    pDeviceSettings->BehaviorFlags  = d3dCreationParams.BehaviorFlags;
+
+    // Change to the Direct3D device passed in
+    hr = DXUTChangeDevice( pDeviceSettings, pd3dDevice, false, false );
+
+    delete pDeviceSettings;
+
+    if( FAILED(hr) ) 
+        return hr;
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Tells the framework to change to a device created from the passed in device settings
+// If DXUTCreateWindow() has not already been called, it will call it with the 
+// default parameters.  Instead of calling this, you can call DXUTCreateDevice() 
+// or DXUTSetDevice() 
+//--------------------------------------------------------------------------------------
+HRESULT DXUTCreateDeviceFromSettings( DXUTDeviceSettings* pDeviceSettings, bool bPreserveInput, bool bClipWindowToSingleAdapter )
+{
+    HRESULT hr;
+
+    GetDXUTState().SetDeviceCreateCalled( true );
+
+    // If DXUTCreateWindow() or DXUTSetWindow() has not already been called, 
+    // then call DXUTCreateWindow() with the default parameters.         
+    if( !GetDXUTState().GetWindowCreated() ) 
+    {
+        // If DXUTCreateWindow() or DXUTSetWindow() was already called and failed, then fail.
+        // DXUTCreateWindow() or DXUTSetWindow() must first succeed for this function to succeed
+        if( GetDXUTState().GetWindowCreateCalled() )
+            return E_FAIL; 
+
+        // If DXUTCreateWindow() or DXUTSetWindow() hasn't been called, then 
+        // automatically call DXUTCreateWindow() with default params
+        hr = DXUTCreateWindow();
+        if( FAILED(hr) )
+            return hr;
+    }
+
+    if( !bPreserveInput )
+    {
+        // If not preserving the input, then find the closest valid to it
+        DXUTMatchOptions matchOptions;
+        matchOptions.eAdapterOrdinal     = DXUTMT_CLOSEST_TO_INPUT;
+        matchOptions.eDeviceType         = DXUTMT_CLOSEST_TO_INPUT;
+        matchOptions.eWindowed           = DXUTMT_CLOSEST_TO_INPUT;
+        matchOptions.eAdapterFormat      = DXUTMT_CLOSEST_TO_INPUT;
+        matchOptions.eVertexProcessing   = DXUTMT_CLOSEST_TO_INPUT;
+        matchOptions.eResolution         = DXUTMT_CLOSEST_TO_INPUT;
+        matchOptions.eBackBufferFormat   = DXUTMT_CLOSEST_TO_INPUT;
+        matchOptions.eBackBufferCount    = DXUTMT_CLOSEST_TO_INPUT;
+        matchOptions.eMultiSample        = DXUTMT_CLOSEST_TO_INPUT;
+        matchOptions.eSwapEffect         = DXUTMT_CLOSEST_TO_INPUT;
+        matchOptions.eDepthFormat        = DXUTMT_CLOSEST_TO_INPUT;
+        matchOptions.eStencilFormat      = DXUTMT_CLOSEST_TO_INPUT;
+        matchOptions.ePresentFlags       = DXUTMT_CLOSEST_TO_INPUT;
+        matchOptions.eRefreshRate        = DXUTMT_CLOSEST_TO_INPUT;
+        matchOptions.ePresentInterval    = DXUTMT_CLOSEST_TO_INPUT;
+
+        hr = DXUTFindValidDeviceSettings( pDeviceSettings, pDeviceSettings, &matchOptions );
+        if( FAILED(hr) ) // the call will fail if no valid devices were found
+        {
+            DXUTDisplayErrorMessage( hr );
+            return DXUT_ERR( L"DXUTFindValidDeviceSettings", hr );
+        }
+    }
+
+    // Change to a Direct3D device created from the new device settings.  
+    // If there is an existing device, then either reset or recreate the scene
+    hr = DXUTChangeDevice( pDeviceSettings, NULL, false, bClipWindowToSingleAdapter );
+    if( FAILED(hr) )
+        return hr;
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Toggle between full screen and windowed
+//--------------------------------------------------------------------------------------
+HRESULT DXUTToggleFullScreen()
+{
+    HRESULT hr;
+
+    // Get the current device settings and flip the windowed state then
+    // find the closest valid device settings with this change
+    DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings();
+    deviceSettings.pp.Windowed = !deviceSettings.pp.Windowed;
+
+    DXUTMatchOptions matchOptions;
+    matchOptions.eAdapterOrdinal     = DXUTMT_PRESERVE_INPUT;
+    matchOptions.eDeviceType         = DXUTMT_CLOSEST_TO_INPUT;
+    matchOptions.eWindowed           = DXUTMT_PRESERVE_INPUT;
+    matchOptions.eAdapterFormat      = DXUTMT_IGNORE_INPUT;
+    matchOptions.eVertexProcessing   = DXUTMT_CLOSEST_TO_INPUT;
+    matchOptions.eBackBufferFormat   = DXUTMT_IGNORE_INPUT;
+    matchOptions.eBackBufferCount    = DXUTMT_CLOSEST_TO_INPUT;
+    matchOptions.eMultiSample        = DXUTMT_CLOSEST_TO_INPUT;
+    matchOptions.eSwapEffect         = DXUTMT_CLOSEST_TO_INPUT;
+    matchOptions.eDepthFormat        = DXUTMT_CLOSEST_TO_INPUT;
+    matchOptions.eStencilFormat      = DXUTMT_CLOSEST_TO_INPUT;
+    matchOptions.ePresentFlags       = DXUTMT_CLOSEST_TO_INPUT;
+    matchOptions.eRefreshRate        = DXUTMT_IGNORE_INPUT;
+    matchOptions.ePresentInterval    = DXUTMT_CLOSEST_TO_INPUT;
+
+    // Go back to previous state
+
+    UINT nWidth  = ( deviceSettings.pp.Windowed ) ? GetDXUTState().GetWindowBackBufferWidthAtModeChange() : GetDXUTState().GetFullScreenBackBufferWidthAtModeChange();
+    UINT nHeight = ( deviceSettings.pp.Windowed ) ? GetDXUTState().GetWindowBackBufferHeightAtModeChange() : GetDXUTState().GetFullScreenBackBufferHeightAtModeChange();
+    if( nWidth > 0 && nHeight > 0 )
+    {
+        matchOptions.eResolution = DXUTMT_CLOSEST_TO_INPUT;
+        deviceSettings.pp.BackBufferWidth = nWidth;
+        deviceSettings.pp.BackBufferHeight = nHeight;
+    }
+    else
+    {
+        // No previous data, so just switch to defaults
+        matchOptions.eResolution = DXUTMT_IGNORE_INPUT;
+    }
+    
+    hr = DXUTFindValidDeviceSettings( &deviceSettings, &deviceSettings, &matchOptions );
+    if( SUCCEEDED(hr) ) 
+    {
+        // Create a Direct3D device using the new device settings.  
+        // If there is an existing device, then it will either reset or recreate the scene.
+        hr = DXUTChangeDevice( &deviceSettings, NULL, false, false );
+
+        // If hr == E_ABORT, this means the app rejected the device settings in the ModifySettingsCallback so nothing changed
+        if( FAILED(hr) && (hr != E_ABORT) )
+        {
+            // Failed creating device, try to switch back.
+            deviceSettings.pp.Windowed = !deviceSettings.pp.Windowed;
+            UINT nWidth  = ( deviceSettings.pp.Windowed ) ? GetDXUTState().GetWindowBackBufferWidthAtModeChange() : GetDXUTState().GetFullScreenBackBufferWidthAtModeChange();
+            UINT nHeight = ( deviceSettings.pp.Windowed ) ? GetDXUTState().GetWindowBackBufferHeightAtModeChange() : GetDXUTState().GetFullScreenBackBufferHeightAtModeChange();
+            if( nWidth > 0 && nHeight > 0 )
+            {
+                matchOptions.eResolution = DXUTMT_CLOSEST_TO_INPUT;
+                deviceSettings.pp.BackBufferWidth = nWidth;
+                deviceSettings.pp.BackBufferHeight = nHeight;
+            }
+            else
+            {
+                matchOptions.eResolution = DXUTMT_IGNORE_INPUT;
+            }
+            
+            DXUTFindValidDeviceSettings( &deviceSettings, &deviceSettings, &matchOptions );
+
+            HRESULT hr2 = DXUTChangeDevice( &deviceSettings, NULL, false, false );
+            if( FAILED(hr2) )
+            {
+                // If this failed, then shutdown
+                DXUTShutdown();
+            }
+        }
+    }
+
+    return hr;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Toggle between HAL and REF
+//--------------------------------------------------------------------------------------
+HRESULT DXUTToggleREF()
+{
+    HRESULT hr;
+
+    DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings();
+    if( deviceSettings.DeviceType == D3DDEVTYPE_HAL )
+        deviceSettings.DeviceType = D3DDEVTYPE_REF;
+    else if( deviceSettings.DeviceType == D3DDEVTYPE_REF )
+        deviceSettings.DeviceType = D3DDEVTYPE_HAL;
+
+    DXUTMatchOptions matchOptions;
+    matchOptions.eAdapterOrdinal     = DXUTMT_PRESERVE_INPUT;
+    matchOptions.eDeviceType         = DXUTMT_PRESERVE_INPUT;
+    matchOptions.eWindowed           = DXUTMT_CLOSEST_TO_INPUT;
+    matchOptions.eAdapterFormat      = DXUTMT_CLOSEST_TO_INPUT;
+    matchOptions.eVertexProcessing   = DXUTMT_CLOSEST_TO_INPUT;
+    matchOptions.eResolution         = DXUTMT_CLOSEST_TO_INPUT;
+    matchOptions.eBackBufferFormat   = DXUTMT_CLOSEST_TO_INPUT;
+    matchOptions.eBackBufferCount    = DXUTMT_CLOSEST_TO_INPUT;
+    matchOptions.eMultiSample        = DXUTMT_CLOSEST_TO_INPUT;
+    matchOptions.eSwapEffect         = DXUTMT_CLOSEST_TO_INPUT;
+    matchOptions.eDepthFormat        = DXUTMT_CLOSEST_TO_INPUT;
+    matchOptions.eStencilFormat      = DXUTMT_CLOSEST_TO_INPUT;
+    matchOptions.ePresentFlags       = DXUTMT_CLOSEST_TO_INPUT;
+    matchOptions.eRefreshRate        = DXUTMT_CLOSEST_TO_INPUT;
+    matchOptions.ePresentInterval    = DXUTMT_CLOSEST_TO_INPUT;
+    
+    hr = DXUTFindValidDeviceSettings( &deviceSettings, &deviceSettings, &matchOptions );
+    if( SUCCEEDED(hr) ) 
+    {
+        // Create a Direct3D device using the new device settings.  
+        // If there is an existing device, then it will either reset or recreate the scene.
+        hr = DXUTChangeDevice( &deviceSettings, NULL, false, false );
+
+        // If hr == E_ABORT, this means the app rejected the device settings in the ModifySettingsCallback so nothing changed
+        if( FAILED( hr ) && (hr != E_ABORT) )
+        {
+            // Failed creating device, try to switch back.
+            if( deviceSettings.DeviceType == D3DDEVTYPE_HAL )
+                deviceSettings.DeviceType = D3DDEVTYPE_REF;
+            else if( deviceSettings.DeviceType == D3DDEVTYPE_REF )
+                deviceSettings.DeviceType = D3DDEVTYPE_HAL;
+
+            DXUTFindValidDeviceSettings( &deviceSettings, &deviceSettings, &matchOptions );
+
+            HRESULT hr2 = DXUTChangeDevice( &deviceSettings, NULL, false, false );
+            if( FAILED(hr2) )
+            {
+                // If this failed, then shutdown
+                DXUTShutdown();
+            }
+        }
+    }
+
+    return hr;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Internal helper function to prepare the enumeration object by creating it if it 
+// didn't already exist and enumerating if desired.
+//--------------------------------------------------------------------------------------
+CD3DEnumeration* DXUTPrepareEnumerationObject( bool bEnumerate )
+{
+    // Create a new CD3DEnumeration object and enumerate all devices unless its already been done
+    CD3DEnumeration* pd3dEnum = GetDXUTState().GetD3DEnumeration();
+    if( pd3dEnum == NULL )
+    {
+        pd3dEnum = DXUTGetEnumeration(); 
+        GetDXUTState().SetD3DEnumeration( pd3dEnum );
+
+        bEnumerate = true;
+    }
+
+    if( bEnumerate )
+    {
+        // Enumerate for each adapter all of the supported display modes, 
+        // device types, adapter formats, back buffer formats, window/full screen support, 
+        // depth stencil formats, multisampling types/qualities, and presentations intervals.
+        //
+        // For each combination of device type (HAL/REF), adapter format, back buffer format, and
+        // IsWindowed it will call the app's ConfirmDevice callback.  This allows the app
+        // to reject or allow that combination based on its caps/etc.  It also allows the 
+        // app to change the BehaviorFlags.  The BehaviorFlags defaults non-pure HWVP 
+        // if supported otherwise it will default to SWVP, however the app can change this 
+        // through the ConfirmDevice callback.
+        IDirect3D9* pD3D = DXUTGetD3DObject();
+        pd3dEnum->Enumerate( pD3D, GetDXUTState().GetIsDeviceAcceptableFunc(), GetDXUTState().GetIsDeviceAcceptableFuncUserContext() );
+    }
+    
+    return pd3dEnum;
+}
+
+
+//--------------------------------------------------------------------------------------
+// This function tries to find valid device settings based upon the input device settings 
+// struct and the match options.  For each device setting a match option in the 
+// DXUTMatchOptions struct specifies how the function makes decisions.  For example, if 
+// the caller wants a HAL device with a back buffer format of D3DFMT_A2B10G10R10 but the 
+// HAL device on the system does not support D3DFMT_A2B10G10R10 however a REF device is 
+// installed that does, then the function has a choice to either use REF or to change to 
+// a back buffer format to compatible with the HAL device.  The match options lets the 
+// caller control how these choices are made.
+//
+// Each match option must be one of the following types: 
+//      DXUTMT_IGNORE_INPUT: Uses the closest valid value to a default 
+//      DXUTMT_PRESERVE_INPUT: Uses the input without change, but may cause no valid device to be found
+//      DXUTMT_CLOSEST_TO_INPUT: Uses the closest valid value to the input 
+//
+// If pMatchOptions is NULL then, all of the match options are assumed to be DXUTMT_IGNORE_INPUT.  
+// The function returns failure if no valid device settings can be found otherwise 
+// the function returns success and the valid device settings are written to pOut.
+//--------------------------------------------------------------------------------------
+HRESULT DXUTFindValidDeviceSettings( DXUTDeviceSettings* pOut, DXUTDeviceSettings* pIn, 
+                                     DXUTMatchOptions* pMatchOptions )
+{
+    if( pOut == NULL )
+        return DXUT_ERR_MSGBOX( L"DXUTFindValidDeviceSettings", E_INVALIDARG );
+
+    CD3DEnumeration* pd3dEnum = DXUTPrepareEnumerationObject( false );
+    IDirect3D9*      pD3D     = DXUTGetD3DObject();
+
+    // Default to DXUTMT_IGNORE_INPUT for everything unless pMatchOptions isn't NULL
+    DXUTMatchOptions defaultMatchOptions;
+    if( NULL == pMatchOptions )
+    {
+        ZeroMemory( &defaultMatchOptions, sizeof(DXUTMatchOptions) );
+        pMatchOptions = &defaultMatchOptions;
+    }
+
+    // Build an optimal device settings structure based upon the match 
+    // options.  If the match option is set to ignore, then a optimal default value is used.
+    // The default value may not exist on the system, but later this will be taken 
+    // into account.
+    DXUTDeviceSettings optimalDeviceSettings;
+    DXUTBuildOptimalDeviceSettings( &optimalDeviceSettings, pIn, pMatchOptions );
+
+    // Find the best combination of:
+    //      Adapter Ordinal
+    //      Device Type
+    //      Adapter Format
+    //      Back Buffer Format
+    //      Windowed
+    // given what's available on the system and the match options combined with the device settings input.
+    // This combination of settings is encapsulated by the CD3DEnumDeviceSettingsCombo class.
+    float fBestRanking = -1.0f;
+    CD3DEnumDeviceSettingsCombo* pBestDeviceSettingsCombo = NULL;
+    D3DDISPLAYMODE adapterDesktopDisplayMode;
+
+    CGrowableArray<CD3DEnumAdapterInfo*>* pAdapterList = pd3dEnum->GetAdapterInfoList();
+    for( int iAdapter=0; iAdapter<pAdapterList->GetSize(); iAdapter++ )
+    {
+        CD3DEnumAdapterInfo* pAdapterInfo = pAdapterList->GetAt(iAdapter);
+
+        // Get the desktop display mode of adapter 
+        pD3D->GetAdapterDisplayMode( pAdapterInfo->AdapterOrdinal, &adapterDesktopDisplayMode );
+
+        // Enum all the device types supported by this adapter to find the best device settings
+        for( int iDeviceInfo=0; iDeviceInfo<pAdapterInfo->deviceInfoList.GetSize(); iDeviceInfo++ )
+        {
+            CD3DEnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt(iDeviceInfo);
+
+            // Enum all the device settings combinations.  A device settings combination is 
+            // a unique set of an adapter format, back buffer format, and IsWindowed.
+            for( int iDeviceCombo=0; iDeviceCombo<pDeviceInfo->deviceSettingsComboList.GetSize(); iDeviceCombo++ )
+            {
+                CD3DEnumDeviceSettingsCombo* pDeviceSettingsCombo = pDeviceInfo->deviceSettingsComboList.GetAt(iDeviceCombo);
+
+                // If windowed mode the adapter format has to be the same as the desktop 
+                // display mode format so skip any that don't match
+                if (pDeviceSettingsCombo->Windowed && (pDeviceSettingsCombo->AdapterFormat != adapterDesktopDisplayMode.Format))
+                    continue;
+
+                // Skip any combo that doesn't meet the preserve match options
+                if( false == DXUTDoesDeviceComboMatchPreserveOptions( pDeviceSettingsCombo, pIn, pMatchOptions ) )
+                    continue;           
+
+                // Get a ranking number that describes how closely this device combo matches the optimal combo
+                float fCurRanking = DXUTRankDeviceCombo( pDeviceSettingsCombo, &optimalDeviceSettings, &adapterDesktopDisplayMode );
+
+                // If this combo better matches the input device settings then save it
+                if( fCurRanking > fBestRanking )
+                {
+                    pBestDeviceSettingsCombo = pDeviceSettingsCombo;
+                    fBestRanking = fCurRanking;
+                }                
+            }
+        }
+    }
+
+    // If no best device combination was found then fail
+    if( pBestDeviceSettingsCombo == NULL ) 
+        return DXUTERR_NOCOMPATIBLEDEVICES;
+
+    // Using the best device settings combo found, build valid device settings taking heed of 
+    // the match options and the input device settings
+    DXUTDeviceSettings validDeviceSettings;
+    DXUTBuildValidDeviceSettings( &validDeviceSettings, pBestDeviceSettingsCombo, pIn, pMatchOptions );
+    *pOut = validDeviceSettings;
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Internal helper function to build a device settings structure based upon the match 
+// options.  If the match option is set to ignore, then a optimal default value is used.
+// The default value may not exist on the system, but later this will be taken 
+// into account.
+//--------------------------------------------------------------------------------------
+void DXUTBuildOptimalDeviceSettings( DXUTDeviceSettings* pOptimalDeviceSettings, 
+                                     DXUTDeviceSettings* pDeviceSettingsIn, 
+                                     DXUTMatchOptions* pMatchOptions )
+{
+    IDirect3D9* pD3D = DXUTGetD3DObject();
+    D3DDISPLAYMODE adapterDesktopDisplayMode;
+
+    ZeroMemory( pOptimalDeviceSettings, sizeof(DXUTDeviceSettings) ); 
+
+    //---------------------
+    // Adapter ordinal
+    //---------------------    
+    if( pMatchOptions->eAdapterOrdinal == DXUTMT_IGNORE_INPUT )
+        pOptimalDeviceSettings->AdapterOrdinal = D3DADAPTER_DEFAULT; 
+    else
+        pOptimalDeviceSettings->AdapterOrdinal = pDeviceSettingsIn->AdapterOrdinal;      
+
+    //---------------------
+    // Device type
+    //---------------------
+    if( pMatchOptions->eDeviceType == DXUTMT_IGNORE_INPUT )
+        pOptimalDeviceSettings->DeviceType = D3DDEVTYPE_HAL; 
+    else
+        pOptimalDeviceSettings->DeviceType = pDeviceSettingsIn->DeviceType;
+
+    //---------------------
+    // Windowed
+    //---------------------
+    if( pMatchOptions->eWindowed == DXUTMT_IGNORE_INPUT )
+        pOptimalDeviceSettings->pp.Windowed = TRUE; 
+    else
+        pOptimalDeviceSettings->pp.Windowed = pDeviceSettingsIn->pp.Windowed;
+
+    //---------------------
+    // Adapter format
+    //---------------------
+    if( pMatchOptions->eAdapterFormat == DXUTMT_IGNORE_INPUT )
+    {
+        // If windowed, default to the desktop display mode
+        // If fullscreen, default to the desktop display mode for quick mode change or 
+        // default to D3DFMT_X8R8G8B8 if the desktop display mode is < 32bit
+        pD3D->GetAdapterDisplayMode( pOptimalDeviceSettings->AdapterOrdinal, &adapterDesktopDisplayMode );
+        if( pOptimalDeviceSettings->pp.Windowed || DXUTColorChannelBits(adapterDesktopDisplayMode.Format) >= 8 )
+            pOptimalDeviceSettings->AdapterFormat = adapterDesktopDisplayMode.Format;
+        else
+            pOptimalDeviceSettings->AdapterFormat = D3DFMT_X8R8G8B8;
+    }
+    else
+    {
+        pOptimalDeviceSettings->AdapterFormat = pDeviceSettingsIn->AdapterFormat;
+    }
+
+    //---------------------
+    // Vertex processing
+    //---------------------
+    if( pMatchOptions->eVertexProcessing == DXUTMT_IGNORE_INPUT )
+        pOptimalDeviceSettings->BehaviorFlags = D3DCREATE_HARDWARE_VERTEXPROCESSING; 
+    else
+        pOptimalDeviceSettings->BehaviorFlags = pDeviceSettingsIn->BehaviorFlags;
+
+    //---------------------
+    // Resolution
+    //---------------------
+    if( pMatchOptions->eResolution == DXUTMT_IGNORE_INPUT )
+    {
+        // If windowed, default to 640x480
+        // If fullscreen, default to the desktop res for quick mode change
+        if( pOptimalDeviceSettings->pp.Windowed )
+        {
+            pOptimalDeviceSettings->pp.BackBufferWidth = 640;
+            pOptimalDeviceSettings->pp.BackBufferHeight = 480;
+        }
+        else
+        {
+            pD3D->GetAdapterDisplayMode( pOptimalDeviceSettings->AdapterOrdinal, &adapterDesktopDisplayMode );
+            pOptimalDeviceSettings->pp.BackBufferWidth = adapterDesktopDisplayMode.Width;
+            pOptimalDeviceSettings->pp.BackBufferHeight = adapterDesktopDisplayMode.Height;
+        }
+    }
+    else
+    {
+        pOptimalDeviceSettings->pp.BackBufferWidth = pDeviceSettingsIn->pp.BackBufferWidth;
+        pOptimalDeviceSettings->pp.BackBufferHeight = pDeviceSettingsIn->pp.BackBufferHeight;
+    }
+
+    //---------------------
+    // Back buffer format
+    //---------------------
+    if( pMatchOptions->eBackBufferFormat == DXUTMT_IGNORE_INPUT )
+        pOptimalDeviceSettings->pp.BackBufferFormat = pOptimalDeviceSettings->AdapterFormat; // Default to match the adapter format
+    else
+        pOptimalDeviceSettings->pp.BackBufferFormat = pDeviceSettingsIn->pp.BackBufferFormat;
+
+    //---------------------
+    // Back buffer count
+    //---------------------
+    if( pMatchOptions->eBackBufferCount == DXUTMT_IGNORE_INPUT )
+        pOptimalDeviceSettings->pp.BackBufferCount = 2; // Default to triple buffering for perf gain
+    else
+        pOptimalDeviceSettings->pp.BackBufferCount = pDeviceSettingsIn->pp.BackBufferCount;
+   
+    //---------------------
+    // Multisample
+    //---------------------
+    if( pMatchOptions->eMultiSample == DXUTMT_IGNORE_INPUT )
+    {
+        // Default to no multisampling 
+        pOptimalDeviceSettings->pp.MultiSampleType = D3DMULTISAMPLE_NONE;
+        pOptimalDeviceSettings->pp.MultiSampleQuality = 0; 
+    }
+    else
+    {
+        pOptimalDeviceSettings->pp.MultiSampleType = pDeviceSettingsIn->pp.MultiSampleType;
+        pOptimalDeviceSettings->pp.MultiSampleQuality = pDeviceSettingsIn->pp.MultiSampleQuality;
+    }
+
+    //---------------------
+    // Swap effect
+    //---------------------
+    if( pMatchOptions->eSwapEffect == DXUTMT_IGNORE_INPUT )
+        pOptimalDeviceSettings->pp.SwapEffect = D3DSWAPEFFECT_DISCARD; 
+    else
+        pOptimalDeviceSettings->pp.SwapEffect = pDeviceSettingsIn->pp.SwapEffect;
+
+    //---------------------
+    // Depth stencil 
+    //---------------------
+    if( pMatchOptions->eDepthFormat == DXUTMT_IGNORE_INPUT &&
+        pMatchOptions->eStencilFormat == DXUTMT_IGNORE_INPUT )
+    {
+        UINT nBackBufferBits = DXUTColorChannelBits( pOptimalDeviceSettings->pp.BackBufferFormat );
+        if( nBackBufferBits >= 8 )
+            pOptimalDeviceSettings->pp.AutoDepthStencilFormat = D3DFMT_D32; 
+        else
+            pOptimalDeviceSettings->pp.AutoDepthStencilFormat = D3DFMT_D16; 
+    }
+    else
+    {
+        pOptimalDeviceSettings->pp.AutoDepthStencilFormat = pDeviceSettingsIn->pp.AutoDepthStencilFormat;
+    }
+
+    //---------------------
+    // Present flags
+    //---------------------
+    if( pMatchOptions->ePresentFlags == DXUTMT_IGNORE_INPUT )
+        pOptimalDeviceSettings->pp.Flags = D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL;
+    else
+        pOptimalDeviceSettings->pp.Flags = pDeviceSettingsIn->pp.Flags;
+
+    //---------------------
+    // Refresh rate
+    //---------------------
+    if( pMatchOptions->eRefreshRate == DXUTMT_IGNORE_INPUT )
+        pOptimalDeviceSettings->pp.FullScreen_RefreshRateInHz = 0;
+    else
+        pOptimalDeviceSettings->pp.FullScreen_RefreshRateInHz = pDeviceSettingsIn->pp.FullScreen_RefreshRateInHz;
+
+    //---------------------
+    // Present interval
+    //---------------------
+    if( pMatchOptions->ePresentInterval == DXUTMT_IGNORE_INPUT )
+    {
+        // For windowed and fullscreen, default to D3DPRESENT_INTERVAL_DEFAULT
+        // which will wait for the vertical retrace period to prevent tearing.
+        // For benchmarking, use D3DPRESENT_INTERVAL_DEFAULT  which will
+        // will wait not for the vertical retrace period but may introduce tearing.
+        pOptimalDeviceSettings->pp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
+    }
+    else
+    {
+        pOptimalDeviceSettings->pp.PresentationInterval = pDeviceSettingsIn->pp.PresentationInterval;
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+// Returns false for any CD3DEnumDeviceSettingsCombo that doesn't meet the preserve 
+// match options against the input pDeviceSettingsIn.
+//--------------------------------------------------------------------------------------
+bool DXUTDoesDeviceComboMatchPreserveOptions( CD3DEnumDeviceSettingsCombo* pDeviceSettingsCombo, 
+                                                 DXUTDeviceSettings* pDeviceSettingsIn, 
+                                                 DXUTMatchOptions* pMatchOptions )
+{
+    //---------------------
+    // Adapter ordinal
+    //---------------------
+    if( pMatchOptions->eAdapterOrdinal == DXUTMT_PRESERVE_INPUT && 
+        (pDeviceSettingsCombo->AdapterOrdinal != pDeviceSettingsIn->AdapterOrdinal) )
+        return false;
+
+    //---------------------
+    // Device type
+    //---------------------
+    if( pMatchOptions->eDeviceType == DXUTMT_PRESERVE_INPUT && 
+        (pDeviceSettingsCombo->DeviceType != pDeviceSettingsIn->DeviceType) )
+        return false;
+
+    //---------------------
+    // Windowed
+    //---------------------
+    if( pMatchOptions->eWindowed == DXUTMT_PRESERVE_INPUT && 
+        (pDeviceSettingsCombo->Windowed != pDeviceSettingsIn->pp.Windowed) )
+        return false;
+
+    //---------------------
+    // Adapter format
+    //---------------------
+    if( pMatchOptions->eAdapterFormat == DXUTMT_PRESERVE_INPUT && 
+        (pDeviceSettingsCombo->AdapterFormat != pDeviceSettingsIn->AdapterFormat) )
+        return false;
+
+    //---------------------
+    // Vertex processing
+    //---------------------
+    // If keep VP and input has HWVP, then skip if this combo doesn't have HWTL 
+    if( pMatchOptions->eVertexProcessing == DXUTMT_PRESERVE_INPUT && 
+        ((pDeviceSettingsIn->BehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING) != 0) && 
+        ((pDeviceSettingsCombo->pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT) == 0) )
+        return false;
+
+    //---------------------
+    // Resolution
+    //---------------------
+    // If keep resolution then check that width and height supported by this combo
+    if( pMatchOptions->eResolution == DXUTMT_PRESERVE_INPUT )
+    {
+        bool bFound = false;
+        for( int i=0; i< pDeviceSettingsCombo->pAdapterInfo->displayModeList.GetSize(); i++ )
+        {
+            D3DDISPLAYMODE displayMode = pDeviceSettingsCombo->pAdapterInfo->displayModeList.GetAt( i );
+            if( displayMode.Format != pDeviceSettingsCombo->AdapterFormat )
+                continue; // Skip this display mode if it doesn't match the combo's adapter format
+
+            if( displayMode.Width == pDeviceSettingsIn->pp.BackBufferWidth &&
+                displayMode.Height == pDeviceSettingsIn->pp.BackBufferHeight )
+            {
+                bFound = true;
+                break;
+            }
+        }
+
+        // If the width and height are not supported by this combo, return false
+        if( !bFound )
+            return false;
+    }
+
+    //---------------------
+    // Back buffer format
+    //---------------------
+    if( pMatchOptions->eBackBufferFormat == DXUTMT_PRESERVE_INPUT && 
+        pDeviceSettingsCombo->BackBufferFormat != pDeviceSettingsIn->pp.BackBufferFormat )
+        return false;
+
+    //---------------------
+    // Back buffer count
+    //---------------------
+    // No caps for the back buffer count
+
+    //---------------------
+    // Multisample
+    //---------------------
+    if( pMatchOptions->eMultiSample == DXUTMT_PRESERVE_INPUT )
+    {
+        bool bFound = false;
+        for( int i=0; i<pDeviceSettingsCombo->multiSampleTypeList.GetSize(); i++ )
+        {
+            D3DMULTISAMPLE_TYPE msType = pDeviceSettingsCombo->multiSampleTypeList.GetAt(i);
+            DWORD msQuality  = pDeviceSettingsCombo->multiSampleQualityList.GetAt(i);
+
+            if( msType == pDeviceSettingsIn->pp.MultiSampleType &&
+                msQuality >= pDeviceSettingsIn->pp.MultiSampleQuality )
+            {
+                bFound = true;
+                break;
+            }
+        }
+
+        // If multisample type/quality not supported by this combo, then return false
+        if( !bFound )
+            return false;
+    }
+        
+    //---------------------
+    // Swap effect
+    //---------------------
+    // No caps for swap effects
+
+    //---------------------
+    // Depth stencil 
+    //---------------------
+    // If keep depth stencil format then check that the depth stencil format is supported by this combo
+    if( pMatchOptions->eDepthFormat == DXUTMT_PRESERVE_INPUT &&
+        pMatchOptions->eStencilFormat == DXUTMT_PRESERVE_INPUT )
+    {
+        if( pDeviceSettingsIn->pp.AutoDepthStencilFormat != D3DFMT_UNKNOWN &&
+            !pDeviceSettingsCombo->depthStencilFormatList.Contains( pDeviceSettingsIn->pp.AutoDepthStencilFormat ) )
+            return false;
+    }
+
+    // If keep depth format then check that the depth format is supported by this combo
+    if( pMatchOptions->eDepthFormat == DXUTMT_PRESERVE_INPUT &&
+        pDeviceSettingsIn->pp.AutoDepthStencilFormat != D3DFMT_UNKNOWN )
+    {
+        bool bFound = false;
+        UINT dwDepthBits = DXUTDepthBits( pDeviceSettingsIn->pp.AutoDepthStencilFormat );
+        for( int i=0; i<pDeviceSettingsCombo->depthStencilFormatList.GetSize(); i++ )
+        {
+            D3DFORMAT depthStencilFmt = pDeviceSettingsCombo->depthStencilFormatList.GetAt(i);
+            UINT dwCurDepthBits = DXUTDepthBits( depthStencilFmt );
+            if( dwCurDepthBits - dwDepthBits == 0)
+                bFound = true;
+        }
+
+        if( !bFound )
+            return false;
+    }
+
+    // If keep depth format then check that the depth format is supported by this combo
+    if( pMatchOptions->eStencilFormat == DXUTMT_PRESERVE_INPUT &&
+        pDeviceSettingsIn->pp.AutoDepthStencilFormat != D3DFMT_UNKNOWN )
+    {
+        bool bFound = false;
+        UINT dwStencilBits = DXUTStencilBits( pDeviceSettingsIn->pp.AutoDepthStencilFormat );
+        for( int i=0; i<pDeviceSettingsCombo->depthStencilFormatList.GetSize(); i++ )
+        {
+            D3DFORMAT depthStencilFmt = pDeviceSettingsCombo->depthStencilFormatList.GetAt(i);
+            UINT dwCurStencilBits = DXUTStencilBits( depthStencilFmt );
+            if( dwCurStencilBits - dwStencilBits == 0)
+                bFound = true;
+        }
+
+        if( !bFound )
+            return false;
+    }
+
+    //---------------------
+    // Present flags
+    //---------------------
+    // No caps for the present flags
+
+    //---------------------
+    // Refresh rate
+    //---------------------
+    // If keep refresh rate then check that the resolution is supported by this combo
+    if( pMatchOptions->eRefreshRate == DXUTMT_PRESERVE_INPUT )
+    {
+        bool bFound = false;
+        for( int i=0; i<pDeviceSettingsCombo->pAdapterInfo->displayModeList.GetSize(); i++ )
+        {
+            D3DDISPLAYMODE displayMode = pDeviceSettingsCombo->pAdapterInfo->displayModeList.GetAt( i );
+            if( displayMode.Format != pDeviceSettingsCombo->AdapterFormat )
+                continue;
+            if( displayMode.RefreshRate == pDeviceSettingsIn->pp.FullScreen_RefreshRateInHz )
+            {
+                bFound = true;
+                break;
+            }
+        }
+
+        // If refresh rate not supported by this combo, then return false
+        if( !bFound )
+            return false;
+    }
+
+    //---------------------
+    // Present interval
+    //---------------------
+    // If keep present interval then check that the present interval is supported by this combo
+    if( pMatchOptions->ePresentInterval == DXUTMT_PRESERVE_INPUT &&
+        !pDeviceSettingsCombo->presentIntervalList.Contains( pDeviceSettingsIn->pp.PresentationInterval ) )
+        return false;
+
+    return true;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Returns a ranking number that describes how closely this device 
+// combo matches the optimal combo based on the match options and the optimal device settings
+//--------------------------------------------------------------------------------------
+float DXUTRankDeviceCombo( CD3DEnumDeviceSettingsCombo* pDeviceSettingsCombo, 
+                           DXUTDeviceSettings* pOptimalDeviceSettings,
+                           D3DDISPLAYMODE* pAdapterDesktopDisplayMode )
+{
+    float fCurRanking = 0.0f; 
+
+    // Arbitrary weights.  Gives preference to the ordinal, device type, and windowed
+    const float fAdapterOrdinalWeight   = 1000.0f;
+    const float fDeviceTypeWeight       = 100.0f;
+    const float fWindowWeight           = 10.0f;
+    const float fAdapterFormatWeight    = 1.0f;
+    const float fVertexProcessingWeight = 1.0f;
+    const float fResolutionWeight       = 1.0f;
+    const float fBackBufferFormatWeight = 1.0f;
+    const float fMultiSampleWeight      = 1.0f;
+    const float fDepthStencilWeight     = 1.0f;
+    const float fRefreshRateWeight      = 1.0f;
+    const float fPresentIntervalWeight  = 1.0f;
+
+    //---------------------
+    // Adapter ordinal
+    //---------------------
+    if( pDeviceSettingsCombo->AdapterOrdinal == pOptimalDeviceSettings->AdapterOrdinal )
+        fCurRanking += fAdapterOrdinalWeight;
+
+    //---------------------
+    // Device type
+    //---------------------
+    if( pDeviceSettingsCombo->DeviceType == pOptimalDeviceSettings->DeviceType )
+        fCurRanking += fDeviceTypeWeight;
+    // Slightly prefer HAL 
+    if( pDeviceSettingsCombo->DeviceType == D3DDEVTYPE_HAL )
+        fCurRanking += 0.1f; 
+
+    //---------------------
+    // Windowed
+    //---------------------
+    if( pDeviceSettingsCombo->Windowed == pOptimalDeviceSettings->pp.Windowed )
+        fCurRanking += fWindowWeight;
+
+    //---------------------
+    // Adapter format
+    //---------------------
+    if( pDeviceSettingsCombo->AdapterFormat == pOptimalDeviceSettings->AdapterFormat )
+    {
+        fCurRanking += fAdapterFormatWeight;
+    }
+    else
+    {
+        int nBitDepthDelta = abs( (long) DXUTColorChannelBits(pDeviceSettingsCombo->AdapterFormat) -
+                                  (long) DXUTColorChannelBits(pOptimalDeviceSettings->AdapterFormat) );
+        float fScale = __max(0.9f - (float)nBitDepthDelta*0.2f, 0.0f);
+        fCurRanking += fScale * fAdapterFormatWeight;
+    }
+
+    if( !pDeviceSettingsCombo->Windowed )
+    {
+        // Slightly prefer when it matches the desktop format or is D3DFMT_X8R8G8B8
+        bool bAdapterOptimalMatch;
+        if( DXUTColorChannelBits(pAdapterDesktopDisplayMode->Format) >= 8 )
+            bAdapterOptimalMatch = (pDeviceSettingsCombo->AdapterFormat == pAdapterDesktopDisplayMode->Format);
+        else
+            bAdapterOptimalMatch = (pDeviceSettingsCombo->AdapterFormat == D3DFMT_X8R8G8B8);
+
+        if( bAdapterOptimalMatch )
+            fCurRanking += 0.1f;
+    }
+
+    //---------------------
+    // Vertex processing
+    //---------------------
+    if( (pOptimalDeviceSettings->BehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING) != 0 || 
+        (pOptimalDeviceSettings->BehaviorFlags & D3DCREATE_MIXED_VERTEXPROCESSING) != 0 )
+    {
+        if( (pDeviceSettingsCombo->pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT) != 0 )
+            fCurRanking += fVertexProcessingWeight;
+    }
+    // Slightly prefer HW T&L
+    if( (pDeviceSettingsCombo->pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT) != 0 )
+        fCurRanking += 0.1f;
+
+    //---------------------
+    // Resolution
+    //---------------------
+    bool bResolutionFound = false;
+    for( int idm = 0; idm < pDeviceSettingsCombo->pAdapterInfo->displayModeList.GetSize(); idm++ )
+    {
+        D3DDISPLAYMODE displayMode = pDeviceSettingsCombo->pAdapterInfo->displayModeList.GetAt( idm );
+        if( displayMode.Format != pDeviceSettingsCombo->AdapterFormat )
+            continue;
+        if( displayMode.Width == pOptimalDeviceSettings->pp.BackBufferWidth &&
+            displayMode.Height == pOptimalDeviceSettings->pp.BackBufferHeight )
+            bResolutionFound = true;
+    }
+    if( bResolutionFound )
+        fCurRanking += fResolutionWeight;
+
+    //---------------------
+    // Back buffer format
+    //---------------------
+    if( pDeviceSettingsCombo->BackBufferFormat == pOptimalDeviceSettings->pp.BackBufferFormat )
+    {
+        fCurRanking += fBackBufferFormatWeight;
+    }
+    else
+    {
+        int nBitDepthDelta = abs( (long) DXUTColorChannelBits(pDeviceSettingsCombo->BackBufferFormat) -
+                                  (long) DXUTColorChannelBits(pOptimalDeviceSettings->pp.BackBufferFormat) );
+        float fScale = __max(0.9f - (float)nBitDepthDelta*0.2f, 0.0f);
+        fCurRanking += fScale * fBackBufferFormatWeight;
+    }
+
+    // Check if this back buffer format is the same as 
+    // the adapter format since this is preferred.
+    bool bAdapterMatchesBB = (pDeviceSettingsCombo->BackBufferFormat == pDeviceSettingsCombo->AdapterFormat);
+    if( bAdapterMatchesBB )
+        fCurRanking += 0.1f;
+
+    //---------------------
+    // Back buffer count
+    //---------------------
+    // No caps for the back buffer count
+
+    //---------------------
+    // Multisample
+    //---------------------
+    bool bMultiSampleFound = false;
+    for( int i=0; i<pDeviceSettingsCombo->multiSampleTypeList.GetSize(); i++ )
+    {
+        D3DMULTISAMPLE_TYPE msType = pDeviceSettingsCombo->multiSampleTypeList.GetAt(i);
+        DWORD msQuality  = pDeviceSettingsCombo->multiSampleQualityList.GetAt(i);
+
+        if( msType == pOptimalDeviceSettings->pp.MultiSampleType &&
+            msQuality >= pOptimalDeviceSettings->pp.MultiSampleQuality )
+        {
+            bMultiSampleFound = true;
+            break;
+        }
+    }
+    if( bMultiSampleFound )
+        fCurRanking += fMultiSampleWeight;
+        
+    //---------------------
+    // Swap effect
+    //---------------------
+    // No caps for swap effects
+
+    //---------------------
+    // Depth stencil 
+    //---------------------
+    if( pDeviceSettingsCombo->depthStencilFormatList.Contains( pOptimalDeviceSettings->pp.AutoDepthStencilFormat ) )
+        fCurRanking += fDepthStencilWeight;
+
+    //---------------------
+    // Present flags
+    //---------------------
+    // No caps for the present flags
+
+    //---------------------
+    // Refresh rate
+    //---------------------
+    bool bRefreshFound = false;
+    for( int idm = 0; idm < pDeviceSettingsCombo->pAdapterInfo->displayModeList.GetSize(); idm++ )
+    {
+        D3DDISPLAYMODE displayMode = pDeviceSettingsCombo->pAdapterInfo->displayModeList.GetAt( idm );
+        if( displayMode.Format != pDeviceSettingsCombo->AdapterFormat )
+            continue;
+        if( displayMode.RefreshRate == pOptimalDeviceSettings->pp.FullScreen_RefreshRateInHz )
+            bRefreshFound = true;
+    }
+    if( bRefreshFound )
+        fCurRanking += fRefreshRateWeight;
+
+    //---------------------
+    // Present interval
+    //---------------------
+    // If keep present interval then check that the present interval is supported by this combo
+    if( pDeviceSettingsCombo->presentIntervalList.Contains( pOptimalDeviceSettings->pp.PresentationInterval ) )
+        fCurRanking += fPresentIntervalWeight;
+
+    return fCurRanking;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Builds valid device settings using the match options, the input device settings, and the 
+// best device settings combo found.
+//--------------------------------------------------------------------------------------
+void DXUTBuildValidDeviceSettings( DXUTDeviceSettings* pValidDeviceSettings, 
+                                   CD3DEnumDeviceSettingsCombo* pBestDeviceSettingsCombo, 
+                                   DXUTDeviceSettings* pDeviceSettingsIn, 
+                                   DXUTMatchOptions* pMatchOptions )
+{
+    IDirect3D9* pD3D = DXUTGetD3DObject();
+    D3DDISPLAYMODE adapterDesktopDisplayMode;
+    pD3D->GetAdapterDisplayMode( pBestDeviceSettingsCombo->AdapterOrdinal, &adapterDesktopDisplayMode );
+
+    // For each setting pick the best, taking into account the match options and 
+    // what's supported by the device
+
+    //---------------------
+    // Adapter Ordinal
+    //---------------------
+    // Just using pBestDeviceSettingsCombo->AdapterOrdinal
+
+    //---------------------
+    // Device Type
+    //---------------------
+    // Just using pBestDeviceSettingsCombo->DeviceType
+
+    //---------------------
+    // Windowed 
+    //---------------------
+    // Just using pBestDeviceSettingsCombo->Windowed
+
+    //---------------------
+    // Adapter Format
+    //---------------------
+    // Just using pBestDeviceSettingsCombo->AdapterFormat
+
+    //---------------------
+    // Vertex processing
+    //---------------------
+    DWORD dwBestBehaviorFlags = 0;
+    if( pMatchOptions->eVertexProcessing == DXUTMT_PRESERVE_INPUT )   
+    {
+        dwBestBehaviorFlags = pDeviceSettingsIn->BehaviorFlags;
+    }
+    else if( pMatchOptions->eVertexProcessing == DXUTMT_IGNORE_INPUT )    
+    {
+        // The framework defaults to HWVP if available otherwise use SWVP
+        if ((pBestDeviceSettingsCombo->pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT) != 0)
+            dwBestBehaviorFlags |= D3DCREATE_HARDWARE_VERTEXPROCESSING;
+        else
+            dwBestBehaviorFlags |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;
+    }
+    else // if( pMatchOptions->eVertexProcessing == DXUTMT_CLOSEST_TO_INPUT )    
+    {
+        // Default to input, and fallback to SWVP if HWVP not available 
+        dwBestBehaviorFlags = pDeviceSettingsIn->BehaviorFlags;
+        if ((pBestDeviceSettingsCombo->pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT) == 0 && 
+            ( (dwBestBehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING) != 0 || 
+              (dwBestBehaviorFlags & D3DCREATE_MIXED_VERTEXPROCESSING) != 0) )
+        {
+            dwBestBehaviorFlags &= ~D3DCREATE_HARDWARE_VERTEXPROCESSING;
+            dwBestBehaviorFlags &= ~D3DCREATE_MIXED_VERTEXPROCESSING;
+            dwBestBehaviorFlags |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;
+        }
+
+        // One of these must be selected
+        if( (dwBestBehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING) == 0 &&
+            (dwBestBehaviorFlags & D3DCREATE_MIXED_VERTEXPROCESSING) == 0 &&
+            (dwBestBehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING) == 0 )
+        {
+            if ((pBestDeviceSettingsCombo->pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT) != 0)
+                dwBestBehaviorFlags |= D3DCREATE_HARDWARE_VERTEXPROCESSING;
+            else
+                dwBestBehaviorFlags |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;
+        }
+    }
+
+    //---------------------
+    // Resolution
+    //---------------------
+    D3DDISPLAYMODE bestDisplayMode;  
+    if( pMatchOptions->eResolution == DXUTMT_PRESERVE_INPUT )   
+    {
+        bestDisplayMode.Width = pDeviceSettingsIn->pp.BackBufferWidth;
+        bestDisplayMode.Height = pDeviceSettingsIn->pp.BackBufferHeight;
+    }
+    else 
+    {
+        D3DDISPLAYMODE displayModeIn;  
+        if( pMatchOptions->eResolution == DXUTMT_CLOSEST_TO_INPUT &&
+            pDeviceSettingsIn )   
+        {
+            displayModeIn.Width = pDeviceSettingsIn->pp.BackBufferWidth;
+            displayModeIn.Height = pDeviceSettingsIn->pp.BackBufferHeight;
+        }
+        else // if( pMatchOptions->eResolution == DXUTMT_IGNORE_INPUT )   
+        {
+            if( pBestDeviceSettingsCombo->Windowed )
+            {
+                // The framework defaults to 640x480 for windowed
+                displayModeIn.Width = 640;
+                displayModeIn.Height = 480;
+            }
+            else
+            {
+                // The framework defaults to desktop resolution for fullscreen to try to avoid slow mode change
+                displayModeIn.Width = adapterDesktopDisplayMode.Width;
+                displayModeIn.Height = adapterDesktopDisplayMode.Height;
+            }
+        }
+
+        // Call a helper function to find the closest valid display mode to the optimal 
+        DXUTFindValidResolution( pBestDeviceSettingsCombo, displayModeIn, &bestDisplayMode );
+    }
+
+    //---------------------
+    // Back Buffer Format
+    //---------------------
+    // Just using pBestDeviceSettingsCombo->BackBufferFormat
+
+    //---------------------
+    // Back buffer count
+    //---------------------
+    UINT bestBackBufferCount;
+    if( pMatchOptions->eBackBufferCount == DXUTMT_PRESERVE_INPUT )   
+    {
+        bestBackBufferCount = pDeviceSettingsIn->pp.BackBufferCount;
+    }
+    else if( pMatchOptions->eBackBufferCount == DXUTMT_IGNORE_INPUT )   
+    {
+        // The framework defaults to triple buffering 
+        bestBackBufferCount = 2;
+    }
+    else // if( pMatchOptions->eBackBufferCount == DXUTMT_CLOSEST_TO_INPUT )   
+    {
+        bestBackBufferCount = pDeviceSettingsIn->pp.BackBufferCount;
+        if( bestBackBufferCount > 3 )
+            bestBackBufferCount = 3;
+        if( bestBackBufferCount < 1 )
+            bestBackBufferCount = 1;
+    }
+    
+    //---------------------
+    // Multisample
+    //---------------------
+    D3DMULTISAMPLE_TYPE bestMultiSampleType;
+    DWORD bestMultiSampleQuality;
+    if( pDeviceSettingsIn && pDeviceSettingsIn->pp.SwapEffect != D3DSWAPEFFECT_DISCARD )
+    {
+        // Swap effect is not set to discard so multisampling has to off
+        bestMultiSampleType = D3DMULTISAMPLE_NONE;
+        bestMultiSampleQuality = 0;
+    }
+    else
+    {
+        if( pMatchOptions->eMultiSample == DXUTMT_PRESERVE_INPUT )   
+        {
+            bestMultiSampleType    = pDeviceSettingsIn->pp.MultiSampleType;
+            bestMultiSampleQuality = pDeviceSettingsIn->pp.MultiSampleQuality;
+        }
+        else if( pMatchOptions->eMultiSample == DXUTMT_IGNORE_INPUT )   
+        {
+            // Default to no multisampling (always supported)
+            bestMultiSampleType = D3DMULTISAMPLE_NONE;
+            bestMultiSampleQuality = 0;
+        }
+        else if( pMatchOptions->eMultiSample == DXUTMT_CLOSEST_TO_INPUT )   
+        {
+            // Default to no multisampling (always supported)
+            bestMultiSampleType = D3DMULTISAMPLE_NONE;
+            bestMultiSampleQuality = 0;
+
+            for( int i=0; i < pBestDeviceSettingsCombo->multiSampleTypeList.GetSize(); i++ )
+            {
+                D3DMULTISAMPLE_TYPE type = pBestDeviceSettingsCombo->multiSampleTypeList.GetAt(i);
+                DWORD qualityLevels = pBestDeviceSettingsCombo->multiSampleQualityList.GetAt(i);
+                
+                // Check whether supported type is closer to the input than our current best
+                if( abs(type - pDeviceSettingsIn->pp.MultiSampleType) < abs(bestMultiSampleType - pDeviceSettingsIn->pp.MultiSampleType) )
+                {
+                    bestMultiSampleType = type; 
+                    bestMultiSampleQuality = __min( qualityLevels-1, pDeviceSettingsIn->pp.MultiSampleQuality );
+                }
+            }
+        }
+        else
+        {
+            // Error case
+            bestMultiSampleType = D3DMULTISAMPLE_NONE;
+            bestMultiSampleQuality = 0;
+        }
+    }
+
+    //---------------------
+    // Swap effect
+    //---------------------
+    D3DSWAPEFFECT bestSwapEffect;
+    if( pMatchOptions->eSwapEffect == DXUTMT_PRESERVE_INPUT )   
+    {
+        bestSwapEffect = pDeviceSettingsIn->pp.SwapEffect;
+    }
+    else if( pMatchOptions->eSwapEffect == DXUTMT_IGNORE_INPUT )   
+    {
+        bestSwapEffect = D3DSWAPEFFECT_DISCARD;
+    }
+    else // if( pMatchOptions->eSwapEffect == DXUTMT_CLOSEST_TO_INPUT )   
+    {
+        bestSwapEffect = pDeviceSettingsIn->pp.SwapEffect;
+
+        // Swap effect has to be one of these 3
+        if( bestSwapEffect != D3DSWAPEFFECT_DISCARD &&
+            bestSwapEffect != D3DSWAPEFFECT_FLIP &&
+            bestSwapEffect != D3DSWAPEFFECT_COPY )
+        {
+            bestSwapEffect = D3DSWAPEFFECT_DISCARD;
+        }
+    }
+
+    //---------------------
+    // Depth stencil 
+    //---------------------
+    D3DFORMAT bestDepthStencilFormat;
+    BOOL bestEnableAutoDepthStencil;
+
+    CGrowableArray< int > depthStencilRanking;
+    depthStencilRanking.SetSize( pBestDeviceSettingsCombo->depthStencilFormatList.GetSize() );
+
+    UINT dwBackBufferBitDepth = DXUTColorChannelBits( pBestDeviceSettingsCombo->BackBufferFormat );       
+    UINT dwInputDepthBitDepth = 0;
+    if( pDeviceSettingsIn )
+        dwInputDepthBitDepth = DXUTDepthBits( pDeviceSettingsIn->pp.AutoDepthStencilFormat );
+
+    for( int i=0; i<pBestDeviceSettingsCombo->depthStencilFormatList.GetSize(); i++ )
+    {
+        D3DFORMAT curDepthStencilFmt = pBestDeviceSettingsCombo->depthStencilFormatList.GetAt(i);
+        DWORD dwCurDepthBitDepth = DXUTDepthBits( curDepthStencilFmt );
+        int nRanking;
+
+        if( pMatchOptions->eDepthFormat == DXUTMT_PRESERVE_INPUT )
+        {                       
+            // Need to match bit depth of input
+            if(dwCurDepthBitDepth == dwInputDepthBitDepth)
+                nRanking = 0;
+            else
+                nRanking = 10000;
+        }
+        else if( pMatchOptions->eDepthFormat == DXUTMT_IGNORE_INPUT )
+        {
+            // Prefer match of backbuffer bit depth
+            nRanking = abs((int)dwCurDepthBitDepth - (int)dwBackBufferBitDepth*4);
+        }
+        else // if( pMatchOptions->eDepthFormat == DXUTMT_CLOSEST_TO_INPUT )
+        {
+            // Prefer match of input depth format bit depth
+            nRanking = abs((int)dwCurDepthBitDepth - (int)dwInputDepthBitDepth);
+        }
+
+        depthStencilRanking.Add( nRanking );
+    }
+
+    UINT dwInputStencilBitDepth = 0;
+    if( pDeviceSettingsIn )
+        dwInputStencilBitDepth = DXUTStencilBits( pDeviceSettingsIn->pp.AutoDepthStencilFormat );
+
+    for( int i=0; i<pBestDeviceSettingsCombo->depthStencilFormatList.GetSize(); i++ )
+    {
+        D3DFORMAT curDepthStencilFmt = pBestDeviceSettingsCombo->depthStencilFormatList.GetAt(i);
+        int nRanking = depthStencilRanking.GetAt(i);
+        DWORD dwCurStencilBitDepth = DXUTStencilBits( curDepthStencilFmt );
+
+        if( pMatchOptions->eStencilFormat == DXUTMT_PRESERVE_INPUT )
+        {                       
+            // Need to match bit depth of input
+            if(dwCurStencilBitDepth == dwInputStencilBitDepth)
+                nRanking += 0;
+            else
+                nRanking += 10000;
+        }
+        else if( pMatchOptions->eStencilFormat == DXUTMT_IGNORE_INPUT )
+        {
+            // Prefer 0 stencil bit depth
+            nRanking += dwCurStencilBitDepth;
+        }
+        else // if( pMatchOptions->eStencilFormat == DXUTMT_CLOSEST_TO_INPUT )
+        {
+            // Prefer match of input stencil format bit depth
+            nRanking += abs((int)dwCurStencilBitDepth - (int)dwInputStencilBitDepth);
+        }
+
+        depthStencilRanking.SetAt( i, nRanking );
+    }
+
+    int nBestRanking = 100000;
+    int nBestIndex = -1;
+    for( int i=0; i<pBestDeviceSettingsCombo->depthStencilFormatList.GetSize(); i++ )
+    {
+        int nRanking = depthStencilRanking.GetAt(i);
+        if( nRanking < nBestRanking )
+        {
+            nBestRanking = nRanking;
+            nBestIndex = i;
+        }
+    }
+
+    if( nBestIndex >= 0 )
+    {
+        bestDepthStencilFormat = pBestDeviceSettingsCombo->depthStencilFormatList.GetAt(nBestIndex);
+        bestEnableAutoDepthStencil = true;
+    }
+    else
+    {
+        bestDepthStencilFormat = D3DFMT_UNKNOWN;
+        bestEnableAutoDepthStencil = false;
+    }
+
+
+    //---------------------
+    // Present flags
+    //---------------------
+    DWORD dwBestFlags;
+    if( pMatchOptions->ePresentFlags == DXUTMT_PRESERVE_INPUT )   
+    {
+        dwBestFlags = pDeviceSettingsIn->pp.Flags;
+    }
+    else if( pMatchOptions->ePresentFlags == DXUTMT_IGNORE_INPUT )   
+    {
+        dwBestFlags = 0;
+        if( bestEnableAutoDepthStencil )
+            dwBestFlags = D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL;            
+    }
+    else // if( pMatchOptions->ePresentFlags == DXUTMT_CLOSEST_TO_INPUT )   
+    {
+        dwBestFlags = pDeviceSettingsIn->pp.Flags;
+        if( bestEnableAutoDepthStencil )
+            dwBestFlags |= D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL;
+    }
+
+    //---------------------
+    // Refresh rate
+    //---------------------
+    if( pBestDeviceSettingsCombo->Windowed )
+    {
+        // Must be 0 for windowed
+        bestDisplayMode.RefreshRate = 0;
+    }
+    else
+    {
+        if( pMatchOptions->eRefreshRate == DXUTMT_PRESERVE_INPUT )   
+        {
+            bestDisplayMode.RefreshRate = pDeviceSettingsIn->pp.FullScreen_RefreshRateInHz;
+        }
+        else 
+        {
+            UINT refreshRateMatch;
+            if( pMatchOptions->eRefreshRate == DXUTMT_CLOSEST_TO_INPUT )   
+            {
+                refreshRateMatch = pDeviceSettingsIn->pp.FullScreen_RefreshRateInHz;
+            }
+            else // if( pMatchOptions->eRefreshRate == DXUTMT_IGNORE_INPUT )   
+            {
+                refreshRateMatch = adapterDesktopDisplayMode.RefreshRate;
+            }
+
+            bestDisplayMode.RefreshRate = 0;
+
+            if( refreshRateMatch != 0 )
+            {
+                int nBestRefreshRanking = 100000;
+                CGrowableArray<D3DDISPLAYMODE>* pDisplayModeList = &pBestDeviceSettingsCombo->pAdapterInfo->displayModeList;
+                for( int iDisplayMode=0; iDisplayMode<pDisplayModeList->GetSize(); iDisplayMode++ )
+                {
+                    D3DDISPLAYMODE displayMode = pDisplayModeList->GetAt(iDisplayMode);                
+                    if( displayMode.Format != pBestDeviceSettingsCombo->AdapterFormat || 
+                        displayMode.Height != bestDisplayMode.Height ||
+                        displayMode.Width != bestDisplayMode.Width )
+                        continue; // Skip display modes that don't match 
+
+                    // Find the delta between the current refresh rate and the optimal refresh rate 
+                    int nCurRanking = abs((int)displayMode.RefreshRate - (int)refreshRateMatch);
+                                        
+                    if( nCurRanking < nBestRefreshRanking )
+                    {
+                        bestDisplayMode.RefreshRate = displayMode.RefreshRate;
+                        nBestRefreshRanking = nCurRanking;
+
+                        // Stop if perfect match found
+                        if( nBestRefreshRanking == 0 )
+                            break;
+                    }
+                }
+            }
+        }
+    }
+
+    //---------------------
+    // Present interval
+    //---------------------
+    UINT bestPresentInterval;
+    if( pMatchOptions->ePresentInterval == DXUTMT_PRESERVE_INPUT )   
+    {
+        bestPresentInterval = pDeviceSettingsIn->pp.PresentationInterval;
+    }
+    else if( pMatchOptions->ePresentInterval == DXUTMT_IGNORE_INPUT )   
+    {
+        // For windowed and fullscreen, default to D3DPRESENT_INTERVAL_DEFAULT
+        // which will wait for the vertical retrace period to prevent tearing.
+        // For benchmarking, use D3DPRESENT_INTERVAL_DEFAULT  which will
+        // will wait not for the vertical retrace period but may introduce tearing.
+        bestPresentInterval = D3DPRESENT_INTERVAL_DEFAULT;
+    }
+    else // if( pMatchOptions->ePresentInterval == DXUTMT_CLOSEST_TO_INPUT )   
+    {
+        if( pBestDeviceSettingsCombo->presentIntervalList.Contains( pDeviceSettingsIn->pp.PresentationInterval ) )
+        {
+            bestPresentInterval = pDeviceSettingsIn->pp.PresentationInterval;
+        }
+        else
+        {
+            bestPresentInterval = D3DPRESENT_INTERVAL_DEFAULT;
+        }
+    }
+
+    // Fill the device settings struct
+    ZeroMemory( pValidDeviceSettings, sizeof(DXUTDeviceSettings) );
+    pValidDeviceSettings->AdapterOrdinal                 = pBestDeviceSettingsCombo->AdapterOrdinal;
+    pValidDeviceSettings->DeviceType                     = pBestDeviceSettingsCombo->DeviceType;
+    pValidDeviceSettings->AdapterFormat                  = pBestDeviceSettingsCombo->AdapterFormat;
+    pValidDeviceSettings->BehaviorFlags                  = dwBestBehaviorFlags;
+    pValidDeviceSettings->pp.BackBufferWidth             = bestDisplayMode.Width;
+    pValidDeviceSettings->pp.BackBufferHeight            = bestDisplayMode.Height;
+    pValidDeviceSettings->pp.BackBufferFormat            = pBestDeviceSettingsCombo->BackBufferFormat;
+    pValidDeviceSettings->pp.BackBufferCount             = bestBackBufferCount;
+    pValidDeviceSettings->pp.MultiSampleType             = bestMultiSampleType;  
+    pValidDeviceSettings->pp.MultiSampleQuality          = bestMultiSampleQuality;
+    pValidDeviceSettings->pp.SwapEffect                  = bestSwapEffect;
+    pValidDeviceSettings->pp.hDeviceWindow               = pBestDeviceSettingsCombo->Windowed ? DXUTGetHWNDDeviceWindowed() : DXUTGetHWNDDeviceFullScreen();
+    pValidDeviceSettings->pp.Windowed                    = pBestDeviceSettingsCombo->Windowed;
+    pValidDeviceSettings->pp.EnableAutoDepthStencil      = bestEnableAutoDepthStencil;  
+    pValidDeviceSettings->pp.AutoDepthStencilFormat      = bestDepthStencilFormat;
+    pValidDeviceSettings->pp.Flags                       = dwBestFlags;                   
+    pValidDeviceSettings->pp.FullScreen_RefreshRateInHz  = bestDisplayMode.RefreshRate;
+    pValidDeviceSettings->pp.PresentationInterval        = bestPresentInterval;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Internal helper function to find the closest allowed display mode to the optimal 
+//--------------------------------------------------------------------------------------
+HRESULT DXUTFindValidResolution( CD3DEnumDeviceSettingsCombo* pBestDeviceSettingsCombo, 
+                                D3DDISPLAYMODE displayModeIn, D3DDISPLAYMODE* pBestDisplayMode )
+{
+    D3DDISPLAYMODE bestDisplayMode;
+    ZeroMemory( &bestDisplayMode, sizeof(D3DDISPLAYMODE) );
+    
+    if( pBestDeviceSettingsCombo->Windowed )
+    {
+        // In windowed mode, all resolutions are valid but restritions still apply 
+        // on the size of the window.  See DXUTChangeDevice() for details
+        *pBestDisplayMode = displayModeIn;
+    }
+    else
+    {
+        int nBestRanking = 100000;
+        int nCurRanking;
+        CGrowableArray<D3DDISPLAYMODE>* pDisplayModeList = &pBestDeviceSettingsCombo->pAdapterInfo->displayModeList;
+        for( int iDisplayMode=0; iDisplayMode<pDisplayModeList->GetSize(); iDisplayMode++ )
+        {
+            D3DDISPLAYMODE displayMode = pDisplayModeList->GetAt(iDisplayMode);
+
+            // Skip display modes that don't match the combo's adapter format
+            if( displayMode.Format != pBestDeviceSettingsCombo->AdapterFormat )
+                continue;
+
+            // Find the delta between the current width/height and the optimal width/height
+            nCurRanking = abs((int)displayMode.Width - (int)displayModeIn.Width) + 
+                          abs((int)displayMode.Height- (int)displayModeIn.Height);
+
+            if( nCurRanking < nBestRanking )
+            {
+                bestDisplayMode = displayMode;
+                nBestRanking = nCurRanking;
+
+                // Stop if perfect match found
+                if( nBestRanking == 0 )
+                    break;
+            }
+        }
+
+        if( bestDisplayMode.Width == 0 )
+        {
+            *pBestDisplayMode = displayModeIn;
+            return E_FAIL; // No valid display modes found
+        }
+
+        *pBestDisplayMode = bestDisplayMode;
+    }
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Internal helper function to return the adapter format from the first device settings 
+// combo that matches the passed adapter ordinal, device type, backbuffer format, and windowed.  
+//--------------------------------------------------------------------------------------
+HRESULT DXUTFindAdapterFormat( UINT AdapterOrdinal, D3DDEVTYPE DeviceType, D3DFORMAT BackBufferFormat, 
+                               BOOL Windowed, D3DFORMAT* pAdapterFormat )
+{
+    CD3DEnumeration* pd3dEnum = DXUTPrepareEnumerationObject();
+    CD3DEnumDeviceInfo* pDeviceInfo = pd3dEnum->GetDeviceInfo( AdapterOrdinal, DeviceType );
+    if( pDeviceInfo )
+    {
+        for( int iDeviceCombo=0; iDeviceCombo<pDeviceInfo->deviceSettingsComboList.GetSize(); iDeviceCombo++ )
+        {
+            CD3DEnumDeviceSettingsCombo* pDeviceSettingsCombo = pDeviceInfo->deviceSettingsComboList.GetAt(iDeviceCombo);
+            if( pDeviceSettingsCombo->BackBufferFormat == BackBufferFormat &&
+                pDeviceSettingsCombo->Windowed == Windowed )
+            {
+                // Return the adapter format from the first match
+                *pAdapterFormat = pDeviceSettingsCombo->AdapterFormat;
+                return S_OK;
+            }
+        }
+    }
+
+    *pAdapterFormat = BackBufferFormat;
+    return E_FAIL;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Change to a Direct3D device created from the device settings or passed in.
+// The framework will only reset if the device is similar to the previous device 
+// otherwise it will cleanup the previous device (if there is one) and recreate the 
+// scene using the app's device callbacks.
+//--------------------------------------------------------------------------------------
+HRESULT DXUTChangeDevice( DXUTDeviceSettings* pNewDeviceSettings, IDirect3DDevice9* pd3dDeviceFromApp, bool bForceRecreate, bool bClipWindowToSingleAdapter )
+{
+    HRESULT hr;
+    DXUTDeviceSettings* pOldDeviceSettings = GetDXUTState().GetCurrentDeviceSettings();
+
+    if( DXUTGetD3DObject() == NULL )
+        return S_FALSE;
+
+    // Make a copy of the pNewDeviceSettings on the heap
+    DXUTDeviceSettings* pNewDeviceSettingsOnHeap = new DXUTDeviceSettings;
+    if( pNewDeviceSettingsOnHeap == NULL )
+        return E_OUTOFMEMORY;
+    memcpy( pNewDeviceSettingsOnHeap, pNewDeviceSettings, sizeof(DXUTDeviceSettings) );
+    pNewDeviceSettings = pNewDeviceSettingsOnHeap;
+
+    // If the ModifyDeviceSettings callback is non-NULL, then call it to let the app 
+    // change the settings or reject the device change by returning false.
+    LPDXUTCALLBACKMODIFYDEVICESETTINGS pCallbackModifyDeviceSettings = GetDXUTState().GetModifyDeviceSettingsFunc();
+    if( pCallbackModifyDeviceSettings )
+    {
+        D3DCAPS9 caps;
+        IDirect3D9* pD3D = DXUTGetD3DObject();
+        pD3D->GetDeviceCaps( pNewDeviceSettings->AdapterOrdinal, pNewDeviceSettings->DeviceType, &caps );
+
+        bool bContinue = pCallbackModifyDeviceSettings( pNewDeviceSettings, &caps, GetDXUTState().GetModifyDeviceSettingsFuncUserContext() );
+        if( !bContinue )
+        {
+            // The app rejected the device change by returning false, so just use the current device if there is one.
+            if( pOldDeviceSettings == NULL )
+                DXUTDisplayErrorMessage( DXUTERR_NOCOMPATIBLEDEVICES );
+            SAFE_DELETE( pNewDeviceSettings );
+            return E_ABORT;
+        }
+        if( GetDXUTState().GetD3D() == NULL )
+        {
+            SAFE_DELETE( pNewDeviceSettings );
+            return S_FALSE;
+        }
+    }
+
+    GetDXUTState().SetCurrentDeviceSettings( pNewDeviceSettings );
+
+    DXUTPause( true, true );
+
+    // When a WM_SIZE message is received, it calls DXUTCheckForWindowSizeChange().
+    // A WM_SIZE message might be sent when adjusting the window, so tell 
+    // DXUTCheckForWindowSizeChange() to ignore size changes temporarily
+    GetDXUTState().SetIgnoreSizeChange( true );
+
+    // Update thread safety on/off depending on Direct3D device's thread safety
+    g_bThreadSafe = ((pNewDeviceSettings->BehaviorFlags & D3DCREATE_MULTITHREADED) != 0 );
+
+    // Only apply the cmd line overrides if this is the first device created
+    // and DXUTSetDevice() isn't used
+    if( NULL == pd3dDeviceFromApp && NULL == pOldDeviceSettings )
+    {
+        // Updates the device settings struct based on the cmd line args.  
+        // Warning: if the device doesn't support these new settings then CreateDevice() will fail.
+        DXUTUpdateDeviceSettingsWithOverrides( pNewDeviceSettings );
+    }
+
+    // Take note if the backbuffer width & height are 0 now as they will change after pd3dDevice->Reset()
+    bool bKeepCurrentWindowSize = false;
+    if( pNewDeviceSettings->pp.BackBufferWidth == 0 && pNewDeviceSettings->pp.BackBufferHeight == 0 )
+        bKeepCurrentWindowSize = true;
+
+    //////////////////////////
+    // Before reset
+    /////////////////////////
+    if( pNewDeviceSettings->pp.Windowed )
+    {
+        // Going to windowed mode
+
+        if( pOldDeviceSettings && !pOldDeviceSettings->pp.Windowed )
+        {
+            // Going from fullscreen -> windowed
+            GetDXUTState().SetFullScreenBackBufferWidthAtModeChange( pOldDeviceSettings->pp.BackBufferWidth );
+            GetDXUTState().SetFullScreenBackBufferHeightAtModeChange( pOldDeviceSettings->pp.BackBufferHeight );
+
+            // Restore windowed mode style
+            SetWindowLong( DXUTGetHWNDDeviceWindowed(), GWL_STYLE, GetDXUTState().GetWindowedStyleAtModeChange() );
+        }
+
+        // If different device windows are used for windowed mode and fullscreen mode,
+        // hide the fullscreen window so that it doesn't obscure the screen.
+        if( DXUTGetHWNDDeviceFullScreen() != DXUTGetHWNDDeviceWindowed() )
+            ShowWindow( DXUTGetHWNDDeviceFullScreen(), SW_HIDE );
+
+        // If using the same window for windowed and fullscreen mode, reattach menu if one exists
+        if( DXUTGetHWNDDeviceFullScreen() == DXUTGetHWNDDeviceWindowed() )
+        {
+            if( GetDXUTState().GetMenu() != NULL )
+                SetMenu( DXUTGetHWNDDeviceWindowed(), GetDXUTState().GetMenu() );
+        }
+    }
+    else 
+    {
+        // Going to fullscreen mode
+
+        if( pOldDeviceSettings == NULL || (pOldDeviceSettings && pOldDeviceSettings->pp.Windowed) )
+        {
+            // Transistioning to full screen mode from a standard window so 
+            // save current window position/size/style now in case the user toggles to windowed mode later 
+            WINDOWPLACEMENT* pwp = GetDXUTState().GetWindowedPlacement();
+            ZeroMemory( pwp, sizeof(WINDOWPLACEMENT) );
+            pwp->length = sizeof(WINDOWPLACEMENT);
+            GetWindowPlacement( DXUTGetHWNDDeviceWindowed(), pwp );
+            bool bIsTopmost = ( (GetWindowLong(DXUTGetHWNDDeviceWindowed(),GWL_EXSTYLE) & WS_EX_TOPMOST) != 0); 
+            GetDXUTState().SetTopmostWhileWindowed( bIsTopmost );
+            DWORD dwStyle = GetWindowLong( DXUTGetHWNDDeviceWindowed(), GWL_STYLE );
+            dwStyle &= ~WS_MAXIMIZE & ~WS_MINIMIZE; // remove minimize/maximize style
+            GetDXUTState().SetWindowedStyleAtModeChange( dwStyle );
+            if( pOldDeviceSettings )
+            {
+                GetDXUTState().SetWindowBackBufferWidthAtModeChange( pOldDeviceSettings->pp.BackBufferWidth );
+                GetDXUTState().SetWindowBackBufferHeightAtModeChange( pOldDeviceSettings->pp.BackBufferHeight );
+            }
+        }
+
+        // Hide the window to avoid animation of blank windows
+        ShowWindow( DXUTGetHWNDDeviceFullScreen(), SW_HIDE );
+
+        // Set FS window style
+        SetWindowLong( DXUTGetHWNDDeviceFullScreen(), GWL_STYLE, WS_POPUP|WS_SYSMENU );
+
+        // If using the same window for windowed and fullscreen mode, save and remove menu 
+        if( DXUTGetHWNDDeviceFullScreen() == DXUTGetHWNDDeviceWindowed() )
+        {
+            HMENU hMenu = GetMenu( DXUTGetHWNDDeviceFullScreen() );
+            GetDXUTState().SetMenu( hMenu );
+            SetMenu( DXUTGetHWNDDeviceFullScreen(), NULL );
+        }
+      
+        WINDOWPLACEMENT wpFullscreen;
+        ZeroMemory( &wpFullscreen, sizeof(WINDOWPLACEMENT) );
+        wpFullscreen.length = sizeof(WINDOWPLACEMENT);
+        GetWindowPlacement( DXUTGetHWNDDeviceFullScreen(), &wpFullscreen );
+        if( (wpFullscreen.flags & WPF_RESTORETOMAXIMIZED) != 0 )
+        {
+            // Restore the window to normal if the window was maximized then minimized.  This causes the 
+            // WPF_RESTORETOMAXIMIZED flag to be set which will cause SW_RESTORE to restore the 
+            // window from minimized to maxmized which isn't what we want
+            wpFullscreen.flags &= ~WPF_RESTORETOMAXIMIZED;
+            wpFullscreen.showCmd = SW_RESTORE;
+            SetWindowPlacement( DXUTGetHWNDDeviceFullScreen(), &wpFullscreen );
+        }
+    }
+
+    // If AdapterOrdinal and DeviceType are the same, we can just do a Reset().
+    // If they've changed, we need to do a complete device tear down/rebuild.
+    // Also only allow a reset if pd3dDevice is the same as the current device 
+    if( !bForceRecreate && 
+        (pd3dDeviceFromApp == NULL || pd3dDeviceFromApp == DXUTGetD3DDevice()) && 
+        DXUTGetD3DDevice() &&
+        pOldDeviceSettings &&
+        pOldDeviceSettings->AdapterOrdinal == pNewDeviceSettings->AdapterOrdinal &&
+        pOldDeviceSettings->DeviceType == pNewDeviceSettings->DeviceType &&
+        pOldDeviceSettings->BehaviorFlags == pNewDeviceSettings->BehaviorFlags )
+    {
+        // Reset the Direct3D device and call the app's device callbacks
+        hr = DXUTReset3DEnvironment();
+        if( FAILED(hr) )
+        {
+            if( D3DERR_DEVICELOST == hr )
+            {
+                // The device is lost, just mark it as so and continue on with 
+                // capturing the state and resizing the window/etc.
+                GetDXUTState().SetDeviceLost( true );
+            }
+            else if( DXUTERR_RESETTINGDEVICEOBJECTS == hr || 
+                     DXUTERR_MEDIANOTFOUND == hr )
+            {
+                // Something bad happened in the app callbacks
+                SAFE_DELETE( pOldDeviceSettings );
+                DXUTDisplayErrorMessage( hr );
+                DXUTShutdown();
+                return hr;
+            }
+            else // DXUTERR_RESETTINGDEVICE
+            {
+                // Reset failed and the device wasn't lost and it wasn't the apps fault, 
+                // so recreate the device to try to recover
+                GetDXUTState().SetCurrentDeviceSettings( pOldDeviceSettings );
+                if( FAILED( DXUTChangeDevice( pNewDeviceSettings, pd3dDeviceFromApp, true, bClipWindowToSingleAdapter ) ) )
+                {
+                    // If that fails, then shutdown
+                    SAFE_DELETE( pOldDeviceSettings );
+                    DXUTShutdown();
+                    return DXUTERR_CREATINGDEVICE;
+                }
+                else
+                {
+                    SAFE_DELETE( pOldDeviceSettings );
+                    return S_OK;
+                }
+            }
+        }
+    }
+    else
+    {
+        // Cleanup if not first device created
+        if( pOldDeviceSettings )
+            DXUTCleanup3DEnvironment( false );
+
+        // Create the D3D device and call the app's device callbacks
+        hr = DXUTCreate3DEnvironment( pd3dDeviceFromApp );
+        if( FAILED(hr) )
+        {
+            SAFE_DELETE( pOldDeviceSettings );
+            DXUTCleanup3DEnvironment();
+            DXUTDisplayErrorMessage( hr );
+            DXUTPause( false, false );
+            GetDXUTState().SetIgnoreSizeChange( false );
+            return hr;
+        }
+    }
+
+    // Enable/disable StickKeys shortcut, ToggleKeys shortcut, FilterKeys shortcut, and Windows key 
+    // to prevent accidental task switching
+    DXUTAllowShortcutKeys( ( pNewDeviceSettings->pp.Windowed  ) ? GetDXUTState().GetAllowShortcutKeysWhenWindowed() : GetDXUTState().GetAllowShortcutKeysWhenFullscreen() );
+
+    IDirect3D9* pD3D = DXUTGetD3DObject();
+    HMONITOR hAdapterMonitor = pD3D->GetAdapterMonitor( pNewDeviceSettings->AdapterOrdinal );
+    GetDXUTState().SetAdapterMonitor( hAdapterMonitor );
+
+    // Update the device stats text
+    DXUTUpdateStaticFrameStats();
+
+    if( pOldDeviceSettings && !pOldDeviceSettings->pp.Windowed && pNewDeviceSettings->pp.Windowed )
+    {
+        // Going from fullscreen -> windowed
+
+        // Restore the show state, and positions/size of the window to what it was
+        // It is important to adjust the window size 
+        // after resetting the device rather than beforehand to ensure 
+        // that the monitor resolution is correct and does not limit the size of the new window.
+        WINDOWPLACEMENT* pwp = GetDXUTState().GetWindowedPlacement();
+        SetWindowPlacement( DXUTGetHWNDDeviceWindowed(), pwp );
+
+        // Also restore the z-order of window to previous state
+        HWND hWndInsertAfter = GetDXUTState().GetTopmostWhileWindowed() ? HWND_TOPMOST : HWND_NOTOPMOST;
+        SetWindowPos( DXUTGetHWNDDeviceWindowed(), hWndInsertAfter, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOREDRAW|SWP_NOSIZE );
+    }
+
+    // Check to see if the window needs to be resized.  
+    // Handle cases where the window is minimized and maxmimized as well.
+    bool bNeedToResize = false;
+    if( pNewDeviceSettings->pp.Windowed && // only resize if in windowed mode
+        !bKeepCurrentWindowSize )          // only resize if pp.BackbufferWidth/Height were not 0
+    {
+        UINT nClientWidth;
+        UINT nClientHeight;    
+        if( IsIconic(DXUTGetHWNDDeviceWindowed()) )
+        {
+            // Window is currently minimized. To tell if it needs to resize, 
+            // get the client rect of window when its restored the 
+            // hard way using GetWindowPlacement()
+            WINDOWPLACEMENT wp;
+            ZeroMemory( &wp, sizeof(WINDOWPLACEMENT) );
+            wp.length = sizeof(WINDOWPLACEMENT);
+            GetWindowPlacement( DXUTGetHWNDDeviceWindowed(), &wp );
+
+            if( (wp.flags & WPF_RESTORETOMAXIMIZED) != 0 && wp.showCmd == SW_SHOWMINIMIZED )
+            {
+                // WPF_RESTORETOMAXIMIZED means that when the window is restored it will
+                // be maximized.  So maximize the window temporarily to get the client rect 
+                // when the window is maximized.  GetSystemMetrics( SM_CXMAXIMIZED ) will give this 
+                // information if the window is on the primary but this will work on multimon.
+                ShowWindow( DXUTGetHWNDDeviceWindowed(), SW_RESTORE );
+                RECT rcClient;
+                GetClientRect( DXUTGetHWNDDeviceWindowed(), &rcClient );
+                nClientWidth  = (UINT)(rcClient.right - rcClient.left);
+                nClientHeight = (UINT)(rcClient.bottom - rcClient.top);
+                ShowWindow( DXUTGetHWNDDeviceWindowed(), SW_MINIMIZE );
+            }
+            else
+            {
+                // Use wp.rcNormalPosition to get the client rect, but wp.rcNormalPosition 
+                // includes the window frame so subtract it
+                RECT rcFrame = {0};
+                AdjustWindowRect( &rcFrame, GetDXUTState().GetWindowedStyleAtModeChange(), GetDXUTState().GetMenu() != NULL );
+                LONG nFrameWidth = rcFrame.right - rcFrame.left;
+                LONG nFrameHeight = rcFrame.bottom - rcFrame.top;
+                nClientWidth  = (UINT)(wp.rcNormalPosition.right - wp.rcNormalPosition.left - nFrameWidth);
+                nClientHeight = (UINT)(wp.rcNormalPosition.bottom - wp.rcNormalPosition.top - nFrameHeight);
+            }
+        }
+        else
+        {
+            // Window is restored or maximized so just get its client rect
+            RECT rcClient;
+            GetClientRect( DXUTGetHWNDDeviceWindowed(), &rcClient );
+            nClientWidth  = (UINT)(rcClient.right - rcClient.left);
+            nClientHeight = (UINT)(rcClient.bottom - rcClient.top);
+        }
+
+        // Now that we know the client rect, compare it against the back buffer size
+        // to see if the client rect is already the right size
+        if( nClientWidth  != pNewDeviceSettings->pp.BackBufferWidth ||
+            nClientHeight != pNewDeviceSettings->pp.BackBufferHeight )
+        {
+            bNeedToResize = true;
+        }       
+
+        if( bClipWindowToSingleAdapter && !IsIconic(DXUTGetHWNDDeviceWindowed()) )
+        {
+            // Get the rect of the monitor attached to the adapter
+            MONITORINFO miAdapter;
+            miAdapter.cbSize = sizeof(MONITORINFO);
+            HMONITOR hAdapterMonitor = DXUTGetD3DObject()->GetAdapterMonitor( pNewDeviceSettings->AdapterOrdinal );
+            DXUTGetMonitorInfo( hAdapterMonitor, &miAdapter );
+            HMONITOR hWindowMonitor = DXUTMonitorFromWindow( DXUTGetHWND(), MONITOR_DEFAULTTOPRIMARY );
+
+            // Get the rect of the window
+            RECT rcWindow;
+            GetWindowRect( DXUTGetHWNDDeviceWindowed(), &rcWindow );
+
+            // Check if the window rect is fully inside the adapter's vitural screen rect
+            if( (rcWindow.left   < miAdapter.rcWork.left  ||
+                 rcWindow.right  > miAdapter.rcWork.right ||
+                 rcWindow.top    < miAdapter.rcWork.top   ||
+                 rcWindow.bottom > miAdapter.rcWork.bottom) )
+            {
+                if( hWindowMonitor == hAdapterMonitor && IsZoomed(DXUTGetHWNDDeviceWindowed()) )
+                {
+                    // If the window is maximized and on the same monitor as the adapter, then 
+                    // no need to clip to single adapter as the window is already clipped 
+                    // even though the rcWindow rect is outside of the miAdapter.rcWork
+                }
+                else
+                {
+                    bNeedToResize = true;
+                }
+            }
+        }
+    }
+
+    // Only resize window if needed 
+    if( bNeedToResize ) 
+    {
+        // Need to resize, so if window is maximized or minimized then restore the window
+        if( IsIconic(DXUTGetHWNDDeviceWindowed()) ) 
+            ShowWindow( DXUTGetHWNDDeviceWindowed(), SW_RESTORE );
+        if( IsZoomed(DXUTGetHWNDDeviceWindowed()) ) // doing the IsIconic() check first also handles the WPF_RESTORETOMAXIMIZED case
+            ShowWindow( DXUTGetHWNDDeviceWindowed(), SW_RESTORE );
+
+        if( bClipWindowToSingleAdapter )
+        {
+            // Get the rect of the monitor attached to the adapter
+            MONITORINFO miAdapter;
+            miAdapter.cbSize = sizeof(MONITORINFO);
+            DXUTGetMonitorInfo( DXUTGetD3DObject()->GetAdapterMonitor( pNewDeviceSettings->AdapterOrdinal ), &miAdapter );
+
+            // Get the rect of the monitor attached to the window
+            MONITORINFO miWindow;
+            miWindow.cbSize = sizeof(MONITORINFO);
+            DXUTGetMonitorInfo( DXUTMonitorFromWindow( DXUTGetHWND(), MONITOR_DEFAULTTOPRIMARY ), &miWindow );
+
+            // Do something reasonable if the BackBuffer size is greater than the monitor size
+            int nAdapterMonitorWidth = miAdapter.rcWork.right - miAdapter.rcWork.left;
+            int nAdapterMonitorHeight = miAdapter.rcWork.bottom - miAdapter.rcWork.top;
+
+            int nClientWidth = pNewDeviceSettings->pp.BackBufferWidth;
+            int nClientHeight = pNewDeviceSettings->pp.BackBufferHeight;
+
+            // Get the rect of the window
+            RECT rcWindow;
+            GetWindowRect( DXUTGetHWNDDeviceWindowed(), &rcWindow );
+
+            // Make a window rect with a client rect that is the same size as the backbuffer
+            RECT rcResizedWindow;
+            rcResizedWindow.left = 0;
+            rcResizedWindow.right = nClientWidth;
+            rcResizedWindow.top = 0;
+            rcResizedWindow.bottom = nClientHeight;
+            AdjustWindowRect( &rcResizedWindow, GetWindowLong( DXUTGetHWNDDeviceWindowed(), GWL_STYLE ), GetDXUTState().GetMenu() != NULL );
+
+            int nWindowWidth = rcResizedWindow.right - rcResizedWindow.left;
+            int nWindowHeight = rcResizedWindow.bottom - rcResizedWindow.top;
+
+            if( nWindowWidth > nAdapterMonitorWidth )
+                nWindowWidth = (nAdapterMonitorWidth - 0);
+            if( nWindowHeight > nAdapterMonitorHeight )
+                nWindowHeight = (nAdapterMonitorHeight - 0);
+
+            if( rcResizedWindow.left < miAdapter.rcWork.left ||
+                rcResizedWindow.top < miAdapter.rcWork.top ||
+                rcResizedWindow.right > miAdapter.rcWork.right ||
+                rcResizedWindow.bottom > miAdapter.rcWork.bottom )
+            {
+                int nWindowOffsetX = (nAdapterMonitorWidth - nWindowWidth) / 2;
+                int nWindowOffsetY = (nAdapterMonitorHeight - nWindowHeight) / 2;
+
+                rcResizedWindow.left = miAdapter.rcWork.left + nWindowOffsetX;
+                rcResizedWindow.top = miAdapter.rcWork.top + nWindowOffsetY;
+                rcResizedWindow.right = miAdapter.rcWork.left + nWindowOffsetX + nWindowWidth;
+                rcResizedWindow.bottom = miAdapter.rcWork.top + nWindowOffsetY + nWindowHeight;
+            }
+
+            // Resize the window.  It is important to adjust the window size 
+            // after resetting the device rather than beforehand to ensure 
+            // that the monitor resolution is correct and does not limit the size of the new window.
+            SetWindowPos( DXUTGetHWNDDeviceWindowed(), 0, rcResizedWindow.left, rcResizedWindow.top, nWindowWidth, nWindowHeight, SWP_NOZORDER );
+        }        
+        else
+        {      
+            // Make a window rect with a client rect that is the same size as the backbuffer
+            RECT rcWindow = {0};
+            rcWindow.right = (long)(pNewDeviceSettings->pp.BackBufferWidth);
+            rcWindow.bottom = (long)(pNewDeviceSettings->pp.BackBufferHeight);
+            AdjustWindowRect( &rcWindow, GetWindowLong( DXUTGetHWNDDeviceWindowed(), GWL_STYLE ), GetDXUTState().GetMenu() != NULL );
+
+            // Resize the window.  It is important to adjust the window size 
+            // after resetting the device rather than beforehand to ensure 
+            // that the monitor resolution is correct and does not limit the size of the new window.
+            int cx = (int)(rcWindow.right - rcWindow.left);
+            int cy = (int)(rcWindow.bottom - rcWindow.top);
+            SetWindowPos( DXUTGetHWNDDeviceWindowed(), 0, 0, 0, cx, cy, SWP_NOZORDER|SWP_NOMOVE );
+        }
+
+        // Its possible that the new window size is not what we asked for.  
+        // No window can be sized larger than the desktop, so see see if the Windows OS resized the 
+        // window to something smaller to fit on the desktop.  Also if WM_GETMINMAXINFO
+        // will put a limit on the smallest/largest window size.
+        RECT rcClient;
+        GetClientRect( DXUTGetHWNDDeviceWindowed(), &rcClient );
+        UINT nClientWidth  = (UINT)(rcClient.right - rcClient.left);
+        UINT nClientHeight = (UINT)(rcClient.bottom - rcClient.top);
+        if( nClientWidth  != pNewDeviceSettings->pp.BackBufferWidth ||
+            nClientHeight != pNewDeviceSettings->pp.BackBufferHeight )
+        {
+            // If its different, then resize the backbuffer again.  This time create a backbuffer that matches the 
+            // client rect of the current window w/o resizing the window.
+            DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings();
+            deviceSettings.pp.BackBufferWidth  = 0; 
+            deviceSettings.pp.BackBufferHeight = 0;
+            hr = DXUTChangeDevice( &deviceSettings, NULL, false, bClipWindowToSingleAdapter );
+            if( FAILED( hr ) )
+            {
+                SAFE_DELETE( pOldDeviceSettings );
+                DXUTCleanup3DEnvironment();
+                DXUTPause( false, false );
+                GetDXUTState().SetIgnoreSizeChange( false );
+                return hr;
+            }
+        }
+    }
+
+    // Make the window visible
+    if( !IsWindowVisible( DXUTGetHWND() ) )
+        ShowWindow( DXUTGetHWND(), SW_SHOW );
+
+    SAFE_DELETE( pOldDeviceSettings );
+    GetDXUTState().SetIgnoreSizeChange( false );
+    DXUTPause( false, false );
+    GetDXUTState().SetDeviceCreated( true );
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Low level keyboard hook to disable Windows key to prevent accidental task switching.  
+//--------------------------------------------------------------------------------------
+LRESULT CALLBACK LowLevelKeyboardProc( int nCode, WPARAM wParam, LPARAM lParam )
+{
+    if (nCode < 0 || nCode != HC_ACTION)  // do not process message 
+        return CallNextHookEx( GetDXUTState().GetKeyboardHook(), nCode, wParam, lParam); 
+
+    bool bEatKeystroke = false;
+    KBDLLHOOKSTRUCT* p = (KBDLLHOOKSTRUCT*)lParam;
+    switch (wParam) 
+    {
+        case WM_KEYDOWN:  
+        case WM_KEYUP:    
+        {
+            bEatKeystroke = ( !GetDXUTState().GetAllowShortcutKeys() && 
+                            (p->vkCode == VK_LWIN || p->vkCode == VK_RWIN) );
+            break;
+        }
+    }
+
+    if( bEatKeystroke )
+        return 1;
+    else
+        return CallNextHookEx( GetDXUTState().GetKeyboardHook(), nCode, wParam, lParam );
+}
+
+
+
+//--------------------------------------------------------------------------------------
+// Controls how DXUT behaves when fullscreen and windowed mode with regard to 
+// shortcut keys (Windows keys, StickyKeys shortcut, ToggleKeys shortcut, FilterKeys shortcut) 
+//--------------------------------------------------------------------------------------
+void DXUTSetShortcutKeySettings( bool bAllowWhenFullscreen, bool bAllowWhenWindowed )
+{
+    GetDXUTState().SetAllowShortcutKeysWhenWindowed( bAllowWhenWindowed );
+    GetDXUTState().SetAllowShortcutKeysWhenFullscreen( bAllowWhenFullscreen );
+
+    // DXUTInit() records initial accessibility states so don't change them until then
+    if( GetDXUTState().GetDXUTInited() )
+    {
+        if( DXUTIsWindowed() )
+            DXUTAllowShortcutKeys( GetDXUTState().GetAllowShortcutKeysWhenWindowed() );
+        else
+            DXUTAllowShortcutKeys( GetDXUTState().GetAllowShortcutKeysWhenFullscreen() );
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+// Enables/disables Windows keys, and disables or restores the StickyKeys/ToggleKeys/FilterKeys 
+// shortcut to help prevent accidental task switching
+//--------------------------------------------------------------------------------------
+void DXUTAllowShortcutKeys( bool bAllowKeys )
+{
+    GetDXUTState().SetAllowShortcutKeys( bAllowKeys );
+
+    if( bAllowKeys )
+    {
+        // Restore StickyKeys/etc to original state and enable Windows key      
+        STICKYKEYS sk = GetDXUTState().GetStartupStickyKeys();
+        TOGGLEKEYS tk = GetDXUTState().GetStartupToggleKeys();
+        FILTERKEYS fk = GetDXUTState().GetStartupFilterKeys();
+        
+        SystemParametersInfo(SPI_SETSTICKYKEYS, sizeof(STICKYKEYS), &sk, 0);
+        SystemParametersInfo(SPI_SETTOGGLEKEYS, sizeof(TOGGLEKEYS), &tk, 0);
+        SystemParametersInfo(SPI_SETFILTERKEYS, sizeof(FILTERKEYS), &fk, 0);
+
+        // Remove the keyboard hoook when it isn't needed to prevent any slow down of other apps
+        if( GetDXUTState().GetKeyboardHook() )
+        {
+            UnhookWindowsHookEx( GetDXUTState().GetKeyboardHook() );
+            GetDXUTState().SetKeyboardHook( NULL );
+        }                
+    }
+    else
+    {
+        // Set low level keyboard hook if haven't already
+        if( GetDXUTState().GetKeyboardHook() == NULL )
+        {
+            // Set the low-level hook procedure.  Only works on Windows 2000 and above
+            OSVERSIONINFO OSVersionInfo;
+            OSVersionInfo.dwOSVersionInfoSize = sizeof(OSVersionInfo);
+            GetVersionEx(&OSVersionInfo);
+            if( OSVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT && OSVersionInfo.dwMajorVersion > 4 )
+            {
+                HHOOK hKeyboardHook = SetWindowsHookEx( WH_KEYBOARD_LL, LowLevelKeyboardProc, GetModuleHandle(NULL), 0 );
+                GetDXUTState().SetKeyboardHook( hKeyboardHook );
+            }
+        }
+
+        // Disable StickyKeys/etc shortcuts but if the accessibility feature is on, 
+        // then leave the settings alone as its probably being usefully used
+
+        STICKYKEYS skOff = GetDXUTState().GetStartupStickyKeys();
+        if( (skOff.dwFlags & SKF_STICKYKEYSON) == 0 )
+        {
+            // Disable the hotkey and the confirmation
+            skOff.dwFlags &= ~SKF_HOTKEYACTIVE;
+            skOff.dwFlags &= ~SKF_CONFIRMHOTKEY;
+
+            SystemParametersInfo(SPI_SETSTICKYKEYS, sizeof(STICKYKEYS), &skOff, 0);
+        }
+
+        TOGGLEKEYS tkOff = GetDXUTState().GetStartupToggleKeys();
+        if( (tkOff.dwFlags & TKF_TOGGLEKEYSON) == 0 )
+        {
+            // Disable the hotkey and the confirmation
+            tkOff.dwFlags &= ~TKF_HOTKEYACTIVE;
+            tkOff.dwFlags &= ~TKF_CONFIRMHOTKEY;
+
+            SystemParametersInfo(SPI_SETTOGGLEKEYS, sizeof(TOGGLEKEYS), &tkOff, 0);
+        }
+
+        FILTERKEYS fkOff = GetDXUTState().GetStartupFilterKeys();
+        if( (fkOff.dwFlags & FKF_FILTERKEYSON) == 0 )
+        {
+            // Disable the hotkey and the confirmation
+            fkOff.dwFlags &= ~FKF_HOTKEYACTIVE;
+            fkOff.dwFlags &= ~FKF_CONFIRMHOTKEY;
+
+            SystemParametersInfo(SPI_SETFILTERKEYS, sizeof(FILTERKEYS), &fkOff, 0);
+        }
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+// Updates the device settings struct based on the cmd line args.  
+//--------------------------------------------------------------------------------------
+void DXUTUpdateDeviceSettingsWithOverrides( DXUTDeviceSettings* pDeviceSettings )
+{
+    if( GetDXUTState().GetOverrideAdapterOrdinal() != -1 )
+        pDeviceSettings->AdapterOrdinal = GetDXUTState().GetOverrideAdapterOrdinal();
+
+    if( GetDXUTState().GetOverrideFullScreen() )
+        pDeviceSettings->pp.Windowed = false;
+    if( GetDXUTState().GetOverrideWindowed() )
+        pDeviceSettings->pp.Windowed = true;
+
+    if( GetDXUTState().GetOverrideForceREF() )
+        pDeviceSettings->DeviceType = D3DDEVTYPE_REF;
+    else if( GetDXUTState().GetOverrideForceHAL() )
+        pDeviceSettings->DeviceType = D3DDEVTYPE_HAL;
+
+    if( GetDXUTState().GetOverrideWidth() != 0 )
+        pDeviceSettings->pp.BackBufferWidth = GetDXUTState().GetOverrideWidth();
+    if( GetDXUTState().GetOverrideHeight() != 0 )
+        pDeviceSettings->pp.BackBufferHeight = GetDXUTState().GetOverrideHeight();
+
+    if( GetDXUTState().GetOverrideForcePureHWVP() )
+    {
+        pDeviceSettings->BehaviorFlags &= ~D3DCREATE_SOFTWARE_VERTEXPROCESSING;
+        pDeviceSettings->BehaviorFlags |= D3DCREATE_HARDWARE_VERTEXPROCESSING;
+        pDeviceSettings->BehaviorFlags |= D3DCREATE_PUREDEVICE;
+    }
+    else if( GetDXUTState().GetOverrideForceHWVP() )
+    {
+        pDeviceSettings->BehaviorFlags &= ~D3DCREATE_SOFTWARE_VERTEXPROCESSING;
+        pDeviceSettings->BehaviorFlags &= ~D3DCREATE_PUREDEVICE;
+        pDeviceSettings->BehaviorFlags |= D3DCREATE_HARDWARE_VERTEXPROCESSING;
+    }
+    else if( GetDXUTState().GetOverrideForceSWVP() )
+    {
+        pDeviceSettings->BehaviorFlags &= ~D3DCREATE_HARDWARE_VERTEXPROCESSING;
+        pDeviceSettings->BehaviorFlags &= ~D3DCREATE_PUREDEVICE;
+        pDeviceSettings->BehaviorFlags |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+// Creates the 3D environment
+//--------------------------------------------------------------------------------------
+HRESULT DXUTCreate3DEnvironment( IDirect3DDevice9* pd3dDeviceFromApp )
+{
+    HRESULT hr = S_OK;
+
+    IDirect3DDevice9* pd3dDevice = NULL;
+    DXUTDeviceSettings* pNewDeviceSettings = GetDXUTState().GetCurrentDeviceSettings();
+
+    // Only create a Direct3D device if one hasn't been supplied by the app
+    if( pd3dDeviceFromApp == NULL )
+    {
+        // Try to create the device with the chosen settings
+        IDirect3D9* pD3D = DXUTGetD3DObject();
+        hr = pD3D->CreateDevice( pNewDeviceSettings->AdapterOrdinal, pNewDeviceSettings->DeviceType, 
+                                 DXUTGetHWNDFocus(), pNewDeviceSettings->BehaviorFlags,
+                                 &pNewDeviceSettings->pp, &pd3dDevice );
+        if( hr == D3DERR_DEVICELOST ) 
+        {
+            GetDXUTState().SetDeviceLost( true );
+            return S_OK;
+        }
+        else if( FAILED(hr) )
+        {
+            DXUT_ERR( L"CreateDevice", hr );
+            return DXUTERR_CREATINGDEVICE;
+        }
+    }
+    else
+    {
+        pd3dDeviceFromApp->AddRef();
+        pd3dDevice = pd3dDeviceFromApp;
+    }
+
+    GetDXUTState().SetD3DDevice( pd3dDevice );
+
+    // If switching to REF, set the exit code to 11.  If switching to HAL and exit code was 11, then set it back to 0.
+    if( pNewDeviceSettings->DeviceType == D3DDEVTYPE_REF && GetDXUTState().GetExitCode() == 0 )
+        GetDXUTState().SetExitCode(11);
+    else if( pNewDeviceSettings->DeviceType == D3DDEVTYPE_HAL && GetDXUTState().GetExitCode() == 11 )
+        GetDXUTState().SetExitCode(0);
+
+    // Update back buffer desc before calling app's device callbacks
+    DXUTUpdateBackBufferDesc();
+
+    // Setup cursor based on current settings (window/fullscreen mode, show cursor state, clip cursor state)
+    DXUTSetupCursor();
+
+    // Update GetDXUTState()'s copy of D3D caps 
+    D3DCAPS9* pd3dCaps = GetDXUTState().GetCaps();
+    DXUTGetD3DDevice()->GetDeviceCaps( pd3dCaps );
+
+    // Update the device stats text
+    CD3DEnumeration* pd3dEnum = DXUTPrepareEnumerationObject();
+    CD3DEnumAdapterInfo* pAdapterInfo = pd3dEnum->GetAdapterInfo( pNewDeviceSettings->AdapterOrdinal );
+    DXUTUpdateDeviceStats( pNewDeviceSettings->DeviceType, 
+                        pNewDeviceSettings->BehaviorFlags, 
+                        &pAdapterInfo->AdapterIdentifier );
+
+    // Call the resource cache created function
+    hr = DXUTGetGlobalResourceCache().OnCreateDevice( pd3dDevice );
+    if( FAILED(hr) )
+        return DXUT_ERR( L"OnCreateDevice", ( hr == DXUTERR_MEDIANOTFOUND ) ? DXUTERR_MEDIANOTFOUND : DXUTERR_CREATINGDEVICEOBJECTS );
+
+    // Call the app's device created callback if non-NULL
+    const D3DSURFACE_DESC* pbackBufferSurfaceDesc = DXUTGetBackBufferSurfaceDesc();
+    GetDXUTState().SetInsideDeviceCallback( true );
+    LPDXUTCALLBACKDEVICECREATED pCallbackDeviceCreated = GetDXUTState().GetDeviceCreatedFunc();
+    hr = S_OK;
+    if( pCallbackDeviceCreated != NULL )
+        hr = pCallbackDeviceCreated( DXUTGetD3DDevice(), pbackBufferSurfaceDesc, GetDXUTState().GetDeviceCreatedFuncUserContext() );
+    GetDXUTState().SetInsideDeviceCallback( false );
+    if( DXUTGetD3DDevice() == NULL ) // Handle DXUTShutdown from inside callback
+        return E_FAIL;
+    if( FAILED(hr) )  
+    {
+        DXUT_ERR( L"DeviceCreated callback", hr );        
+        return ( hr == DXUTERR_MEDIANOTFOUND ) ? DXUTERR_MEDIANOTFOUND : DXUTERR_CREATINGDEVICEOBJECTS;
+    }
+    GetDXUTState().SetDeviceObjectsCreated( true );
+
+    // Call the resource cache device reset function
+    hr = DXUTGetGlobalResourceCache().OnResetDevice( pd3dDevice );
+    if( FAILED(hr) )
+        return DXUT_ERR( L"OnResetDevice", DXUTERR_RESETTINGDEVICEOBJECTS );
+
+    // Call the app's device reset callback if non-NULL
+    GetDXUTState().SetInsideDeviceCallback( true );
+    LPDXUTCALLBACKDEVICERESET pCallbackDeviceReset = GetDXUTState().GetDeviceResetFunc();
+    hr = S_OK;
+    if( pCallbackDeviceReset != NULL )
+        hr = pCallbackDeviceReset( DXUTGetD3DDevice(), pbackBufferSurfaceDesc, GetDXUTState().GetDeviceResetFuncUserContext() );
+    GetDXUTState().SetInsideDeviceCallback( false );
+    if( DXUTGetD3DDevice() == NULL ) // Handle DXUTShutdown from inside callback
+        return E_FAIL;
+    if( FAILED(hr) )
+    {
+        DXUT_ERR( L"DeviceReset callback", hr );
+        return ( hr == DXUTERR_MEDIANOTFOUND ) ? DXUTERR_MEDIANOTFOUND : DXUTERR_RESETTINGDEVICEOBJECTS;
+    }
+    GetDXUTState().SetDeviceObjectsReset( true );
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Resets the 3D environment by:
+//      - Calls the device lost callback 
+//      - Resets the device
+//      - Stores the back buffer description
+//      - Sets up the full screen Direct3D cursor if requested
+//      - Calls the device reset callback 
+//--------------------------------------------------------------------------------------
+HRESULT DXUTReset3DEnvironment()
+{
+    HRESULT hr;
+
+    IDirect3DDevice9* pd3dDevice = DXUTGetD3DDevice();
+    assert( pd3dDevice != NULL );
+
+    // Call the app's device lost callback
+    if( GetDXUTState().GetDeviceObjectsReset() == true )
+    {
+        GetDXUTState().SetInsideDeviceCallback( true );
+        LPDXUTCALLBACKDEVICELOST pCallbackDeviceLost = GetDXUTState().GetDeviceLostFunc();
+        if( pCallbackDeviceLost != NULL )
+            pCallbackDeviceLost( GetDXUTState().GetDeviceLostFuncUserContext() );
+        GetDXUTState().SetDeviceObjectsReset( false );
+        GetDXUTState().SetInsideDeviceCallback( false );
+
+        // Call the resource cache device lost function
+        DXUTGetGlobalResourceCache().OnLostDevice();
+    }
+
+    // Reset the device
+    DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings();
+    hr = pd3dDevice->Reset( &pDeviceSettings->pp );
+    if( FAILED(hr) )  
+    {
+        if( hr == D3DERR_DEVICELOST )
+            return D3DERR_DEVICELOST; // Reset could legitimately fail if the device is lost
+        else
+            return DXUT_ERR( L"Reset", DXUTERR_RESETTINGDEVICE );
+    }
+
+    // Update back buffer desc before calling app's device callbacks
+    DXUTUpdateBackBufferDesc();
+
+    // Setup cursor based on current settings (window/fullscreen mode, show cursor state, clip cursor state)
+    DXUTSetupCursor();
+
+    hr = DXUTGetGlobalResourceCache().OnResetDevice( pd3dDevice );
+    if( FAILED(hr) )
+        return DXUT_ERR( L"OnResetDevice", DXUTERR_RESETTINGDEVICEOBJECTS );
+
+    // Call the app's OnDeviceReset callback
+    GetDXUTState().SetInsideDeviceCallback( true );
+    const D3DSURFACE_DESC* pbackBufferSurfaceDesc = DXUTGetBackBufferSurfaceDesc();
+    LPDXUTCALLBACKDEVICERESET pCallbackDeviceReset = GetDXUTState().GetDeviceResetFunc();
+    hr = S_OK;
+    if( pCallbackDeviceReset != NULL )
+        hr = pCallbackDeviceReset( pd3dDevice, pbackBufferSurfaceDesc, GetDXUTState().GetDeviceResetFuncUserContext() );
+    GetDXUTState().SetInsideDeviceCallback( false );
+    if( FAILED(hr) )
+    {
+        // If callback failed, cleanup
+        DXUT_ERR( L"DeviceResetCallback", hr );
+        if( hr != DXUTERR_MEDIANOTFOUND )
+            hr = DXUTERR_RESETTINGDEVICEOBJECTS;
+
+        GetDXUTState().SetInsideDeviceCallback( true );
+        LPDXUTCALLBACKDEVICELOST pCallbackDeviceLost = GetDXUTState().GetDeviceLostFunc();
+        if( pCallbackDeviceLost != NULL )
+            pCallbackDeviceLost( GetDXUTState().GetDeviceLostFuncUserContext() );
+        GetDXUTState().SetInsideDeviceCallback( false );
+
+        DXUTGetGlobalResourceCache().OnLostDevice();       
+        return hr;
+    }
+
+    // Success
+    GetDXUTState().SetDeviceObjectsReset( true );
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Pauses time or rendering.  Keeps a ref count so pausing can be layered
+//--------------------------------------------------------------------------------------
+void DXUTPause( bool bPauseTime, bool bPauseRendering )
+{
+    int nPauseTimeCount = GetDXUTState().GetPauseTimeCount();
+    nPauseTimeCount += ( bPauseTime ? +1 : -1 );
+    if( nPauseTimeCount < 0 )
+        nPauseTimeCount = 0;
+    GetDXUTState().SetPauseTimeCount( nPauseTimeCount );
+
+    int nPauseRenderingCount = GetDXUTState().GetPauseRenderingCount();
+    nPauseRenderingCount += ( bPauseRendering ? +1 : -1 );
+    if( nPauseRenderingCount < 0 )
+        nPauseRenderingCount = 0;
+    GetDXUTState().SetPauseRenderingCount( nPauseRenderingCount );
+
+    if( nPauseTimeCount > 0 )
+    {
+        // Stop the scene from animating
+        DXUTGetGlobalTimer()->Stop();
+    }
+    else
+    {
+        // Restart the timer
+        DXUTGetGlobalTimer()->Start();
+    }
+
+    GetDXUTState().SetRenderingPaused( nPauseRenderingCount > 0 );
+    GetDXUTState().SetTimePaused( nPauseTimeCount > 0 );
+}
+
+
+//--------------------------------------------------------------------------------------
+// Checks if the window client rect has changed and if it has, then reset the device
+//--------------------------------------------------------------------------------------
+void DXUTCheckForWindowSizeChange()
+{
+    // Skip the check for various reasons
+    if( GetDXUTState().GetIgnoreSizeChange() || 
+        !GetDXUTState().GetDeviceCreated() || 
+        !GetDXUTState().GetCurrentDeviceSettings()->pp.Windowed )
+        return;
+
+    RECT rcCurrentClient;
+    GetClientRect( DXUTGetHWND(), &rcCurrentClient );
+    
+    if( (UINT)rcCurrentClient.right != GetDXUTState().GetCurrentDeviceSettings()->pp.BackBufferWidth ||
+        (UINT)rcCurrentClient.bottom != GetDXUTState().GetCurrentDeviceSettings()->pp.BackBufferHeight )
+    {
+        // A new window size will require a new backbuffer size
+        // size, so the device must be reset and the D3D structures updated accordingly.
+
+        // Tell DXUTChangeDevice and D3D to size according to the HWND's client rect
+        DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings();
+        deviceSettings.pp.BackBufferWidth  = 0; 
+        deviceSettings.pp.BackBufferHeight = 0;
+        DXUTChangeDevice( &deviceSettings, NULL, false, false );
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+// Handles app's message loop and rendering when idle.  If DXUTCreateDevice*() or DXUTSetDevice() 
+// has not already been called, it will call DXUTCreateWindow() with the default parameters.  
+//--------------------------------------------------------------------------------------
+HRESULT DXUTMainLoop( HACCEL hAccel )
+{
+    HRESULT hr;
+
+    // Not allowed to call this from inside the device callbacks or reenter
+    if( GetDXUTState().GetInsideDeviceCallback() || GetDXUTState().GetInsideMainloop() )
+    {
+        if( (GetDXUTState().GetExitCode() == 0) || (GetDXUTState().GetExitCode() == 11) )
+            GetDXUTState().SetExitCode(1);
+        return DXUT_ERR_MSGBOX( L"DXUTMainLoop", E_FAIL );
+    }
+
+    GetDXUTState().SetInsideMainloop( true );
+
+    // If DXUTCreateDevice*() or DXUTSetDevice() has not already been called, 
+    // then call DXUTCreateDevice() with the default parameters.         
+    if( !GetDXUTState().GetDeviceCreated() ) 
+    {
+        if( GetDXUTState().GetDeviceCreateCalled() )
+        {
+            if( (GetDXUTState().GetExitCode() == 0) || (GetDXUTState().GetExitCode() == 11) )
+                GetDXUTState().SetExitCode(1);
+            return E_FAIL; // DXUTCreateDevice() must first succeed for this function to succeed
+        }
+
+        hr = DXUTCreateDevice();
+        if( FAILED(hr) )
+        {
+            if( (GetDXUTState().GetExitCode() == 0) || (GetDXUTState().GetExitCode() == 11) )
+                GetDXUTState().SetExitCode(1);
+            return hr;
+        }
+    }
+
+    HWND hWnd = DXUTGetHWND();
+
+    // DXUTInit() must have been called and succeeded for this function to proceed
+    // DXUTCreateWindow() or DXUTSetWindow() must have been called and succeeded for this function to proceed
+    // DXUTCreateDevice() or DXUTCreateDeviceFromSettings() or DXUTSetDevice() must have been called and succeeded for this function to proceed
+    if( !GetDXUTState().GetDXUTInited() || !GetDXUTState().GetWindowCreated() || !GetDXUTState().GetDeviceCreated() )
+    {
+        if( (GetDXUTState().GetExitCode() == 0) || (GetDXUTState().GetExitCode() == 11) )
+            GetDXUTState().SetExitCode(1);
+        return DXUT_ERR_MSGBOX( L"DXUTMainLoop", E_FAIL );
+    }
+
+    // Now we're ready to receive and process Windows messages.
+    bool bGotMsg;
+    MSG  msg;
+    msg.message = WM_NULL;
+    PeekMessage( &msg, NULL, 0U, 0U, PM_NOREMOVE );
+
+    while( WM_QUIT != msg.message  )
+    {
+        // Use PeekMessage() so we can use idle time to render the scene. 
+        bGotMsg = ( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) != 0 );
+
+        if( bGotMsg )
+        {
+            // Translate and dispatch the message
+            if( hAccel == NULL || hWnd == NULL || 
+                0 == TranslateAccelerator( hWnd, hAccel, &msg ) )
+            {
+                TranslateMessage( &msg );
+                DispatchMessage( &msg );
+            }
+        }
+        else
+        {
+            // Render a frame during idle time (no messages are waiting)
+            DXUTRender3DEnvironment();
+        }
+    }
+
+    // Cleanup the accelerator table
+    if( hAccel != NULL )
+        DestroyAcceleratorTable( hAccel );
+
+    GetDXUTState().SetInsideMainloop( false );
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Render the 3D environment by:
+//      - Checking if the device is lost and trying to reset it if it is
+//      - Get the elapsed time since the last frame
+//      - Calling the app's framemove and render callback
+//      - Calling Present()
+//--------------------------------------------------------------------------------------
+void DXUTRender3DEnvironment()
+{
+    HRESULT hr;
+   
+    if( GetDXUTState().GetDeviceLost() || DXUTIsRenderingPaused() || !DXUTIsActive() )
+    {
+        // Window is minimized or paused so yield CPU time to other processes
+        Sleep( 50 ); 
+    }
+
+    IDirect3DDevice9* pd3dDevice = DXUTGetD3DDevice();
+    if( NULL == pd3dDevice )
+    {
+        if( GetDXUTState().GetDeviceLost() )
+        {
+            DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings();
+            DXUTChangeDevice( &deviceSettings, NULL, false, true );
+        }
+
+        return;
+    }
+ 
+    if( GetDXUTState().GetDeviceLost() && !GetDXUTState().GetRenderingPaused() )
+    {
+        // Test the cooperative level to see if it's okay to render
+        if( FAILED( hr = pd3dDevice->TestCooperativeLevel() ) )
+        {
+            if( D3DERR_DEVICELOST == hr )
+            {
+                // The device has been lost but cannot be reset at this time.  
+				// So wait until it can be reset.
+                return;
+            }
+
+            // If we are windowed, read the desktop format and 
+            // ensure that the Direct3D device is using the same format 
+            // since the user could have changed the desktop bitdepth 
+            if( DXUTIsWindowed() )
+            {
+                D3DDISPLAYMODE adapterDesktopDisplayMode;
+                IDirect3D9* pD3D = DXUTGetD3DObject();
+                DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings();
+                pD3D->GetAdapterDisplayMode( pDeviceSettings->AdapterOrdinal, &adapterDesktopDisplayMode );
+                if( pDeviceSettings->AdapterFormat != adapterDesktopDisplayMode.Format )
+                {
+                    DXUTMatchOptions matchOptions;
+                    matchOptions.eAdapterOrdinal     = DXUTMT_PRESERVE_INPUT;
+                    matchOptions.eDeviceType         = DXUTMT_PRESERVE_INPUT;
+                    matchOptions.eWindowed           = DXUTMT_PRESERVE_INPUT;
+                    matchOptions.eAdapterFormat      = DXUTMT_PRESERVE_INPUT;
+                    matchOptions.eVertexProcessing   = DXUTMT_CLOSEST_TO_INPUT;
+                    matchOptions.eResolution         = DXUTMT_CLOSEST_TO_INPUT;
+                    matchOptions.eBackBufferFormat   = DXUTMT_CLOSEST_TO_INPUT;
+                    matchOptions.eBackBufferCount    = DXUTMT_CLOSEST_TO_INPUT;
+                    matchOptions.eMultiSample        = DXUTMT_CLOSEST_TO_INPUT;
+                    matchOptions.eSwapEffect         = DXUTMT_CLOSEST_TO_INPUT;
+                    matchOptions.eDepthFormat        = DXUTMT_CLOSEST_TO_INPUT;
+                    matchOptions.eStencilFormat      = DXUTMT_CLOSEST_TO_INPUT;
+                    matchOptions.ePresentFlags       = DXUTMT_CLOSEST_TO_INPUT;
+                    matchOptions.eRefreshRate        = DXUTMT_CLOSEST_TO_INPUT;
+                    matchOptions.ePresentInterval    = DXUTMT_CLOSEST_TO_INPUT;
+
+                    DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings();
+                    deviceSettings.AdapterFormat = adapterDesktopDisplayMode.Format;
+
+                    hr = DXUTFindValidDeviceSettings( &deviceSettings, &deviceSettings, &matchOptions );
+                    if( FAILED(hr) ) // the call will fail if no valid devices were found
+                    {
+                        DXUTDisplayErrorMessage( DXUTERR_NOCOMPATIBLEDEVICES );
+                        DXUTShutdown();
+                    }
+
+                    // Change to a Direct3D device created from the new device settings.  
+                    // If there is an existing device, then either reset or recreate the scene
+                    hr = DXUTChangeDevice( &deviceSettings, NULL, false, false );
+                    if( FAILED(hr) )  
+                    {
+                        // If this fails, try to go fullscreen and if this fails also shutdown.
+                        if( FAILED(DXUTToggleFullScreen()) )
+                            DXUTShutdown();
+                    }
+
+                    return;
+                }
+            }
+
+            // Try to reset the device
+            if( FAILED( hr = DXUTReset3DEnvironment() ) )
+            {
+                if( D3DERR_DEVICELOST == hr )
+                {
+                    // The device was lost again, so continue waiting until it can be reset.
+                    return;
+                }
+                else if( DXUTERR_RESETTINGDEVICEOBJECTS == hr || 
+                         DXUTERR_MEDIANOTFOUND == hr )
+                {
+                    DXUTDisplayErrorMessage( hr );
+                    DXUTShutdown();
+                    return;
+                }
+                else
+                {
+                    // Reset failed, but the device wasn't lost so something bad happened, 
+                    // so recreate the device to try to recover
+                    DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings();
+                    if( FAILED( DXUTChangeDevice( pDeviceSettings, NULL, true, false ) ) )
+                    {
+                        DXUTShutdown();
+                        return;
+                    }
+                }
+            }
+        }
+
+        GetDXUTState().SetDeviceLost( false );
+    }
+
+    // Get the app's time, in seconds. Skip rendering if no time elapsed
+    double fTime        = DXUTGetGlobalTimer()->GetTime();
+    float fElapsedTime  = (float) DXUTGetGlobalTimer()->GetElapsedTime();
+
+    // Store the time for the app
+    if( GetDXUTState().GetConstantFrameTime() )
+    {        
+        fElapsedTime = GetDXUTState().GetTimePerFrame();
+        fTime     = DXUTGetTime() + fElapsedTime;
+    }
+
+    GetDXUTState().SetTime( fTime );
+    GetDXUTState().SetElapsedTime( fElapsedTime );
+
+    // Update the FPS stats
+    DXUTUpdateFrameStats();
+
+    DXUTHandleTimers();
+
+    // Animate the scene by calling the app's frame move callback
+    LPDXUTCALLBACKFRAMEMOVE pCallbackFrameMove = GetDXUTState().GetFrameMoveFunc();
+    if( pCallbackFrameMove != NULL )
+    {
+        pCallbackFrameMove( pd3dDevice, fTime, fElapsedTime, GetDXUTState().GetFrameMoveFuncUserContext() );
+        pd3dDevice = DXUTGetD3DDevice();
+        if( NULL == pd3dDevice ) // Handle DXUTShutdown from inside callback
+            return;
+    }
+
+    if( !GetDXUTState().GetRenderingPaused() )
+    {
+        // Render the scene by calling the app's render callback
+        LPDXUTCALLBACKFRAMERENDER pCallbackFrameRender = GetDXUTState().GetFrameRenderFunc();
+        if( pCallbackFrameRender != NULL )
+        {
+            pCallbackFrameRender( pd3dDevice, fTime, fElapsedTime, GetDXUTState().GetFrameRenderFuncUserContext() );
+            pd3dDevice = DXUTGetD3DDevice();
+            if( NULL == pd3dDevice ) // Handle DXUTShutdown from inside callback
+                return;
+        }
+
+#if defined(DEBUG) || defined(_DEBUG)
+        // The back buffer should always match the client rect 
+        // if the Direct3D backbuffer covers the entire window
+        RECT rcClient;
+        GetClientRect( DXUTGetHWND(), &rcClient );
+        if( !IsIconic( DXUTGetHWND() ) )
+        {
+            GetClientRect( DXUTGetHWND(), &rcClient );
+            assert( DXUTGetBackBufferSurfaceDesc()->Width == (UINT)rcClient.right );
+            assert( DXUTGetBackBufferSurfaceDesc()->Height == (UINT)rcClient.bottom );
+        }        
+#endif
+
+        // Show the frame on the primary surface.
+        hr = pd3dDevice->Present( NULL, NULL, NULL, NULL );
+        if( FAILED(hr) )
+        {
+            if( D3DERR_DEVICELOST == hr )
+            {
+                GetDXUTState().SetDeviceLost( true );
+            }
+            else if( D3DERR_DRIVERINTERNALERROR == hr )
+            {
+                // When D3DERR_DRIVERINTERNALERROR is returned from Present(),
+                // the application can do one of the following:
+                // 
+                // - End, with the pop-up window saying that the application cannot continue 
+                //   because of problems in the display adapter and that the user should 
+                //   contact the adapter manufacturer.
+                //
+                // - Attempt to restart by calling IDirect3DDevice9::Reset, which is essentially the same 
+                //   path as recovering from a lost device. If IDirect3DDevice9::Reset fails with 
+                //   D3DERR_DRIVERINTERNALERROR, the application should end immediately with the message 
+                //   that the user should contact the adapter manufacturer.
+                // 
+                // The framework attempts the path of resetting the device
+                // 
+                GetDXUTState().SetDeviceLost( true );
+            }
+        }
+    }
+
+    // Update current frame #
+    int nFrame = GetDXUTState().GetCurrentFrameNumber();
+    nFrame++;
+    GetDXUTState().SetCurrentFrameNumber( nFrame );
+
+    // Check to see if the app should shutdown due to cmdline
+    if( GetDXUTState().GetOverrideQuitAfterFrame() != 0 )
+    {
+        if( nFrame > GetDXUTState().GetOverrideQuitAfterFrame() )
+            DXUTShutdown();
+    }
+
+    return;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Updates the string which describes the device 
+//--------------------------------------------------------------------------------------
+void DXUTUpdateDeviceStats( D3DDEVTYPE DeviceType, DWORD BehaviorFlags, D3DADAPTER_IDENTIFIER9* pAdapterIdentifier )
+{
+    if( GetDXUTState().GetNoStats() )
+        return;
+
+    // Store device description
+    WCHAR* pstrDeviceStats = GetDXUTState().GetDeviceStats();
+    if( DeviceType == D3DDEVTYPE_REF )
+        StringCchCopy( pstrDeviceStats, 256, L"REF" );
+    else if( DeviceType == D3DDEVTYPE_HAL )
+        StringCchCopy( pstrDeviceStats, 256, L"HAL" );
+    else if( DeviceType == D3DDEVTYPE_SW )
+        StringCchCopy( pstrDeviceStats, 256, L"SW" );
+
+    if( BehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING &&
+        BehaviorFlags & D3DCREATE_PUREDEVICE )
+    {
+        if( DeviceType == D3DDEVTYPE_HAL )
+            StringCchCat( pstrDeviceStats, 256, L" (pure hw vp)" );
+        else
+            StringCchCat( pstrDeviceStats, 256, L" (simulated pure hw vp)" );
+    }
+    else if( BehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING )
+    {
+        if( DeviceType == D3DDEVTYPE_HAL )
+            StringCchCat( pstrDeviceStats, 256, L" (hw vp)" );
+        else
+            StringCchCat( pstrDeviceStats, 256, L" (simulated hw vp)" );
+    }
+    else if( BehaviorFlags & D3DCREATE_MIXED_VERTEXPROCESSING )
+    {
+        if( DeviceType == D3DDEVTYPE_HAL )
+            StringCchCat( pstrDeviceStats, 256, L" (mixed vp)" );
+        else
+            StringCchCat( pstrDeviceStats, 256, L" (simulated mixed vp)" );
+    }
+    else if( BehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING )
+    {
+        StringCchCat( pstrDeviceStats, 256, L" (sw vp)" );
+    }
+
+    if( DeviceType == D3DDEVTYPE_HAL )
+    {
+        // Be sure not to overflow m_strDeviceStats when appending the adapter 
+        // description, since it can be long.  
+        StringCchCat( pstrDeviceStats, 256, L": " );
+
+        // Try to get a unique description from the CD3DEnumDeviceSettingsCombo
+        DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings();
+        CD3DEnumeration* pd3dEnum = DXUTPrepareEnumerationObject();
+        CD3DEnumDeviceSettingsCombo* pDeviceSettingsCombo = pd3dEnum->GetDeviceSettingsCombo( pDeviceSettings->AdapterOrdinal, pDeviceSettings->DeviceType, pDeviceSettings->AdapterFormat, pDeviceSettings->pp.BackBufferFormat, pDeviceSettings->pp.Windowed );
+        if( pDeviceSettingsCombo )
+        {
+            StringCchCat( pstrDeviceStats, 256, pDeviceSettingsCombo->pAdapterInfo->szUniqueDescription );
+        }
+        else
+        {
+            const int cchDesc = sizeof(pAdapterIdentifier->Description);
+            WCHAR szDescription[cchDesc];
+            MultiByteToWideChar( CP_ACP, 0, pAdapterIdentifier->Description, -1, szDescription, cchDesc );
+            szDescription[cchDesc-1] = 0;
+            StringCchCat( pstrDeviceStats, 256, szDescription );
+        }
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+// Updates the frames/sec stat once per second
+//--------------------------------------------------------------------------------------
+void DXUTUpdateFrameStats()
+{
+    if( GetDXUTState().GetNoStats() )
+        return;
+
+    // Keep track of the frame count
+    double fLastTime = GetDXUTState().GetLastStatsUpdateTime();
+    DWORD dwFrames  = GetDXUTState().GetLastStatsUpdateFrames();
+    double fTime = DXUTGetGlobalTimer()->GetAbsoluteTime();
+    dwFrames++;
+    GetDXUTState().SetLastStatsUpdateFrames( dwFrames );
+
+    // Update the scene stats once per second
+    if( fTime - fLastTime > 1.0f )
+    {
+        float fFPS = (float) (dwFrames / (fTime - fLastTime));
+        GetDXUTState().SetFPS( fFPS );
+        GetDXUTState().SetLastStatsUpdateTime( fTime );
+        GetDXUTState().SetLastStatsUpdateFrames( 0 );
+
+        WCHAR* pstrFPS = GetDXUTState().GetFPSStats();
+        StringCchPrintf( pstrFPS, 64, L"%0.2f fps ", fFPS );
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+// Updates the static part of the frame stats so it doesn't have be generated every frame
+//--------------------------------------------------------------------------------------
+void DXUTUpdateStaticFrameStats()
+{
+    if( GetDXUTState().GetNoStats() )
+        return;
+
+    DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings();
+    if( NULL == pDeviceSettings )
+        return;
+    CD3DEnumeration* pd3dEnum = DXUTPrepareEnumerationObject();
+    if( NULL == pd3dEnum )
+        return;
+
+    CD3DEnumDeviceSettingsCombo* pDeviceSettingsCombo = pd3dEnum->GetDeviceSettingsCombo( pDeviceSettings->AdapterOrdinal, pDeviceSettings->DeviceType, pDeviceSettings->AdapterFormat, pDeviceSettings->pp.BackBufferFormat, pDeviceSettings->pp.Windowed );
+    if( NULL == pDeviceSettingsCombo )
+        return;
+
+    WCHAR strFmt[100];
+    D3DPRESENT_PARAMETERS* pPP = &pDeviceSettings->pp;
+
+    if( pDeviceSettingsCombo->AdapterFormat == pDeviceSettingsCombo->BackBufferFormat )
+    {
+        StringCchCopy( strFmt, 100, DXUTD3DFormatToString( pDeviceSettingsCombo->AdapterFormat, false ) );
+    }
+    else
+    {
+        StringCchPrintf( strFmt, 100, L"backbuf %s, adapter %s", 
+            DXUTD3DFormatToString( pDeviceSettingsCombo->BackBufferFormat, false ), 
+            DXUTD3DFormatToString( pDeviceSettingsCombo->AdapterFormat, false ) );
+    }
+
+    WCHAR strDepthFmt[100];
+    if( pPP->EnableAutoDepthStencil )
+    {
+        StringCchPrintf( strDepthFmt, 100, L" (%s)", DXUTD3DFormatToString( pPP->AutoDepthStencilFormat, false ) );
+    }
+    else
+    {
+        // No depth buffer
+        strDepthFmt[0] = 0;
+    }
+
+    WCHAR strMultiSample[100];
+    switch( pPP->MultiSampleType )
+    {
+        case D3DMULTISAMPLE_NONMASKABLE: StringCchCopy( strMultiSample, 100, L" (Nonmaskable Multisample)" ); break;
+        case D3DMULTISAMPLE_NONE:        StringCchCopy( strMultiSample, 100, L"" ); break;
+        default:                         StringCchPrintf( strMultiSample, 100, L" (%dx Multisample)", pPP->MultiSampleType ); break;
+    }
+
+    WCHAR* pstrStaticFrameStats = GetDXUTState().GetStaticFrameStats();
+    StringCchPrintf( pstrStaticFrameStats, 256, L"%%sVsync %s (%dx%d), %s%s%s", 
+                ( pPP->PresentationInterval == D3DPRESENT_INTERVAL_IMMEDIATE ) ? L"off" : L"on", 
+                pPP->BackBufferWidth, pPP->BackBufferHeight,
+                strFmt, strDepthFmt, strMultiSample );
+}
+
+
+//--------------------------------------------------------------------------------------
+LPCWSTR DXUTGetFrameStats( bool bShowFPS )                         
+{ 
+    WCHAR* pstrFrameStats = GetDXUTState().GetFrameStats();
+    WCHAR* pstrFPS = ( bShowFPS ) ? GetDXUTState().GetFPSStats() : L"";
+    StringCchPrintf( pstrFrameStats, 256, GetDXUTState().GetStaticFrameStats(), pstrFPS );
+    return pstrFrameStats;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Handles window messages 
+//--------------------------------------------------------------------------------------
+LRESULT CALLBACK DXUTStaticWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    // Consolidate the keyboard messages and pass them to the app's keyboard callback
+    if( uMsg == WM_KEYDOWN ||
+        uMsg == WM_SYSKEYDOWN || 
+        uMsg == WM_KEYUP ||
+        uMsg == WM_SYSKEYUP )
+    {
+        bool bKeyDown = (uMsg == WM_KEYDOWN || uMsg == WM_SYSKEYDOWN);
+        DWORD dwMask = (1 << 29);
+        bool bAltDown = ( (lParam & dwMask) != 0 );
+
+        bool* bKeys = GetDXUTState().GetKeys();
+        bKeys[ (BYTE) (wParam & 0xFF) ] = bKeyDown;
+
+        LPDXUTCALLBACKKEYBOARD pCallbackKeyboard = GetDXUTState().GetKeyboardFunc();
+        if( pCallbackKeyboard )
+            pCallbackKeyboard( (UINT)wParam, bKeyDown, bAltDown, GetDXUTState().GetKeyboardFuncUserContext() );           
+    }
+
+    // Consolidate the mouse button messages and pass them to the app's mouse callback
+    if( uMsg == WM_LBUTTONDOWN ||
+        uMsg == WM_LBUTTONUP ||
+        uMsg == WM_LBUTTONDBLCLK ||
+        uMsg == WM_MBUTTONDOWN ||
+        uMsg == WM_MBUTTONUP ||
+        uMsg == WM_MBUTTONDBLCLK ||
+        uMsg == WM_RBUTTONDOWN ||
+        uMsg == WM_RBUTTONUP ||
+        uMsg == WM_RBUTTONDBLCLK ||
+        uMsg == WM_XBUTTONDOWN ||
+        uMsg == WM_XBUTTONUP ||
+        uMsg == WM_XBUTTONDBLCLK ||
+        uMsg == WM_MOUSEWHEEL || 
+        (GetDXUTState().GetNotifyOnMouseMove() && uMsg == WM_MOUSEMOVE) )
+    {
+        int xPos = (short)LOWORD(lParam);
+        int yPos = (short)HIWORD(lParam);
+
+        if( uMsg == WM_MOUSEWHEEL )
+        {
+            // WM_MOUSEWHEEL passes screen mouse coords
+            // so convert them to client coords
+            POINT pt;
+            pt.x = xPos; pt.y = yPos;
+            ScreenToClient( hWnd, &pt );
+            xPos = pt.x; yPos = pt.y;
+        }
+
+        int nMouseWheelDelta = 0;
+        if( uMsg == WM_MOUSEWHEEL ) 
+            nMouseWheelDelta = (short) HIWORD(wParam);
+
+        int nMouseButtonState = LOWORD(wParam);
+        bool bLeftButton  = ((nMouseButtonState & MK_LBUTTON) != 0);
+        bool bRightButton = ((nMouseButtonState & MK_RBUTTON) != 0);
+        bool bMiddleButton = ((nMouseButtonState & MK_MBUTTON) != 0);
+        bool bSideButton1 = ((nMouseButtonState & MK_XBUTTON1) != 0);
+        bool bSideButton2 = ((nMouseButtonState & MK_XBUTTON2) != 0);
+
+        bool* bMouseButtons = GetDXUTState().GetMouseButtons();
+        bMouseButtons[0] = bLeftButton;
+        bMouseButtons[1] = bMiddleButton;
+        bMouseButtons[2] = bRightButton;
+        bMouseButtons[3] = bSideButton1;
+        bMouseButtons[4] = bSideButton2;
+
+        LPDXUTCALLBACKMOUSE pCallbackMouse = GetDXUTState().GetMouseFunc();
+        if( pCallbackMouse )
+            pCallbackMouse( bLeftButton, bRightButton, bMiddleButton, bSideButton1, bSideButton2, nMouseWheelDelta, xPos, yPos, GetDXUTState().GetMouseFuncUserContext() );
+    }
+
+    // Pass all messages to the app's MsgProc callback, and don't 
+    // process further messages if the apps says not to.
+    LPDXUTCALLBACKMSGPROC pCallbackMsgProc = GetDXUTState().GetWindowMsgFunc();
+    if( pCallbackMsgProc )
+    {
+        bool bNoFurtherProcessing = false;
+        LRESULT nResult = pCallbackMsgProc( hWnd, uMsg, wParam, lParam, &bNoFurtherProcessing, GetDXUTState().GetWindowMsgFuncUserContext() );
+        if( bNoFurtherProcessing )
+            return nResult;
+    }
+
+    switch( uMsg )
+    {
+        case WM_PAINT:
+        {
+            IDirect3DDevice9* pd3dDevice = DXUTGetD3DDevice();
+
+            // Handle paint messages when the app is paused
+            if( pd3dDevice && DXUTIsRenderingPaused() && 
+                GetDXUTState().GetDeviceObjectsCreated() && GetDXUTState().GetDeviceObjectsReset() )
+            {
+                HRESULT hr;
+                double fTime = DXUTGetTime();
+                float fElapsedTime = DXUTGetElapsedTime();
+
+                LPDXUTCALLBACKFRAMERENDER pCallbackFrameRender = GetDXUTState().GetFrameRenderFunc();
+                if( pCallbackFrameRender != NULL )
+                    pCallbackFrameRender( pd3dDevice, fTime, fElapsedTime, GetDXUTState().GetFrameRenderFuncUserContext() );
+
+                hr = pd3dDevice->Present( NULL, NULL, NULL, NULL );
+                if( D3DERR_DEVICELOST == hr )
+                {
+                    GetDXUTState().SetDeviceLost( true );
+                }
+                else if( D3DERR_DRIVERINTERNALERROR == hr )
+                {
+                    // When D3DERR_DRIVERINTERNALERROR is returned from Present(),
+                    // the application can do one of the following:
+                    // 
+                    // - End, with the pop-up window saying that the application cannot continue 
+                    //   because of problems in the display adapter and that the user should 
+                    //   contact the adapter manufacturer.
+                    //
+                    // - Attempt to restart by calling IDirect3DDevice9::Reset, which is essentially the same 
+                    //   path as recovering from a lost device. If IDirect3DDevice9::Reset fails with 
+                    //   D3DERR_DRIVERINTERNALERROR, the application should end immediately with the message 
+                    //   that the user should contact the adapter manufacturer.
+                    // 
+                    // The framework attempts the path of resetting the device
+                    // 
+                    GetDXUTState().SetDeviceLost( true );
+                }
+            }
+            break;
+        }
+
+        case WM_SIZE:
+            if( SIZE_MINIMIZED == wParam )
+            {
+                DXUTPause( true, true ); // Pause while we're minimized
+
+                GetDXUTState().SetMinimized( true );
+                GetDXUTState().SetMaximized( false );
+            }
+            else
+            {
+                RECT rcCurrentClient;
+                GetClientRect( DXUTGetHWND(), &rcCurrentClient );
+                if( rcCurrentClient.top == 0 && rcCurrentClient.bottom == 0 )
+                {
+                    // Rapidly clicking the task bar to minimize and restore a window
+                    // can cause a WM_SIZE message with SIZE_RESTORED when 
+                    // the window has actually become minimized due to rapid change
+                    // so just ignore this message
+                }
+                else if( SIZE_MAXIMIZED == wParam )
+                {
+                    if( GetDXUTState().GetMinimized() )
+                        DXUTPause( false, false ); // Unpause since we're no longer minimized
+                    GetDXUTState().SetMinimized( false );
+                    GetDXUTState().SetMaximized( true );
+                    DXUTCheckForWindowSizeChange();
+                    DXUTCheckForWindowChangingMonitors();
+                }
+                else if( SIZE_RESTORED == wParam )
+                {      
+                    if( GetDXUTState().GetMaximized() )
+                    {
+                        GetDXUTState().SetMaximized( false );
+                        DXUTCheckForWindowSizeChange();
+                        DXUTCheckForWindowChangingMonitors();
+                    }
+                    else if( GetDXUTState().GetMinimized() )
+                    {
+                        DXUTPause( false, false ); // Unpause since we're no longer minimized
+                        GetDXUTState().SetMinimized( false );
+                        DXUTCheckForWindowSizeChange();
+                        DXUTCheckForWindowChangingMonitors();
+                    }
+                    else if( GetDXUTState().GetInSizeMove() )
+                    {
+                        // If we're neither maximized nor minimized, the window size 
+                        // is changing by the user dragging the window edges.  In this 
+                        // case, we don't reset the device yet -- we wait until the 
+                        // user stops dragging, and a WM_EXITSIZEMOVE message comes.
+                    }
+                    else
+                    {
+                        // This WM_SIZE come from resizing the window via an API like SetWindowPos() so 
+                        // resize and reset the device now.
+                        DXUTCheckForWindowSizeChange();
+                        DXUTCheckForWindowChangingMonitors();
+                    }
+                }
+            }
+            break;
+
+        case WM_GETMINMAXINFO:
+            ((MINMAXINFO*)lParam)->ptMinTrackSize.x = DXUT_MIN_WINDOW_SIZE_X;
+            ((MINMAXINFO*)lParam)->ptMinTrackSize.y = DXUT_MIN_WINDOW_SIZE_Y;
+            break;
+
+        case WM_ENTERSIZEMOVE:
+            // Halt frame movement while the app is sizing or moving
+            DXUTPause( true, true );
+            GetDXUTState().SetInSizeMove( true );
+            break;
+
+        case WM_EXITSIZEMOVE:
+            DXUTPause( false, false );
+            DXUTCheckForWindowSizeChange();
+            DXUTCheckForWindowChangingMonitors();
+            GetDXUTState().SetInSizeMove( false );
+            break;
+
+         case WM_MOUSEMOVE:
+            if( DXUTIsActive() && !DXUTIsWindowed() )
+            {
+                IDirect3DDevice9* pd3dDevice = DXUTGetD3DDevice();
+                if( pd3dDevice )
+                {
+                    POINT ptCursor;
+                    GetCursorPos( &ptCursor );
+                    pd3dDevice->SetCursorPosition( ptCursor.x, ptCursor.y, 0 );
+                }
+            }
+            break;
+
+        case WM_SETCURSOR:
+            if( DXUTIsActive() && !DXUTIsWindowed() )
+            {
+                IDirect3DDevice9* pd3dDevice = DXUTGetD3DDevice();
+                if( pd3dDevice && GetDXUTState().GetShowCursorWhenFullScreen() )
+                    pd3dDevice->ShowCursor( true );
+                return true; // prevent Windows from setting cursor to window class cursor
+            }
+            break;
+
+       case WM_ACTIVATEAPP:
+            if( wParam == TRUE && !DXUTIsActive() ) // Handle only if previously not active 
+            {
+                GetDXUTState().SetActive( true );
+
+                // The GetMinimizedWhileFullscreen() varible is used instead of !DXUTIsWindowed()
+                // to handle the rare case toggling to windowed mode while the fullscreen application 
+                // is minimized and thus making the pause count wrong
+                if( GetDXUTState().GetMinimizedWhileFullscreen() ) 
+                {
+                    DXUTPause( false, false ); // Unpause since we're no longer minimized
+                    GetDXUTState().SetMinimizedWhileFullscreen( false );
+                }
+
+                // Upon returning to this app, potentially disable shortcut keys 
+                // (Windows key, accessibility shortcuts) 
+                DXUTAllowShortcutKeys( ( DXUTIsWindowed() ) ? GetDXUTState().GetAllowShortcutKeysWhenWindowed() : 
+                                                              GetDXUTState().GetAllowShortcutKeysWhenFullscreen() );
+
+            }
+            else if( wParam == FALSE && DXUTIsActive() ) // Handle only if previously active 
+            {               
+                GetDXUTState().SetActive( false );
+
+                // Disable any controller rumble when de-activating app
+                DXUTStopRumbleOnAllControllers();
+
+                if( !DXUTIsWindowed() )
+                {
+                    // Going from full screen to a minimized state 
+                    ClipCursor( NULL );      // don't limit the cursor anymore
+                    DXUTPause( true, true ); // Pause while we're minimized (take care not to pause twice by handling this message twice)
+                    GetDXUTState().SetMinimizedWhileFullscreen( true ); 
+                }
+
+                // Restore shortcut keys (Windows key, accessibility shortcuts) to original state
+                //
+                // This is important to call here if the shortcuts are disabled, 
+                // because if this is not done then the Windows key will continue to 
+                // be disabled while this app is running which is very bad.
+                // If the app crashes, the Windows key will return to normal.
+                DXUTAllowShortcutKeys( true );
+            }
+            break;
+
+       case WM_ENTERMENULOOP:
+            // Pause the app when menus are displayed
+            DXUTPause( true, true );
+            break;
+
+        case WM_EXITMENULOOP:
+            DXUTPause( false, false );
+            break;
+
+        case WM_MENUCHAR:
+            // A menu is active and the user presses a key that does not correspond to any mnemonic or accelerator key
+            // So just ignore and don't beep
+            return MAKELRESULT(0,MNC_CLOSE);
+            break;
+
+        case WM_NCHITTEST:
+            // Prevent the user from selecting the menu in full screen mode
+            if( !DXUTIsWindowed() )
+                return HTCLIENT;
+            break;
+
+        case WM_POWERBROADCAST:
+            switch( wParam )
+            {
+                #ifndef PBT_APMQUERYSUSPEND
+                    #define PBT_APMQUERYSUSPEND 0x0000
+                #endif
+                case PBT_APMQUERYSUSPEND:
+                    // At this point, the app should save any data for open
+                    // network connections, files, etc., and prepare to go into
+                    // a suspended mode.  The app can use the MsgProc callback
+                    // to handle this if desired.
+                    return true;
+
+                #ifndef PBT_APMRESUMESUSPEND
+                    #define PBT_APMRESUMESUSPEND 0x0007
+                #endif
+                case PBT_APMRESUMESUSPEND:
+                    // At this point, the app should recover any data, network
+                    // connections, files, etc., and resume running from when
+                    // the app was suspended. The app can use the MsgProc callback
+                    // to handle this if desired.
+                   
+                   // QPC may lose consistency when suspending, so reset the timer
+                   // upon resume.
+                   DXUTGetGlobalTimer()->Reset();                   
+                   GetDXUTState().SetLastStatsUpdateTime( 0 );
+                   return true;
+            }
+            break;
+
+        case WM_SYSCOMMAND:
+            // Prevent moving/sizing and power loss in full screen mode
+            switch( wParam )
+            {
+                case SC_MOVE:
+                case SC_SIZE:
+                case SC_MAXIMIZE:
+                case SC_KEYMENU:
+                case SC_MONITORPOWER:
+                    if( !DXUTIsWindowed() )
+                        return 0;
+                    break;
+            }
+            break;
+
+        case WM_SYSKEYDOWN:
+        {
+            switch( wParam )
+            {
+                case VK_RETURN:
+                {
+                    if( GetDXUTState().GetHandleAltEnter() )
+                    {
+                        // Toggle full screen upon alt-enter 
+                        DWORD dwMask = (1 << 29);
+                        if( (lParam & dwMask) != 0 ) // Alt is down also
+                        {
+                            // Toggle the full screen/window mode
+                            DXUTPause( true, true );
+                            DXUTToggleFullScreen();
+                            DXUTPause( false, false );                        
+                            return 0;
+                        }
+                    }
+                }
+            }
+            break;
+        }
+
+        case WM_KEYDOWN:
+        {
+            if( GetDXUTState().GetHandleDefaultHotkeys() )
+            {
+                switch( wParam )
+                {
+                    case VK_F3:
+                    {
+                        DXUTPause( true, true );
+                        DXUTToggleREF();
+                        DXUTPause( false, false );                        
+                        break;
+                    }
+
+                    case VK_F8:
+                    {
+                        bool bWireFrame = GetDXUTState().GetWireframeMode();
+                        bWireFrame = !bWireFrame; 
+                        GetDXUTState().SetWireframeMode( bWireFrame );
+
+                        IDirect3DDevice9* pd3dDevice = DXUTGetD3DDevice();
+                        if( pd3dDevice )
+                            pd3dDevice->SetRenderState( D3DRS_FILLMODE, (bWireFrame) ? D3DFILL_WIREFRAME : D3DFILL_SOLID ); 
+                        break;
+                    }
+
+                    case VK_ESCAPE:
+                    {
+                        // Received key to exit app
+                        SendMessage( hWnd, WM_CLOSE, 0, 0 );
+                    }
+
+                    case VK_PAUSE: 
+                    {
+                        bool bTimePaused = DXUTIsTimePaused();
+                        bTimePaused = !bTimePaused;
+                        if( bTimePaused ) 
+                            DXUTPause( true, false ); 
+                        else
+                            DXUTPause( false, false ); 
+                        break; 
+                    }
+                }
+            }
+            break;
+        }
+
+        case WM_CLOSE:
+        {
+            HMENU hMenu;
+            hMenu = GetMenu(hWnd);
+            if( hMenu != NULL )
+                DestroyMenu( hMenu );
+            DestroyWindow( hWnd );
+            UnregisterClass( L"Direct3DWindowClass", NULL );
+            GetDXUTState().SetHWNDFocus( NULL );
+            GetDXUTState().SetHWNDDeviceFullScreen( NULL );
+            GetDXUTState().SetHWNDDeviceWindowed( NULL );
+            return 0;
+        }
+
+        case WM_DESTROY:
+            PostQuitMessage(0);
+            break;
+    }
+
+    // Don't allow the F10 key to act as a shortcut to the menu bar
+    // by not passing these messages to the DefWindowProc only when
+    // there's no menu present
+    if( !GetDXUTState().GetCallDefWindowProc() || GetDXUTState().GetMenu() == NULL && (uMsg == WM_SYSKEYDOWN || uMsg == WM_SYSKEYUP) && wParam == VK_F10 )
+        return 0;
+    else
+        return DefWindowProc( hWnd, uMsg, wParam, lParam );
+}
+
+
+//--------------------------------------------------------------------------------------
+// Resets the state associated with DXUT 
+//--------------------------------------------------------------------------------------
+void DXUTResetFrameworkState()
+{
+    GetDXUTState().Destroy();
+    GetDXUTState().Create();
+}
+
+
+//--------------------------------------------------------------------------------------
+// Closes down the window.  When the window closes, it will cleanup everything
+//--------------------------------------------------------------------------------------
+void DXUTShutdown( int nExitCode )
+{
+    HWND hWnd = DXUTGetHWND();
+    if( hWnd != NULL )
+        SendMessage( hWnd, WM_CLOSE, 0, 0 );
+
+    GetDXUTState().SetExitCode(nExitCode);
+
+    DXUTCleanup3DEnvironment( true );
+
+    // Restore shortcut keys (Windows key, accessibility shortcuts) to original state
+    // This is important to call here if the shortcuts are disabled, 
+    // because accessibility setting changes are permanent.
+    // This means that if this is not done then the accessibility settings 
+    // might not be the same as when the app was started. 
+    // If the app crashes without restoring the settings, this is also true so it
+    // would be wise to backup/restore the settings from a file so they can be 
+    // restored when the crashed app is run again.
+    DXUTAllowShortcutKeys( true );
+    
+    GetDXUTState().SetD3DEnumeration( NULL );
+    
+    IDirect3D9* pD3D = DXUTGetD3DObject();
+    SAFE_RELEASE( pD3D );
+    GetDXUTState().SetD3D( NULL );
+
+    if( GetDXUTState().GetOverrideRelaunchMCE() )
+        DXUTReLaunchMediaCenter();
+}
+
+
+//--------------------------------------------------------------------------------------
+// Cleans up the 3D environment by:
+//      - Calls the device lost callback 
+//      - Calls the device destroyed callback 
+//      - Releases the D3D device
+//--------------------------------------------------------------------------------------
+void DXUTCleanup3DEnvironment( bool bReleaseSettings )
+{
+    IDirect3DDevice9* pd3dDevice = DXUTGetD3DDevice();
+    if( pd3dDevice != NULL )
+    {
+        GetDXUTState().SetInsideDeviceCallback( true );
+
+        // Call the app's device lost callback
+        if( GetDXUTState().GetDeviceObjectsReset() == true )
+        {
+            LPDXUTCALLBACKDEVICELOST pCallbackDeviceLost = GetDXUTState().GetDeviceLostFunc();
+            if( pCallbackDeviceLost != NULL )
+                pCallbackDeviceLost( GetDXUTState().GetDeviceLostFuncUserContext() );
+            GetDXUTState().SetDeviceObjectsReset( false );
+
+            // Call the resource cache device lost function
+            DXUTGetGlobalResourceCache().OnLostDevice();
+        }
+
+        // Call the app's device destroyed callback
+        if( GetDXUTState().GetDeviceObjectsCreated() == true )
+        {
+            LPDXUTCALLBACKDEVICEDESTROYED pCallbackDeviceDestroyed = GetDXUTState().GetDeviceDestroyedFunc();
+            if( pCallbackDeviceDestroyed != NULL )
+                pCallbackDeviceDestroyed( GetDXUTState().GetDeviceDestroyedFuncUserContext() );
+            GetDXUTState().SetDeviceObjectsCreated( false );
+
+            // Call the resource cache device destory function
+            DXUTGetGlobalResourceCache().OnDestroyDevice();
+        }
+
+        GetDXUTState().SetInsideDeviceCallback( false );
+
+        // Release the D3D device and in debug configs, displays a message box if there 
+        // are unrelease objects.
+        if( pd3dDevice )
+        {
+            if( pd3dDevice->Release() > 0 )  
+            {
+                DXUTDisplayErrorMessage( DXUTERR_NONZEROREFCOUNT );
+                DXUT_ERR( L"DXUTCleanup3DEnvironment", DXUTERR_NONZEROREFCOUNT );
+            }
+        }
+        GetDXUTState().SetD3DDevice( NULL );
+
+        if( bReleaseSettings )
+        {
+            DXUTDeviceSettings* pOldDeviceSettings = GetDXUTState().GetCurrentDeviceSettings();
+            SAFE_DELETE(pOldDeviceSettings);  
+            GetDXUTState().SetCurrentDeviceSettings( NULL );
+        }
+
+        D3DSURFACE_DESC* pbackBufferSurfaceDesc = GetDXUTState().GetBackBufferSurfaceDesc();
+        ZeroMemory( pbackBufferSurfaceDesc, sizeof(D3DSURFACE_DESC) );
+
+        D3DCAPS9* pd3dCaps = GetDXUTState().GetCaps();
+        ZeroMemory( pd3dCaps, sizeof(D3DCAPS9) );
+
+        GetDXUTState().SetDeviceCreated( false );
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+// Stores back buffer surface desc in GetDXUTState().GetBackBufferSurfaceDesc()
+//--------------------------------------------------------------------------------------
+void DXUTUpdateBackBufferDesc()
+{
+    HRESULT hr;
+    IDirect3DSurface9* pBackBuffer;
+    hr = GetDXUTState().GetD3DDevice()->GetBackBuffer( 0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer );
+    D3DSURFACE_DESC* pBBufferSurfaceDesc = GetDXUTState().GetBackBufferSurfaceDesc();
+    ZeroMemory( pBBufferSurfaceDesc, sizeof(D3DSURFACE_DESC) );
+    if( SUCCEEDED(hr) )
+    {
+        pBackBuffer->GetDesc( pBBufferSurfaceDesc );
+        SAFE_RELEASE( pBackBuffer );
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+// Starts a user defined timer callback
+//--------------------------------------------------------------------------------------
+HRESULT DXUTSetTimer( LPDXUTCALLBACKTIMER pCallbackTimer, float fTimeoutInSecs, UINT* pnIDEvent, void* pCallbackUserContext ) 
+{ 
+    if( pCallbackTimer == NULL )
+        return DXUT_ERR_MSGBOX( L"DXUTSetTimer", E_INVALIDARG ); 
+
+    HRESULT hr;
+    DXUT_TIMER DXUTTimer;
+    DXUTTimer.pCallbackTimer = pCallbackTimer;
+    DXUTTimer.pCallbackUserContext = pCallbackUserContext;
+    DXUTTimer.fTimeoutInSecs = fTimeoutInSecs;
+    DXUTTimer.fCountdown = fTimeoutInSecs;
+    DXUTTimer.bEnabled = true;
+
+    CGrowableArray<DXUT_TIMER>* pTimerList = GetDXUTState().GetTimerList();
+    if( pTimerList == NULL )
+    {
+        pTimerList = new CGrowableArray<DXUT_TIMER>;
+        if( pTimerList == NULL )
+            return E_OUTOFMEMORY; 
+        GetDXUTState().SetTimerList( pTimerList );
+    }
+
+    if( FAILED( hr = pTimerList->Add( DXUTTimer ) ) )
+        return hr;
+
+    if( pnIDEvent )
+        *pnIDEvent = pTimerList->GetSize();
+
+    return S_OK; 
+}
+
+
+//--------------------------------------------------------------------------------------
+// Stops a user defined timer callback
+//--------------------------------------------------------------------------------------
+HRESULT DXUTKillTimer( UINT nIDEvent ) 
+{ 
+    CGrowableArray<DXUT_TIMER>* pTimerList = GetDXUTState().GetTimerList();
+    if( pTimerList == NULL )
+        return S_FALSE;
+
+    if( nIDEvent < (UINT)pTimerList->GetSize() )
+    {
+        DXUT_TIMER DXUTTimer = pTimerList->GetAt(nIDEvent);
+        DXUTTimer.bEnabled = false;
+        pTimerList->SetAt(nIDEvent, DXUTTimer);
+    }
+    else
+    {
+        return DXUT_ERR_MSGBOX( L"DXUTKillTimer", E_INVALIDARG );
+    }
+
+    return S_OK; 
+}
+
+
+//--------------------------------------------------------------------------------------
+// Internal helper function to handle calling the user defined timer callbacks
+//--------------------------------------------------------------------------------------
+void DXUTHandleTimers()
+{
+    float fElapsedTime = DXUTGetElapsedTime();
+
+    CGrowableArray<DXUT_TIMER>* pTimerList = GetDXUTState().GetTimerList();
+    if( pTimerList == NULL )
+        return;
+
+    // Walk through the list of timer callbacks
+    for( int i=0; i<pTimerList->GetSize(); i++ )
+    {
+        DXUT_TIMER DXUTTimer = pTimerList->GetAt(i);
+        if( DXUTTimer.bEnabled )
+        {
+            DXUTTimer.fCountdown -= fElapsedTime;
+
+            // Call the callback if count down expired
+            if( DXUTTimer.fCountdown < 0 )
+            {
+                DXUTTimer.pCallbackTimer( i, DXUTTimer.pCallbackUserContext );
+                DXUTTimer.fCountdown = DXUTTimer.fTimeoutInSecs;
+            }
+            pTimerList->SetAt(i, DXUTTimer);
+        }
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+// External state access functions
+//--------------------------------------------------------------------------------------
+IDirect3D9* DXUTGetD3DObject()                      { return GetDXUTState().GetD3D(); }        
+IDirect3DDevice9* DXUTGetD3DDevice()                { return GetDXUTState().GetD3DDevice(); }  
+const D3DSURFACE_DESC* DXUTGetBackBufferSurfaceDesc() { return GetDXUTState().GetBackBufferSurfaceDesc(); }
+const D3DCAPS9* DXUTGetDeviceCaps()                 { return GetDXUTState().GetCaps(); }
+HINSTANCE DXUTGetHINSTANCE()                        { return GetDXUTState().GetHInstance(); }
+HWND DXUTGetHWND()                                  { return DXUTIsWindowed() ? GetDXUTState().GetHWNDDeviceWindowed() : GetDXUTState().GetHWNDDeviceFullScreen(); }
+HWND DXUTGetHWNDFocus()                             { return GetDXUTState().GetHWNDFocus(); }
+HWND DXUTGetHWNDDeviceFullScreen()                  { return GetDXUTState().GetHWNDDeviceFullScreen(); }
+HWND DXUTGetHWNDDeviceWindowed()                    { return GetDXUTState().GetHWNDDeviceWindowed(); }
+RECT DXUTGetWindowClientRect()                      { RECT rc; GetClientRect( DXUTGetHWND(), &rc ); return rc; }
+RECT DXUTGetWindowClientRectAtModeChange()          { RECT rc = { 0, 0, GetDXUTState().GetWindowBackBufferWidthAtModeChange(), GetDXUTState().GetWindowBackBufferHeightAtModeChange() }; return rc; }
+RECT DXUTGetFullsceenClientRectAtModeChange()       { RECT rc = { 0, 0, GetDXUTState().GetFullScreenBackBufferWidthAtModeChange(), GetDXUTState().GetFullScreenBackBufferHeightAtModeChange() }; return rc; }
+double DXUTGetTime()                                { return GetDXUTState().GetTime(); }
+float DXUTGetElapsedTime()                          { return GetDXUTState().GetElapsedTime(); }
+float DXUTGetFPS()                                  { return GetDXUTState().GetFPS(); }
+LPCWSTR DXUTGetWindowTitle()                        { return GetDXUTState().GetWindowTitle(); }
+LPCWSTR DXUTGetDeviceStats()                        { return GetDXUTState().GetDeviceStats(); }
+bool DXUTIsRenderingPaused()                        { return GetDXUTState().GetPauseRenderingCount() > 0; }
+bool DXUTIsTimePaused()                             { return GetDXUTState().GetPauseTimeCount() > 0; }
+bool DXUTIsActive()									{ return GetDXUTState().GetActive(); }
+int DXUTGetExitCode()                               { return GetDXUTState().GetExitCode(); }
+bool DXUTGetShowMsgBoxOnError()                     { return GetDXUTState().GetShowMsgBoxOnError(); }
+bool DXUTGetAutomation()                            { return GetDXUTState().GetAutomation(); }
+bool DXUTGetHandleDefaultHotkeys()                  { return GetDXUTState().GetHandleDefaultHotkeys(); }
+bool DXUTIsKeyDown( BYTE vKey )
+{ 
+    bool* bKeys = GetDXUTState().GetKeys(); 
+    if( vKey >= 0xA0 && vKey <= 0xA5 )  // VK_LSHIFT, VK_RSHIFT, VK_LCONTROL, VK_RCONTROL, VK_LMENU, VK_RMENU
+        return GetAsyncKeyState( vKey ) != 0; // these keys only are tracked via GetAsyncKeyState()
+    else if( vKey >= 0x01 && vKey <= 0x06 && vKey != 0x03 ) // mouse buttons (VK_*BUTTON)
+        return DXUTIsMouseButtonDown(vKey);
+    else
+        return bKeys[vKey];
+}
+bool DXUTIsMouseButtonDown( BYTE vButton )          
+{ 
+    bool* bMouseButtons = GetDXUTState().GetMouseButtons(); 
+    int nIndex = DXUTMapButtonToArrayIndex(vButton); 
+    return bMouseButtons[nIndex]; 
+}
+void DXUTSetMultimonSettings( bool bAutoChangeAdapter )
+{
+    GetDXUTState().SetAutoChangeAdapter( bAutoChangeAdapter );
+}
+void DXUTSetCursorSettings( bool bShowCursorWhenFullScreen, bool bClipCursorWhenFullScreen ) 
+{ 
+    GetDXUTState().SetClipCursorWhenFullScreen(bClipCursorWhenFullScreen); 
+    GetDXUTState().SetShowCursorWhenFullScreen(bShowCursorWhenFullScreen); 
+    DXUTSetupCursor();
+}
+void DXUTSetWindowSettings( bool bCallDefWindowProc )
+{
+    GetDXUTState().SetCallDefWindowProc( bCallDefWindowProc );
+}
+void DXUTSetConstantFrameTime( bool bEnabled, float fTimePerFrame ) 
+{ 
+    if( GetDXUTState().GetOverrideConstantFrameTime() ) 
+    { 
+        bEnabled = GetDXUTState().GetOverrideConstantFrameTime(); 
+        fTimePerFrame = GetDXUTState().GetOverrideConstantTimePerFrame(); 
+    } 
+    GetDXUTState().SetConstantFrameTime(bEnabled); 
+    GetDXUTState().SetTimePerFrame(fTimePerFrame); 
+}
+
+
+//--------------------------------------------------------------------------------------
+// Return if windowed in the current device.  If no device exists yet, then returns false
+//--------------------------------------------------------------------------------------
+bool DXUTIsWindowed()                               
+{ 
+    DXUTDeviceSettings* pDeviceSettings = GetDXUTState().GetCurrentDeviceSettings(); 
+    if(pDeviceSettings) 
+        return (pDeviceSettings->pp.Windowed != 0); 
+    else 
+        return false; 
+}
+
+
+//--------------------------------------------------------------------------------------
+// Return the present params of the current device.  If no device exists yet, then
+// return blank present params
+//--------------------------------------------------------------------------------------
+D3DPRESENT_PARAMETERS DXUTGetPresentParameters()    
+{ 
+    DXUTDeviceSettings* pDS = GetDXUTState().GetCurrentDeviceSettings(); 
+    if( pDS ) 
+    {
+        return pDS->pp; 
+    }
+    else 
+    {
+        D3DPRESENT_PARAMETERS pp;
+        ZeroMemory( &pp, sizeof(D3DPRESENT_PARAMETERS) );
+        return pp; 
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+// Return the device settings of the current device.  If no device exists yet, then
+// return blank device settings 
+//--------------------------------------------------------------------------------------
+DXUTDeviceSettings DXUTGetDeviceSettings()   
+{ 
+    DXUTDeviceSettings* pDS = GetDXUTState().GetCurrentDeviceSettings();
+    if( pDS )
+    {
+        return *pDS;
+    }
+    else
+    {
+        DXUTDeviceSettings ds;
+        ZeroMemory( &ds, sizeof(DXUTDeviceSettings) );
+        return ds;
+    }
+} 
+
+#ifndef SM_REMOTESESSION  // needs WINVER >= 0x0500
+#define SM_REMOTESESSION  0x1000
+#endif
+
+
+//--------------------------------------------------------------------------------------
+// Display an custom error msg box 
+//--------------------------------------------------------------------------------------
+void DXUTDisplayErrorMessage( HRESULT hr )
+{
+    WCHAR strBuffer[512];
+
+    int nExitCode;
+    bool bFound = true; 
+    switch( hr )
+    {
+        case DXUTERR_NODIRECT3D:             nExitCode = 2; StringCchCopy( strBuffer, 512, L"Could not initialize Direct3D. You may want to check that the latest version of DirectX is correctly installed on your system.  Also make sure that this program was compiled with header files that match the installed DirectX DLLs." ); break;
+        case DXUTERR_INCORRECTVERSION:       nExitCode = 10; StringCchCopy( strBuffer, 512, L"Incorrect version of Direct3D and/or D3DX." ); break;
+        case DXUTERR_MEDIANOTFOUND:          nExitCode = 4; StringCchCopy( strBuffer, 512, L"Could not find required media. Ensure that the DirectX SDK is correctly installed." ); break;
+        case DXUTERR_NONZEROREFCOUNT:        nExitCode = 5; StringCchCopy( strBuffer, 512, L"The D3D device has a non-zero reference count, meaning some objects were not released." ); break;
+        case DXUTERR_CREATINGDEVICE:         nExitCode = 6; StringCchCopy( strBuffer, 512, L"Failed creating the Direct3D device." ); break;
+        case DXUTERR_RESETTINGDEVICE:        nExitCode = 7; StringCchCopy( strBuffer, 512, L"Failed resetting the Direct3D device." ); break;
+        case DXUTERR_CREATINGDEVICEOBJECTS:  nExitCode = 8; StringCchCopy( strBuffer, 512, L"Failed creating Direct3D device objects." ); break;
+        case DXUTERR_RESETTINGDEVICEOBJECTS: nExitCode = 9; StringCchCopy( strBuffer, 512, L"Failed resetting Direct3D device objects." ); break;
+        case DXUTERR_NOCOMPATIBLEDEVICES:    
+            nExitCode = 3; 
+            if( GetSystemMetrics(SM_REMOTESESSION) != 0 )
+                StringCchCopy( strBuffer, 512, L"Direct3D does not work over a remote session." ); 
+            else
+                StringCchCopy( strBuffer, 512, L"Could not find any compatible Direct3D devices." ); 
+            break;
+        default: bFound = false; nExitCode = 1;break;
+    }   
+
+    GetDXUTState().SetExitCode(nExitCode);
+
+    bool bShowMsgBoxOnError = GetDXUTState().GetShowMsgBoxOnError();
+    if( bFound && bShowMsgBoxOnError )
+    {
+        if( DXUTGetWindowTitle()[0] == 0 )
+            MessageBox( DXUTGetHWND(), strBuffer, L"DirectX Application", MB_ICONERROR|MB_OK );
+        else
+            MessageBox( DXUTGetHWND(), strBuffer, DXUTGetWindowTitle(), MB_ICONERROR|MB_OK );
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+// Display error msg box to help debug 
+//--------------------------------------------------------------------------------------
+HRESULT WINAPI DXUTTrace( const CHAR* strFile, DWORD dwLine, HRESULT hr,
+                          const WCHAR* strMsg, bool bPopMsgBox )
+{
+    bool bShowMsgBoxOnError = GetDXUTState().GetShowMsgBoxOnError();
+    if( bPopMsgBox && bShowMsgBoxOnError == false )
+        bPopMsgBox = false;
+
+    return DXTrace( strFile, dwLine, hr, strMsg, bPopMsgBox );
+}
+
+
+//--------------------------------------------------------------------------------------
+// Checks to see if the HWND changed monitors, and if it did it creates a device 
+// from the monitor's adapter and recreates the scene.
+//--------------------------------------------------------------------------------------
+void DXUTCheckForWindowChangingMonitors()
+{
+    // Skip this check for various reasons
+    if( !GetDXUTState().GetAutoChangeAdapter() || 
+         GetDXUTState().GetIgnoreSizeChange() ||
+        !GetDXUTState().GetDeviceCreated() ||
+        !GetDXUTState().GetCurrentDeviceSettings()->pp.Windowed )
+    {
+        return;
+    }
+
+    HRESULT hr;
+    HMONITOR hWindowMonitor = DXUTMonitorFromWindow( DXUTGetHWND(), MONITOR_DEFAULTTOPRIMARY );
+    HMONITOR hAdapterMonitor = GetDXUTState().GetAdapterMonitor();
+    if( hWindowMonitor != hAdapterMonitor )
+    {
+        UINT newOrdinal;
+        if( SUCCEEDED( DXUTGetAdapterOrdinalFromMonitor( hWindowMonitor, &newOrdinal ) ) )
+        {
+            // Find the closest valid device settings with the new ordinal
+            DXUTDeviceSettings deviceSettings = DXUTGetDeviceSettings();
+            deviceSettings.AdapterOrdinal = newOrdinal;
+            
+            DXUTMatchOptions matchOptions;
+            matchOptions.eAdapterOrdinal     = DXUTMT_PRESERVE_INPUT;
+            matchOptions.eDeviceType         = DXUTMT_CLOSEST_TO_INPUT;
+            matchOptions.eWindowed           = DXUTMT_CLOSEST_TO_INPUT;
+            matchOptions.eAdapterFormat      = DXUTMT_CLOSEST_TO_INPUT;
+            matchOptions.eVertexProcessing   = DXUTMT_CLOSEST_TO_INPUT;
+            matchOptions.eResolution         = DXUTMT_CLOSEST_TO_INPUT;
+            matchOptions.eBackBufferFormat   = DXUTMT_CLOSEST_TO_INPUT;
+            matchOptions.eBackBufferCount    = DXUTMT_CLOSEST_TO_INPUT;
+            matchOptions.eMultiSample        = DXUTMT_CLOSEST_TO_INPUT;
+            matchOptions.eSwapEffect         = DXUTMT_CLOSEST_TO_INPUT;
+            matchOptions.eDepthFormat        = DXUTMT_CLOSEST_TO_INPUT;
+            matchOptions.eStencilFormat      = DXUTMT_CLOSEST_TO_INPUT;
+            matchOptions.ePresentFlags       = DXUTMT_CLOSEST_TO_INPUT;
+            matchOptions.eRefreshRate        = DXUTMT_CLOSEST_TO_INPUT;
+            matchOptions.ePresentInterval    = DXUTMT_CLOSEST_TO_INPUT;
+
+            hr = DXUTFindValidDeviceSettings( &deviceSettings, &deviceSettings, &matchOptions );
+            if( SUCCEEDED(hr) ) 
+            {
+                // Create a Direct3D device using the new device settings.  
+                // If there is an existing device, then it will either reset or recreate the scene.
+                hr = DXUTChangeDevice( &deviceSettings, NULL, false, false );
+
+                // If hr == E_ABORT, this means the app rejected the device settings in the ModifySettingsCallback
+                if( hr == E_ABORT )
+                {
+                    // so nothing changed and keep from attempting to switch adapters next time
+                    GetDXUTState().SetAutoChangeAdapter( false );
+                }
+                else if( FAILED(hr) )
+                {
+                    DXUTShutdown();
+                    DXUTPause( false, false );
+                    return;
+                }
+            }
+        }
+    }    
+}
+
+
+//--------------------------------------------------------------------------------------
+// Look for an adapter ordinal that is tied to a HMONITOR
+//--------------------------------------------------------------------------------------
+HRESULT DXUTGetAdapterOrdinalFromMonitor( HMONITOR hMonitor, UINT* pAdapterOrdinal )
+{
+    *pAdapterOrdinal = 0;
+
+    CD3DEnumeration* pd3dEnum = DXUTPrepareEnumerationObject();
+    IDirect3D9*      pD3D     = DXUTGetD3DObject();
+
+    CGrowableArray<CD3DEnumAdapterInfo*>* pAdapterList = pd3dEnum->GetAdapterInfoList();
+    for( int iAdapter=0; iAdapter<pAdapterList->GetSize(); iAdapter++ )
+    {
+        CD3DEnumAdapterInfo* pAdapterInfo = pAdapterList->GetAt(iAdapter);
+        HMONITOR hAdapterMonitor = pD3D->GetAdapterMonitor( pAdapterInfo->AdapterOrdinal );
+        if( hAdapterMonitor == hMonitor )
+        {
+            *pAdapterOrdinal = pAdapterInfo->AdapterOrdinal;
+            return S_OK;
+        }
+    }
+
+    return E_FAIL;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Internal function to map MK_* to an array index
+//--------------------------------------------------------------------------------------
+int DXUTMapButtonToArrayIndex( BYTE vButton )
+{
+    switch( vButton )
+    {
+        case MK_LBUTTON: return 0;
+        case VK_MBUTTON: 
+        case MK_MBUTTON: return 1;
+        case MK_RBUTTON: return 2;
+        case VK_XBUTTON1:
+        case MK_XBUTTON1: return 3;
+        case VK_XBUTTON2:
+        case MK_XBUTTON2: return 4;
+    }
+
+    return 0;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Setup cursor based on current settings (window/fullscreen mode, show cursor state, clip cursor state)
+//--------------------------------------------------------------------------------------
+void DXUTSetupCursor()
+{
+	// Show the cursor again if returning to fullscreen 
+	IDirect3DDevice9* pd3dDevice = DXUTGetD3DDevice();
+	if( !DXUTIsWindowed() && pd3dDevice )
+    {
+        if( GetDXUTState().GetShowCursorWhenFullScreen() )
+	    {
+            SetCursor( NULL ); // Turn off Windows cursor in full screen mode
+		    HCURSOR hCursor = (HCURSOR)(ULONG_PTR)GetClassLongPtr( DXUTGetHWNDDeviceFullScreen(), GCLP_HCURSOR );
+		    DXUTSetDeviceCursor( pd3dDevice, hCursor, false );
+            DXUTGetD3DDevice()->ShowCursor( true );
+	    }
+        else
+        {
+            SetCursor( NULL ); // Turn off Windows cursor in full screen mode
+            DXUTGetD3DDevice()->ShowCursor( false );
+        }
+    }
+
+	// Clip cursor if requested
+	if( !DXUTIsWindowed() && GetDXUTState().GetClipCursorWhenFullScreen() )
+	{
+		// Confine cursor to full screen window
+		RECT rcWindow;
+		GetWindowRect( DXUTGetHWNDDeviceFullScreen(), &rcWindow );
+		ClipCursor( &rcWindow );
+	}
+	else
+	{
+		ClipCursor( NULL );
+	}
+}
+
+//--------------------------------------------------------------------------------------
+// Gives the D3D device a cursor with image and hotspot from hCursor.
+//--------------------------------------------------------------------------------------
+HRESULT DXUTSetDeviceCursor( IDirect3DDevice9* pd3dDevice, HCURSOR hCursor, bool bAddWatermark )
+{
+    HRESULT hr = E_FAIL;
+    ICONINFO iconinfo;
+    bool bBWCursor;
+    LPDIRECT3DSURFACE9 pCursorSurface = NULL;
+    HDC hdcColor = NULL;
+    HDC hdcMask = NULL;
+    HDC hdcScreen = NULL;
+    BITMAP bm;
+    DWORD dwWidth;
+    DWORD dwHeightSrc;
+    DWORD dwHeightDest;
+    COLORREF crColor;
+    COLORREF crMask;
+    UINT x;
+    UINT y;
+    BITMAPINFO bmi;
+    COLORREF* pcrArrayColor = NULL;
+    COLORREF* pcrArrayMask = NULL;
+    DWORD* pBitmap;
+    HGDIOBJ hgdiobjOld;
+
+    ZeroMemory( &iconinfo, sizeof(iconinfo) );
+    if( !GetIconInfo( hCursor, &iconinfo ) )
+        goto End;
+
+    if (0 == GetObject((HGDIOBJ)iconinfo.hbmMask, sizeof(BITMAP), (LPVOID)&bm))
+        goto End;
+    dwWidth = bm.bmWidth;
+    dwHeightSrc = bm.bmHeight;
+
+    if( iconinfo.hbmColor == NULL )
+    {
+        bBWCursor = TRUE;
+        dwHeightDest = dwHeightSrc / 2;
+    }
+    else 
+    {
+        bBWCursor = FALSE;
+        dwHeightDest = dwHeightSrc;
+    }
+
+    // Create a surface for the fullscreen cursor
+    if( FAILED( hr = pd3dDevice->CreateOffscreenPlainSurface( dwWidth, dwHeightDest, 
+        D3DFMT_A8R8G8B8, D3DPOOL_SCRATCH, &pCursorSurface, NULL ) ) )
+    {
+        goto End;
+    }
+
+    pcrArrayMask = new DWORD[dwWidth * dwHeightSrc];
+
+    ZeroMemory(&bmi, sizeof(bmi));
+    bmi.bmiHeader.biSize = sizeof(bmi.bmiHeader);
+    bmi.bmiHeader.biWidth = dwWidth;
+    bmi.bmiHeader.biHeight = dwHeightSrc;
+    bmi.bmiHeader.biPlanes = 1;
+    bmi.bmiHeader.biBitCount = 32;
+    bmi.bmiHeader.biCompression = BI_RGB;
+
+    hdcScreen = GetDC( NULL );
+    hdcMask = CreateCompatibleDC( hdcScreen );
+    if( hdcMask == NULL )
+    {
+        hr = E_FAIL;
+        goto End;
+    }
+    hgdiobjOld = SelectObject(hdcMask, iconinfo.hbmMask);
+    GetDIBits(hdcMask, iconinfo.hbmMask, 0, dwHeightSrc, 
+        pcrArrayMask, &bmi, DIB_RGB_COLORS);
+    SelectObject(hdcMask, hgdiobjOld);
+
+    if (!bBWCursor)
+    {
+        pcrArrayColor = new DWORD[dwWidth * dwHeightDest];
+        hdcColor = CreateCompatibleDC( hdcScreen );
+        if( hdcColor == NULL )
+        {
+            hr = E_FAIL;
+            goto End;
+        }
+        SelectObject(hdcColor, iconinfo.hbmColor);
+        GetDIBits(hdcColor, iconinfo.hbmColor, 0, dwHeightDest, 
+            pcrArrayColor, &bmi, DIB_RGB_COLORS);
+    }
+
+    // Transfer cursor image into the surface
+    D3DLOCKED_RECT lr;
+    pCursorSurface->LockRect( &lr, NULL, 0 );
+    pBitmap = (DWORD*)lr.pBits;
+    for( y = 0; y < dwHeightDest; y++ )
+    {
+        for( x = 0; x < dwWidth; x++ )
+        {
+            if (bBWCursor)
+            {
+                crColor = pcrArrayMask[dwWidth*(dwHeightDest-1-y) + x];
+                crMask = pcrArrayMask[dwWidth*(dwHeightSrc-1-y) + x];
+            }
+            else
+            {
+                crColor = pcrArrayColor[dwWidth*(dwHeightDest-1-y) + x];
+                crMask = pcrArrayMask[dwWidth*(dwHeightDest-1-y) + x];
+            }
+            if (crMask == 0)
+                pBitmap[dwWidth*y + x] = 0xff000000 | crColor;
+            else
+                pBitmap[dwWidth*y + x] = 0x00000000;
+
+            // It may be helpful to make the D3D cursor look slightly 
+            // different from the Windows cursor so you can distinguish 
+            // between the two when developing/testing code.  When
+            // bAddWatermark is TRUE, the following code adds some
+            // small grey "D3D" characters to the upper-left corner of
+            // the D3D cursor image.
+            if( bAddWatermark && x < 12 && y < 5 )
+            {
+                // 11.. 11.. 11.. .... CCC0
+                // 1.1. ..1. 1.1. .... A2A0
+                // 1.1. .1.. 1.1. .... A4A0
+                // 1.1. ..1. 1.1. .... A2A0
+                // 11.. 11.. 11.. .... CCC0
+
+                const WORD wMask[5] = { 0xccc0, 0xa2a0, 0xa4a0, 0xa2a0, 0xccc0 };
+                if( wMask[y] & (1 << (15 - x)) )
+                {
+                    pBitmap[dwWidth*y + x] |= 0xff808080;
+                }
+            }
+        }
+    }
+    pCursorSurface->UnlockRect();
+
+    // Set the device cursor
+    if( FAILED( hr = pd3dDevice->SetCursorProperties( iconinfo.xHotspot, 
+        iconinfo.yHotspot, pCursorSurface ) ) )
+    {
+        goto End;
+    }
+
+    hr = S_OK;
+
+End:
+    if( iconinfo.hbmMask != NULL )
+        DeleteObject( iconinfo.hbmMask );
+    if( iconinfo.hbmColor != NULL )
+        DeleteObject( iconinfo.hbmColor );
+    if( hdcScreen != NULL )
+        ReleaseDC( NULL, hdcScreen );
+    if( hdcColor != NULL )
+        DeleteDC( hdcColor );
+    if( hdcMask != NULL )
+        DeleteDC( hdcMask );
+    SAFE_DELETE_ARRAY( pcrArrayColor );
+    SAFE_DELETE_ARRAY( pcrArrayMask );
+    SAFE_RELEASE( pCursorSurface );
+    return hr;
+}
+
+
+
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/dxstdafx.cpp
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/dxstdafx.cpp	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/dxstdafx.cpp	(revision 761)
@@ -0,0 +1,11 @@
+//--------------------------------------------------------------------------------------
+// File: DxStdAfx.cpp
+//
+// Desc: Precompiled headers for DXUT and DirectX SDK samples
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//--------------------------------------------------------------------------------------
+#include "dxstdafx.h"
+
+
+
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT.h
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT.h	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUT.h	(revision 761)
@@ -0,0 +1,206 @@
+//--------------------------------------------------------------------------------------
+// File: DXUT.h
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//--------------------------------------------------------------------------------------
+#pragma once
+#ifndef DXUT_H
+#define DXUT_H
+
+#ifndef UNICODE
+#error "DXUT requires a Unicode build. See the nearby comments for details"
+//
+// If you are using Microsoft Visual C++ .NET, under the General tab of the project 
+// properties change the Character Set to 'Use Unicode Character Set'.  
+//
+// Windows XP and later are native Unicode so Unicode applications will perform better.  
+// For Windows 98 and Windows Me support, consider using the Microsoft Layer for Unicode (MSLU).  
+//
+// To use MSLU, link against a set of libraries similar to this
+//      /nod:kernel32.lib /nod:advapi32.lib /nod:user32.lib /nod:gdi32.lib /nod:shell32.lib /nod:comdlg32.lib /nod:version.lib /nod:mpr.lib /nod:rasapi32.lib /nod:winmm.lib /nod:winspool.lib /nod:vfw32.lib /nod:secur32.lib /nod:oleacc.lib /nod:oledlg.lib /nod:sensapi.lib UnicoWS.lib kernel32.lib advapi32.lib user32.lib gdi32.lib shell32.lib comdlg32.lib version.lib mpr.lib rasapi32.lib winmm.lib winspool.lib vfw32.lib secur32.lib oleacc.lib oledlg.lib sensapi.lib dxerr9.lib dxguid.lib d3dx9d.lib d3d9.lib comctl32.lib
+// and put the unicows.dll (available for download from msdn.microsoft.com) in the exe's folder.
+// 
+// For more details see the MSDN article titled:
+// "MSLU: Develop Unicode Applications for Windows 9x Platforms with the Microsoft Layer for Unicode"
+// at http://msdn.microsoft.com/msdnmag/issues/01/10/MSLU/default.aspx 
+//
+#endif
+
+//--------------------------------------------------------------------------------------
+// Structs
+//--------------------------------------------------------------------------------------
+class CD3DEnumeration;
+
+struct DXUTDeviceSettings
+{
+    UINT AdapterOrdinal;
+    D3DDEVTYPE DeviceType;
+    D3DFORMAT AdapterFormat;
+    DWORD BehaviorFlags;
+    D3DPRESENT_PARAMETERS pp;
+};
+
+
+//--------------------------------------------------------------------------------------
+// Error codes
+//--------------------------------------------------------------------------------------
+#define DXUTERR_NODIRECT3D              MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0901)
+#define DXUTERR_NOCOMPATIBLEDEVICES     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0902)
+#define DXUTERR_MEDIANOTFOUND           MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0903)
+#define DXUTERR_NONZEROREFCOUNT         MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0904)
+#define DXUTERR_CREATINGDEVICE          MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0905)
+#define DXUTERR_RESETTINGDEVICE         MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0906)
+#define DXUTERR_CREATINGDEVICEOBJECTS   MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0907)
+#define DXUTERR_RESETTINGDEVICEOBJECTS  MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0908)
+#define DXUTERR_INCORRECTVERSION        MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0909)
+
+
+//--------------------------------------------------------------------------------------
+// Callback registration 
+//--------------------------------------------------------------------------------------
+typedef bool    (CALLBACK *LPDXUTCALLBACKISDEVICEACCEPTABLE)( D3DCAPS9* pCaps, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, bool bWindowed, void* pUserContext );
+typedef bool    (CALLBACK *LPDXUTCALLBACKMODIFYDEVICESETTINGS)( DXUTDeviceSettings* pDeviceSettings, const D3DCAPS9* pCaps, void* pUserContext );
+typedef HRESULT (CALLBACK *LPDXUTCALLBACKDEVICECREATED)( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext );
+typedef HRESULT (CALLBACK *LPDXUTCALLBACKDEVICERESET)( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext );
+typedef void    (CALLBACK *LPDXUTCALLBACKDEVICEDESTROYED)( void* pUserContext );
+typedef void    (CALLBACK *LPDXUTCALLBACKDEVICELOST)( void* pUserContext );
+typedef void    (CALLBACK *LPDXUTCALLBACKFRAMEMOVE)( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext );
+typedef void    (CALLBACK *LPDXUTCALLBACKFRAMERENDER)( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext );
+typedef void    (CALLBACK *LPDXUTCALLBACKKEYBOARD)( UINT nChar, bool bKeyDown, bool bAltDown, void* pUserContext );
+typedef void    (CALLBACK *LPDXUTCALLBACKMOUSE)( bool bLeftButtonDown, bool bRightButtonDown, bool bMiddleButtonDown, bool bSideButton1Down, bool bSideButton2Down, int nMouseWheelDelta, int xPos, int yPos, void* pUserContext );
+typedef LRESULT (CALLBACK *LPDXUTCALLBACKMSGPROC)( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool* pbNoFurtherProcessing, void* pUserContext );
+typedef void    (CALLBACK *LPDXUTCALLBACKTIMER)( UINT idEvent, void* pUserContext );
+
+// Device callbacks
+void DXUTSetCallbackDeviceCreated( LPDXUTCALLBACKDEVICECREATED pCallbackDeviceCreated, void* pUserContext = NULL );
+void DXUTSetCallbackDeviceReset( LPDXUTCALLBACKDEVICERESET pCallbackDeviceReset, void* pUserContext = NULL );
+void DXUTSetCallbackDeviceLost( LPDXUTCALLBACKDEVICELOST pCallbackDeviceLost, void* pUserContext = NULL );
+void DXUTSetCallbackDeviceDestroyed( LPDXUTCALLBACKDEVICEDESTROYED pCallbackDeviceDestroyed, void* pUserContext = NULL );
+void DXUTSetCallbackDeviceChanging( LPDXUTCALLBACKMODIFYDEVICESETTINGS pCallbackModifyDeviceSettings, void* pUserContext = NULL );
+
+// Frame callbacks
+void DXUTSetCallbackFrameMove( LPDXUTCALLBACKFRAMEMOVE pCallbackFrameMove, void* pUserContext = NULL );
+void DXUTSetCallbackFrameRender( LPDXUTCALLBACKFRAMERENDER pCallbackFrameRender, void* pUserContext = NULL );
+
+// Message callbacks
+void DXUTSetCallbackKeyboard( LPDXUTCALLBACKKEYBOARD pCallbackKeyboard, void* pUserContext = NULL );
+void DXUTSetCallbackMouse( LPDXUTCALLBACKMOUSE pCallbackMouse, bool bIncludeMouseMove = false, void* pUserContext = NULL );
+void DXUTSetCallbackMsgProc( LPDXUTCALLBACKMSGPROC pCallbackMsgProc, void* pUserContext = NULL );
+
+
+//--------------------------------------------------------------------------------------
+// Initialization
+//--------------------------------------------------------------------------------------
+HRESULT DXUTInit( bool bParseCommandLine = true, bool bHandleDefaultHotkeys = true, bool bShowMsgBoxOnError = true, bool bHandleAltEnter = true );
+
+// Choose either DXUTCreateWindow or DXUTSetWindow.  If using DXUTSetWindow, consider using DXUTStaticWndProc
+HRESULT DXUTCreateWindow( const WCHAR* strWindowTitle = L"Direct3D Window", 
+                          HINSTANCE hInstance = NULL, HICON hIcon = NULL, HMENU hMenu = NULL,
+                          int x = CW_USEDEFAULT, int y = CW_USEDEFAULT );
+HRESULT DXUTSetWindow( HWND hWndFocus, HWND hWndDeviceFullScreen, HWND hWndDeviceWindowed, bool bHandleMessages = true );
+LRESULT CALLBACK DXUTStaticWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
+
+// Choose either DXUTCreateDevice or DXUTSetDevice or DXUTCreateDeviceFromSettings
+HRESULT DXUTCreateDevice( UINT AdapterOrdinal = D3DADAPTER_DEFAULT, bool bWindowed = true, 
+                          int nSuggestedWidth = 0, int nSuggestedHeight = 0,
+                          LPDXUTCALLBACKISDEVICEACCEPTABLE pCallbackIsDeviceAcceptable = NULL,
+                          LPDXUTCALLBACKMODIFYDEVICESETTINGS pCallbackModifyDeviceSettings = NULL, 
+                          void* pUserContext = NULL );
+HRESULT DXUTCreateDeviceFromSettings( DXUTDeviceSettings* pDeviceSettings, bool bPreserveInput = false, bool bClipWindowToSingleAdapter = true );
+HRESULT DXUTSetDevice( IDirect3DDevice9* pd3dDevice );
+
+// Choose either DXUTMainLoop or implement your own main loop 
+HRESULT DXUTMainLoop( HACCEL hAccel = NULL );
+
+// If not using DXUTMainLoop consider using DXUTRender3DEnvironment
+void DXUTRender3DEnvironment(); 
+
+
+//--------------------------------------------------------------------------------------
+// Finding valid device settings
+//--------------------------------------------------------------------------------------
+enum DXUT_MATCH_TYPE
+{
+    DXUTMT_IGNORE_INPUT = 0,  // Use the closest valid value to a default 
+    DXUTMT_PRESERVE_INPUT,    // Use input without change, but may cause no valid device to be found
+    DXUTMT_CLOSEST_TO_INPUT   // Use the closest valid value to the input 
+};
+
+struct DXUTMatchOptions
+{
+    DXUT_MATCH_TYPE eAdapterOrdinal;
+    DXUT_MATCH_TYPE eDeviceType;
+    DXUT_MATCH_TYPE eWindowed;
+    DXUT_MATCH_TYPE eAdapterFormat;
+    DXUT_MATCH_TYPE eVertexProcessing;
+    DXUT_MATCH_TYPE eResolution;
+    DXUT_MATCH_TYPE eBackBufferFormat;
+    DXUT_MATCH_TYPE eBackBufferCount;
+    DXUT_MATCH_TYPE eMultiSample;
+    DXUT_MATCH_TYPE eSwapEffect;
+    DXUT_MATCH_TYPE eDepthFormat;
+    DXUT_MATCH_TYPE eStencilFormat;
+    DXUT_MATCH_TYPE ePresentFlags;
+    DXUT_MATCH_TYPE eRefreshRate;
+    DXUT_MATCH_TYPE ePresentInterval;
+};
+
+HRESULT DXUTFindValidDeviceSettings( DXUTDeviceSettings* pOut, DXUTDeviceSettings* pIn = NULL, DXUTMatchOptions* pMatchOptions = NULL );
+
+
+//--------------------------------------------------------------------------------------
+// Common Tasks 
+//--------------------------------------------------------------------------------------
+void    DXUTSetCursorSettings( bool bShowCursorWhenFullScreen, bool bClipCursorWhenFullScreen );
+void    DXUTSetMultimonSettings( bool bAutoChangeAdapter );
+void    DXUTSetShortcutKeySettings( bool bAllowWhenFullscreen = false, bool bAllowWhenWindowed = true ); // Controls the Windows key, and accessibility shortcut keys
+void    DXUTSetWindowSettings( bool bCallDefWindowProc = true );
+void    DXUTSetConstantFrameTime( bool bConstantFrameTime, float fTimePerFrame = 0.0333f );
+HRESULT DXUTSetTimer( LPDXUTCALLBACKTIMER pCallbackTimer, float fTimeoutInSecs = 1.0f, UINT* pnIDEvent = NULL, void* pCallbackUserContext = NULL );
+HRESULT DXUTKillTimer( UINT nIDEvent );
+HRESULT DXUTToggleFullScreen();
+HRESULT DXUTToggleREF();
+void    DXUTPause( bool bPauseTime, bool bPauseRendering );
+void    DXUTResetFrameworkState();
+void    DXUTShutdown( int nExitCode = 0 );
+
+
+//--------------------------------------------------------------------------------------
+// State Retrieval  
+//--------------------------------------------------------------------------------------
+IDirect3D9*             DXUTGetD3DObject(); // Does not addref unlike typical Get* APIs
+IDirect3DDevice9*       DXUTGetD3DDevice(); // Does not addref unlike typical Get* APIs
+DXUTDeviceSettings      DXUTGetDeviceSettings(); 
+D3DPRESENT_PARAMETERS   DXUTGetPresentParameters();
+const D3DSURFACE_DESC*  DXUTGetBackBufferSurfaceDesc();
+const D3DCAPS9*         DXUTGetDeviceCaps();
+HINSTANCE               DXUTGetHINSTANCE();
+HWND                    DXUTGetHWND();
+HWND                    DXUTGetHWNDFocus();
+HWND                    DXUTGetHWNDDeviceFullScreen();
+HWND                    DXUTGetHWNDDeviceWindowed();
+RECT                    DXUTGetWindowClientRect();
+RECT                    DXUTGetWindowClientRectAtModeChange(); // Useful for returning to windowed mode with the same resolution as before toggle to full screen mode
+RECT                    DXUTGetFullsceenClientRectAtModeChange(); // Useful for returning to full screen mode with the same resolution as before toggle to windowed mode
+double                  DXUTGetTime();
+float                   DXUTGetElapsedTime();
+bool                    DXUTIsWindowed();
+float                   DXUTGetFPS();
+LPCWSTR                 DXUTGetWindowTitle();
+LPCWSTR                 DXUTGetFrameStats( bool bIncludeFPS = false );
+LPCWSTR                 DXUTGetDeviceStats();
+bool                    DXUTIsRenderingPaused();
+bool                    DXUTIsTimePaused();
+bool                    DXUTIsActive();
+int                     DXUTGetExitCode();
+bool                    DXUTGetShowMsgBoxOnError();
+bool                    DXUTGetHandleDefaultHotkeys();
+bool                    DXUTIsKeyDown( BYTE vKey ); // Pass a virtual-key code, ex. VK_F1, 'A', VK_RETURN, VK_LSHIFT, etc
+bool                    DXUTIsMouseButtonDown( BYTE vButton ); // Pass a virtual-key code: VK_LBUTTON, VK_RBUTTON, VK_MBUTTON, VK_XBUTTON1, VK_XBUTTON2
+bool                    DXUTGetAutomation();  // Returns true if -automation parameter is used to launch the app
+
+#endif
+
+
+
+
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTgui.cpp
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTgui.cpp	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTgui.cpp	(revision 761)
@@ -0,0 +1,8275 @@
+//--------------------------------------------------------------------------------------
+// File: DXUTgui.cpp
+//
+// Desc: 
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//--------------------------------------------------------------------------------------
+#include "dxstdafx.h"
+#include "DXUTgui.h"
+#include "DXUTsettingsDlg.h"
+#undef min // use __min instead
+#undef max // use __max instead
+
+#ifndef WM_XBUTTONDOWN
+#define WM_XBUTTONDOWN 0x020B // (not always defined)
+#endif
+#ifndef WM_XBUTTONUP
+#define WM_XBUTTONUP 0x020C // (not always defined)
+#endif
+#ifndef WM_MOUSEWHEEL
+#define WM_MOUSEWHEEL 0x020A // (not always defined)
+#endif
+#ifndef WHEEL_DELTA
+#define WHEEL_DELTA 120 // (not always defined)
+#endif
+
+// Minimum scroll bar thumb size
+#define SCROLLBAR_MINTHUMBSIZE 8
+
+// Delay and repeat period when clicking on the scroll bar arrows
+#define SCROLLBAR_ARROWCLICK_DELAY  0.33
+#define SCROLLBAR_ARROWCLICK_REPEAT 0.05
+
+#define UNISCRIBE_DLLNAME L"\\usp10.dll"
+
+#define GETPROCADDRESS( Module, APIName, Temp ) \
+    Temp = GetProcAddress( Module, #APIName ); \
+    if( Temp ) \
+        *(FARPROC*)&_##APIName = Temp
+
+#define PLACEHOLDERPROC( APIName ) \
+    _##APIName = Dummy_##APIName
+
+#define IMM32_DLLNAME L"\\imm32.dll"
+#define VER_DLLNAME L"\\version.dll"
+
+
+// DXUT_MAX_EDITBOXLENGTH is the maximum string length allowed in edit boxes,
+// including the NULL terminator.
+// 
+// Uniscribe does not support strings having bigger-than-16-bits length.
+// This means that the string must be less than 65536 characters long,
+// including the NULL terminator.
+#define DXUT_MAX_EDITBOXLENGTH 0xFFFF
+
+
+double        CDXUTDialog::s_fTimeRefresh = 0.0f;
+CDXUTControl* CDXUTDialog::s_pControlFocus = NULL;        // The control which has focus
+CDXUTControl* CDXUTDialog::s_pControlPressed = NULL;      // The control currently pressed
+
+
+struct DXUT_SCREEN_VERTEX
+{
+    float x, y, z, h;
+    D3DCOLOR color;
+    float tu, tv;
+
+    static DWORD FVF;
+};
+DWORD DXUT_SCREEN_VERTEX::FVF = D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1;
+
+
+struct DXUT_SCREEN_VERTEX_UNTEX
+{
+    float x, y, z, h;
+    D3DCOLOR color;
+
+    static DWORD FVF;
+};
+DWORD DXUT_SCREEN_VERTEX_UNTEX::FVF = D3DFVF_XYZRHW | D3DFVF_DIFFUSE;
+
+
+inline int RectWidth( RECT &rc ) { return ( (rc).right - (rc).left ); }
+inline int RectHeight( RECT &rc ) { return ( (rc).bottom - (rc).top ); }
+
+
+
+//--------------------------------------------------------------------------------------
+// CDXUTDialog class
+//--------------------------------------------------------------------------------------
+
+//--------------------------------------------------------------------------------------
+CDXUTDialog::CDXUTDialog()
+{
+    m_x = 0;
+    m_y = 0;
+    m_width = 0;
+    m_height = 0;
+
+    m_pManager = NULL;
+    m_bVisible = true;
+    m_bCaption = false;
+    m_bMinimized = false;
+    m_bDrag = false;
+    m_wszCaption[0] = L'\0';
+    m_nCaptionHeight = 18;
+
+    m_colorTopLeft = 0;
+    m_colorTopRight = 0;
+    m_colorBottomLeft = 0;
+    m_colorBottomRight = 0;
+
+    m_pCallbackEvent = NULL;
+    m_pCallbackEventUserContext = NULL;
+
+    m_fTimeLastRefresh = 0;
+
+    m_pControlMouseOver = NULL;
+
+    m_pNextDialog = this;
+    m_pPrevDialog = this;
+
+    m_nDefaultControlID = 0xffff;
+    m_bNonUserEvents = false;
+    m_bKeyboardInput = false;
+    m_bMouseInput = true;
+}
+
+
+//--------------------------------------------------------------------------------------
+CDXUTDialog::~CDXUTDialog()
+{
+    int i=0;
+
+    RemoveAllControls();
+
+    m_Fonts.RemoveAll();
+    m_Textures.RemoveAll();
+
+    for( i=0; i < m_DefaultElements.GetSize(); i++ )
+    {
+        DXUTElementHolder* pElementHolder = m_DefaultElements.GetAt( i );
+        SAFE_DELETE( pElementHolder );
+    }
+
+    m_DefaultElements.RemoveAll();
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDialog::Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog )
+{
+    m_pManager = pManager;
+    if( bRegisterDialog )
+        pManager->RegisterDialog( this );
+
+    SetTexture( 0, MAKEINTRESOURCE(0xFFFF), (HMODULE)0xFFFF );
+    InitDefaultElements();
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDialog::Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog, LPCWSTR pszControlTextureFilename )
+{
+    m_pManager = pManager;
+    if( bRegisterDialog )
+        pManager->RegisterDialog( this );
+    SetTexture( 0, pszControlTextureFilename );
+    InitDefaultElements();
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDialog::Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog, LPCWSTR szControlTextureResourceName, HMODULE hControlTextureResourceModule )
+{
+    m_pManager = pManager;
+    if( bRegisterDialog )
+        pManager->RegisterDialog( this );
+    
+    SetTexture( 0, szControlTextureResourceName, hControlTextureResourceModule );
+    InitDefaultElements();
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDialog::SetCallback( PCALLBACKDXUTGUIEVENT pCallback, void* pUserContext )
+{
+    // If this assert triggers, you need to call CDXUTDialog::Init() first.  This change
+    // was made so that the DXUT's GUI could become seperate and optional from DXUT's core.  The 
+    // creation and interfacing with CDXUTDialogResourceManager is now the responsibility 
+    // of the application if it wishes to use DXUT's GUI.
+    assert( m_pManager != NULL && L"To fix call CDXUTDialog::Init() first.  See comments for details." ); 
+
+    m_pCallbackEvent = pCallback; 
+    m_pCallbackEventUserContext = pUserContext; 
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDialog::RemoveControl( int ID )
+{
+    for( int i=0; i < m_Controls.GetSize(); i++ )
+    {
+        CDXUTControl* pControl = m_Controls.GetAt( i );
+        if( pControl->GetID() == ID )
+        {
+            // Clean focus first
+            ClearFocus();
+
+            // Clear references to this control
+            if( s_pControlFocus == pControl )
+                s_pControlFocus = NULL;
+            if( s_pControlPressed == pControl )
+                s_pControlPressed = NULL;
+            if( m_pControlMouseOver == pControl )
+                m_pControlMouseOver = NULL;
+
+            SAFE_DELETE( pControl );
+            m_Controls.Remove( i );
+
+            return;
+        }
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDialog::RemoveAllControls()
+{
+    if( s_pControlFocus && s_pControlFocus->m_pDialog == this )
+        s_pControlFocus = NULL;
+    if( s_pControlPressed && s_pControlPressed->m_pDialog == this )
+        s_pControlPressed = NULL;
+    m_pControlMouseOver = NULL;
+
+    for( int i=0; i < m_Controls.GetSize(); i++ )
+    {
+        CDXUTControl* pControl = m_Controls.GetAt( i );
+        SAFE_DELETE( pControl );
+    }
+
+    m_Controls.RemoveAll();
+}
+
+
+//--------------------------------------------------------------------------------------
+CDXUTDialogResourceManager::CDXUTDialogResourceManager()
+{
+    m_pd3dDevice = NULL;
+    m_pStateBlock = NULL;
+    m_pSprite = NULL;
+}
+
+
+//--------------------------------------------------------------------------------------
+CDXUTDialogResourceManager::~CDXUTDialogResourceManager()
+{
+    int i;
+    for( i=0; i < m_FontCache.GetSize(); i++ )
+    {
+        DXUTFontNode* pFontNode = m_FontCache.GetAt( i );
+        SAFE_DELETE( pFontNode );
+    }
+    m_FontCache.RemoveAll();   
+
+    for( i=0; i < m_TextureCache.GetSize(); i++ )
+    {
+        DXUTTextureNode* pTextureNode = m_TextureCache.GetAt( i );
+        SAFE_DELETE( pTextureNode );
+    }
+    m_TextureCache.RemoveAll();   
+
+    CUniBuffer::Uninitialize();
+    CDXUTIMEEditBox::Uninitialize();
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialogResourceManager::OnCreateDevice( LPDIRECT3DDEVICE9 pd3dDevice )
+{
+    HRESULT hr = S_OK;
+    int i=0;
+
+    m_pd3dDevice = pd3dDevice;
+    
+    for( i=0; i < m_FontCache.GetSize(); i++ )
+    {
+        hr = CreateFont( i );
+        if( FAILED(hr) )
+            return hr;
+    }
+    
+    for( i=0; i < m_TextureCache.GetSize(); i++ )
+    {
+        hr = CreateTexture( i );
+        if( FAILED(hr) )
+            return hr;
+    }
+
+    hr = D3DXCreateSprite( pd3dDevice, &m_pSprite );
+    if( FAILED(hr) )
+        return DXUT_ERR( L"D3DXCreateSprite", hr );
+
+    // Call CDXUTIMEEditBox's StaticOnCreateDevice()
+    // to initialize certain window-dependent data.
+    CDXUTIMEEditBox::StaticOnCreateDevice();
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialogResourceManager::OnResetDevice()
+{
+    HRESULT hr = S_OK;
+
+    for( int i=0; i < m_FontCache.GetSize(); i++ )
+    {
+        DXUTFontNode* pFontNode = m_FontCache.GetAt( i );
+
+        if( pFontNode->pFont )
+            pFontNode->pFont->OnResetDevice();
+    }
+
+    if( m_pSprite )
+        m_pSprite->OnResetDevice();
+
+    IDirect3DDevice9* pd3dDevice = DXUTGetD3DDevice();
+
+    V_RETURN( pd3dDevice->CreateStateBlock( D3DSBT_ALL, &m_pStateBlock ) );
+
+    return S_OK;
+}
+
+//--------------------------------------------------------------------------------------
+bool CDXUTDialogResourceManager::MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    // Let the CDXUTIMEEditBox's static message proc handle the msg.
+    // This is because some IME messages must be handled to ensure
+    // proper functionalities and the static msg proc ensures that
+    // this happens even if no control has the input focus.
+    if( CDXUTIMEEditBox::StaticMsgProc( uMsg, wParam, lParam ) )
+        return true;
+
+    return false;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDialogResourceManager::OnLostDevice()
+{
+    for( int i=0; i < m_FontCache.GetSize(); i++ )
+    {
+        DXUTFontNode* pFontNode = m_FontCache.GetAt( i );
+
+        if( pFontNode->pFont )
+            pFontNode->pFont->OnLostDevice();
+    }
+
+    if( m_pSprite )
+        m_pSprite->OnLostDevice();
+
+    SAFE_RELEASE( m_pStateBlock  );
+}
+
+    
+//--------------------------------------------------------------------------------------
+void CDXUTDialogResourceManager::OnDestroyDevice()
+{
+    int i=0; 
+
+    m_pd3dDevice = NULL;
+
+    // Release the resources but don't clear the cache, as these will need to be
+    // recreated if the device is recreated
+    for( i=0; i < m_FontCache.GetSize(); i++ )
+    {
+        DXUTFontNode* pFontNode = m_FontCache.GetAt( i );
+        SAFE_RELEASE( pFontNode->pFont );
+    }
+    
+    for( i=0; i < m_TextureCache.GetSize(); i++ )
+    {
+        DXUTTextureNode* pTextureNode = m_TextureCache.GetAt( i );
+        SAFE_RELEASE( pTextureNode->pTexture );
+    }
+
+    SAFE_RELEASE( m_pSprite );
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTDialogResourceManager::RegisterDialog( CDXUTDialog *pDialog )
+{
+    // Check that the dialog isn't already registered.
+    for( int i = 0; i < m_Dialogs.GetSize(); ++i )
+        if( m_Dialogs.GetAt( i ) == pDialog )
+            return true;
+
+    // Add to the list.
+    if( FAILED( m_Dialogs.Add( pDialog ) ) )
+        return false;
+
+    // Set up next and prev pointers.
+    if( m_Dialogs.GetSize() > 1 )
+        m_Dialogs[m_Dialogs.GetSize() - 2]->SetNextDialog( pDialog );
+    m_Dialogs[m_Dialogs.GetSize() - 1]->SetNextDialog( m_Dialogs[0] );
+
+    return true;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDialogResourceManager::UnregisterDialog( CDXUTDialog *pDialog )
+{
+    // Search for the dialog in the list.
+    for( int i = 0; i < m_Dialogs.GetSize(); ++i )
+        if( m_Dialogs.GetAt( i ) == pDialog )
+        {
+            m_Dialogs.Remove( i );
+            if( m_Dialogs.GetSize() > 0 )
+            {
+                int l, r;
+
+                if( 0 == i )
+                    l = m_Dialogs.GetSize() - 1;
+                else
+                    l = i - 1;
+
+                if( m_Dialogs.GetSize() == i )
+                    r = 0;
+                else
+                    r = i;
+
+                m_Dialogs[l]->SetNextDialog( m_Dialogs[r] );
+            }
+            return;
+        }
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDialogResourceManager::EnableKeyboardInputForAllDialogs()
+{
+    // Enable keyboard input for all registered dialogs
+    for( int i = 0; i < m_Dialogs.GetSize(); ++i )
+        m_Dialogs[i]->EnableKeyboardInput( true );
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDialog::Refresh()
+{
+    if( s_pControlFocus )
+        s_pControlFocus->OnFocusOut();
+
+    if( m_pControlMouseOver )
+        m_pControlMouseOver->OnMouseLeave();
+
+    s_pControlFocus = NULL;
+    s_pControlPressed = NULL;
+    m_pControlMouseOver = NULL;
+
+    for( int i=0; i < m_Controls.GetSize(); i++ )
+    {
+        CDXUTControl* pControl = m_Controls.GetAt(i);
+        pControl->Refresh();
+    }
+
+    if( m_bKeyboardInput )
+        FocusDefaultControl();
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialog::OnRender( float fElapsedTime )
+{   
+    // If this assert triggers, you need to call CDXUTDialogResourceManager::On*Device() from inside
+    // the application's device callbacks.  See the SDK samples for an example of how to do this.
+    assert( m_pManager->GetD3DDevice() && m_pManager->m_pStateBlock && L"To fix hook up CDXUTDialogResourceManager to device callbacks.  See comments for details" );
+
+    // See if the dialog needs to be refreshed
+    if( m_fTimeLastRefresh < s_fTimeRefresh )
+    {
+        m_fTimeLastRefresh = DXUTGetTime();
+        Refresh();
+    }
+
+    // For invisible dialog, out now.
+    if( !m_bVisible ||
+        ( m_bMinimized && !m_bCaption ) )
+        return S_OK;
+
+    IDirect3DDevice9* pd3dDevice = m_pManager->GetD3DDevice();
+
+    // Set up a state block here and restore it when finished drawing all the controls
+    m_pManager->m_pStateBlock->Capture();
+
+    pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
+    pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
+    pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
+    pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE, FALSE );
+    pd3dDevice->SetRenderState( D3DRS_SEPARATEALPHABLENDENABLE, FALSE );
+    pd3dDevice->SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_ADD );
+    pd3dDevice->SetRenderState( D3DRS_COLORWRITEENABLE, D3DCOLORWRITEENABLE_ALPHA|D3DCOLORWRITEENABLE_BLUE|D3DCOLORWRITEENABLE_GREEN|D3DCOLORWRITEENABLE_RED );
+    pd3dDevice->SetRenderState( D3DRS_SHADEMODE, D3DSHADE_GOURAUD );
+    pd3dDevice->SetRenderState( D3DRS_FOGENABLE, FALSE );
+    pd3dDevice->SetRenderState( D3DRS_ZWRITEENABLE, FALSE );
+    pd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID );
+    pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_CCW );
+
+    pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG2 );
+    pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
+    pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );
+    pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE );
+    pd3dDevice->SetTextureStageState( 0, D3DTSS_RESULTARG, D3DTA_CURRENT );
+    pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE );
+    pd3dDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
+
+    BOOL bBackgroundIsVisible = ( m_colorTopLeft | m_colorTopRight | m_colorBottomRight | m_colorBottomLeft ) & 0xff000000;
+    if( !m_bMinimized && bBackgroundIsVisible )
+    {
+        DXUT_SCREEN_VERTEX_UNTEX vertices[4] =
+        {
+            (float)m_x,           (float)m_y,            0.5f, 1.0f, m_colorTopLeft,
+            (float)m_x + m_width, (float)m_y,            0.5f, 1.0f, m_colorTopRight,
+            (float)m_x + m_width, (float)m_y + m_height, 0.5f, 1.0f, m_colorBottomRight,
+            (float)m_x,           (float)m_y + m_height, 0.5f, 1.0f, m_colorBottomLeft,
+        };
+
+        pd3dDevice->SetVertexShader( NULL );
+        pd3dDevice->SetPixelShader( NULL );
+
+        pd3dDevice->SetRenderState( D3DRS_ZENABLE, FALSE );
+
+        pd3dDevice->SetFVF( DXUT_SCREEN_VERTEX_UNTEX::FVF );
+        pd3dDevice->DrawPrimitiveUP( D3DPT_TRIANGLEFAN, 2, vertices, sizeof(DXUT_SCREEN_VERTEX_UNTEX) );
+    }
+
+    pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE );
+    pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
+    pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
+    
+    pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE );
+    pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
+    pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );
+
+    pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );
+
+    DXUTTextureNode* pTextureNode = GetTexture( 0 );
+    pd3dDevice->SetTexture( 0, pTextureNode->pTexture );
+
+    m_pManager->m_pSprite->Begin( D3DXSPRITE_DONOTSAVESTATE );
+
+    // Render the caption if it's enabled.
+    if( m_bCaption )
+    {
+        // DrawSprite will offset the rect down by
+        // m_nCaptionHeight, so adjust the rect higher
+        // here to negate the effect.
+        RECT rc = { 0, -m_nCaptionHeight, m_width, 0 };
+        DrawSprite( &m_CapElement, &rc );
+        rc.left += 5; // Make a left margin
+        WCHAR wszOutput[256];
+        StringCchCopy( wszOutput, 256, m_wszCaption );
+        if( m_bMinimized )
+            StringCchCat( wszOutput, 256, L" (Minimized)" );
+        DrawText( wszOutput, &m_CapElement, &rc, true );
+    }
+
+    // If the dialog is minimized, skip rendering
+    // its controls.
+    if( !m_bMinimized )
+    {
+        for( int i=0; i < m_Controls.GetSize(); i++ )
+        {
+            CDXUTControl* pControl = m_Controls.GetAt(i);   
+
+            // Focused control is drawn last
+            if( pControl == s_pControlFocus )
+                continue;
+
+            pControl->Render( pd3dDevice, fElapsedTime );
+        }
+
+        if( s_pControlFocus != NULL && s_pControlFocus->m_pDialog == this )
+            s_pControlFocus->Render( pd3dDevice, fElapsedTime );
+    }
+
+    m_pManager->m_pSprite->End();
+
+    m_pManager->m_pStateBlock->Apply();
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+VOID CDXUTDialog::SendEvent( UINT nEvent, bool bTriggeredByUser, CDXUTControl* pControl )
+{
+    // If no callback has been registered there's nowhere to send the event to
+    if( m_pCallbackEvent == NULL )
+        return;
+
+    // Discard events triggered programatically if these types of events haven't been
+    // enabled
+    if( !bTriggeredByUser && !m_bNonUserEvents )
+        return;
+
+    m_pCallbackEvent( nEvent, pControl->GetID(), pControl, m_pCallbackEventUserContext );
+}
+
+
+//--------------------------------------------------------------------------------------
+int CDXUTDialogResourceManager::AddFont( LPCWSTR strFaceName, LONG height, LONG weight )
+{
+    // See if this font already exists
+    for( int i=0; i < m_FontCache.GetSize(); i++ )
+    {
+        DXUTFontNode* pFontNode = m_FontCache.GetAt(i);
+        size_t nLen = 0;
+        StringCchLength( strFaceName, MAX_PATH, &nLen );        
+        if( 0 == _wcsnicmp( pFontNode->strFace, strFaceName, nLen ) &&
+            pFontNode->nHeight == height &&
+            pFontNode->nWeight == weight )
+        {
+            return i;
+        }
+    }
+
+    // Add a new font and try to create it
+    DXUTFontNode* pNewFontNode = new DXUTFontNode();
+    if( pNewFontNode == NULL )
+        return -1;
+
+    ZeroMemory( pNewFontNode, sizeof(DXUTFontNode) );
+    StringCchCopy( pNewFontNode->strFace, MAX_PATH, strFaceName );
+    pNewFontNode->nHeight = height;
+    pNewFontNode->nWeight = weight;
+    m_FontCache.Add( pNewFontNode );
+    
+    int iFont = m_FontCache.GetSize()-1;
+
+    // If a device is available, try to create immediately
+    if( m_pd3dDevice )
+        CreateFont( iFont );
+
+    return iFont;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialog::SetFont( UINT index, LPCWSTR strFaceName, LONG height, LONG weight )
+{
+    // If this assert triggers, you need to call CDXUTDialog::Init() first.  This change
+    // was made so that the DXUT's GUI could become seperate and optional from DXUT's core.  The 
+    // creation and interfacing with CDXUTDialogResourceManager is now the responsibility 
+    // of the application if it wishes to use DXUT's GUI.
+    assert( m_pManager != NULL && L"To fix call CDXUTDialog::Init() first.  See comments for details." ); 
+
+    // Make sure the list is at least as large as the index being set
+    UINT i;
+    for( i=m_Fonts.GetSize(); i <= index; i++ )
+    {
+        m_Fonts.Add( -1 );
+    }
+
+    int iFont = m_pManager->AddFont( strFaceName, height, weight );
+    m_Fonts.SetAt( index, iFont );
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+DXUTFontNode* CDXUTDialog::GetFont( UINT index )
+{
+    if( NULL == m_pManager )
+        return NULL;
+    return m_pManager->GetFontNode( m_Fonts.GetAt( index ) );
+}
+
+
+//--------------------------------------------------------------------------------------
+int CDXUTDialogResourceManager::AddTexture( LPCWSTR strFilename )
+{
+    // See if this texture already exists
+    for( int i=0; i < m_TextureCache.GetSize(); i++ )
+    {
+        DXUTTextureNode* pTextureNode = m_TextureCache.GetAt(i);
+        size_t nLen = 0;
+        StringCchLength( strFilename, MAX_PATH, &nLen );        
+        if( pTextureNode->bFileSource &&  // Sources must match
+            0 == _wcsnicmp( pTextureNode->strFilename, strFilename, nLen ) )
+            return i;
+    }
+
+    // Add a new texture and try to create it
+    DXUTTextureNode* pNewTextureNode = new DXUTTextureNode();
+    if( pNewTextureNode == NULL )
+        return -1;
+
+    ZeroMemory( pNewTextureNode, sizeof(DXUTTextureNode) );
+    pNewTextureNode->bFileSource = true;
+    StringCchCopy( pNewTextureNode->strFilename, MAX_PATH, strFilename );
+
+    m_TextureCache.Add( pNewTextureNode );
+    
+    int iTexture = m_TextureCache.GetSize()-1;
+
+    // If a device is available, try to create immediately
+    if( m_pd3dDevice )
+        CreateTexture( iTexture );
+
+    return iTexture;
+}
+
+
+//--------------------------------------------------------------------------------------
+int CDXUTDialogResourceManager::AddTexture( LPCWSTR strResourceName, HMODULE hResourceModule )
+{
+    // See if this texture already exists
+    for( int i=0; i < m_TextureCache.GetSize(); i++ )
+    {
+        DXUTTextureNode* pTextureNode = m_TextureCache.GetAt(i);
+        if( !pTextureNode->bFileSource &&      // Sources must match
+            pTextureNode->hResourceModule == hResourceModule ) // Module handles must match
+        {
+            if( IS_INTRESOURCE( strResourceName ) )
+            {
+                // Integer-based ID
+                if( (INT_PTR)strResourceName == pTextureNode->nResourceID )
+                    return i;
+            }
+            else
+            {
+                // String-based ID
+                size_t nLen = 0;
+                StringCchLength( strResourceName, MAX_PATH, &nLen );        
+                if( 0 == _wcsnicmp( pTextureNode->strFilename, strResourceName, nLen ) )
+                    return i;
+            }
+        }
+    }
+
+    // Add a new texture and try to create it
+    DXUTTextureNode* pNewTextureNode = new DXUTTextureNode();
+    if( pNewTextureNode == NULL )
+        return -1;
+
+    ZeroMemory( pNewTextureNode, sizeof(DXUTTextureNode) );
+    pNewTextureNode->hResourceModule = hResourceModule;
+    if( IS_INTRESOURCE( strResourceName ) )
+    {
+        pNewTextureNode->nResourceID = (int)(size_t)strResourceName;
+    }
+    else
+    {
+        pNewTextureNode->nResourceID = 0;
+        StringCchCopy( pNewTextureNode->strFilename, MAX_PATH, strResourceName );
+    }
+
+    m_TextureCache.Add( pNewTextureNode );
+    
+    int iTexture = m_TextureCache.GetSize()-1;
+
+    // If a device is available, try to create immediately
+    if( m_pd3dDevice )
+        CreateTexture( iTexture );
+
+    return iTexture;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialog::SetTexture( UINT index, LPCWSTR strFilename )
+{
+    // If this assert triggers, you need to call CDXUTDialog::Init() first.  This change
+    // was made so that the DXUT's GUI could become seperate and optional from DXUT's core.  The 
+    // creation and interfacing with CDXUTDialogResourceManager is now the responsibility 
+    // of the application if it wishes to use DXUT's GUI.
+    assert( m_pManager != NULL && L"To fix this, call CDXUTDialog::Init() first.  See comments for details." ); 
+
+    // Make sure the list is at least as large as the index being set
+    for( UINT i=m_Textures.GetSize(); i <= index; i++ )
+    {
+        m_Textures.Add( -1 );
+    }
+
+    int iTexture = m_pManager->AddTexture( strFilename );
+
+    m_Textures.SetAt( index, iTexture );
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialog::SetTexture( UINT index, LPCWSTR strResourceName, HMODULE hResourceModule )
+{
+    // If this assert triggers, you need to call CDXUTDialog::Init() first.  This change
+    // was made so that the DXUT's GUI could become seperate and optional from DXUT's core.  The 
+    // creation and interfacing with CDXUTDialogResourceManager is now the responsibility 
+    // of the application if it wishes to use DXUT's GUI.
+    assert( m_pManager != NULL && L"To fix this, call CDXUTDialog::Init() first.  See comments for details." ); 
+
+    // Make sure the list is at least as large as the index being set
+    for( UINT i=m_Textures.GetSize(); i <= index; i++ )
+    {
+        m_Textures.Add( -1 );
+    }
+
+    int iTexture = m_pManager->AddTexture( strResourceName, hResourceModule );
+
+    m_Textures.SetAt( index, iTexture );
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+DXUTTextureNode* CDXUTDialog::GetTexture( UINT index )
+{
+    if( NULL == m_pManager )
+        return NULL;
+    return m_pManager->GetTextureNode( m_Textures.GetAt( index ) );
+}
+
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTDialog::MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    bool bHandled = false;
+
+    // For invisible dialog, do not handle anything.
+    if( !m_bVisible )
+        return false;
+
+    // If automation command-line switch is on, enable this dialog's keyboard input
+    // upon any key press or mouse click.
+    if( DXUTGetAutomation() &&
+        ( WM_LBUTTONDOWN == uMsg || WM_LBUTTONDBLCLK == uMsg || WM_KEYDOWN == uMsg ) )
+    {
+        m_pManager->EnableKeyboardInputForAllDialogs();
+    }
+
+    // If caption is enable, check for clicks in the caption area.
+    if( m_bCaption )
+    {
+        if( uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONDBLCLK )
+        {
+            POINT mousePoint = { short(LOWORD(lParam)), short(HIWORD(lParam)) };
+
+            if( mousePoint.x >= m_x && mousePoint.x < m_x + m_width &&
+                mousePoint.y >= m_y && mousePoint.y < m_y + m_nCaptionHeight )
+            {
+                m_bDrag = true;
+                SetCapture( DXUTGetHWND() );
+                return true;
+            }
+        } else
+        if( uMsg == WM_LBUTTONUP && m_bDrag )
+        {
+            POINT mousePoint = { short(LOWORD(lParam)), short(HIWORD(lParam)) };
+
+            if( mousePoint.x >= m_x && mousePoint.x < m_x + m_width &&
+                mousePoint.y >= m_y && mousePoint.y < m_y + m_nCaptionHeight )
+            {
+                ReleaseCapture();
+                m_bDrag = false;
+                m_bMinimized = !m_bMinimized;
+                return true;
+            }
+        }
+    }
+
+    // If the dialog is minimized, don't send any messages to controls.
+    if( m_bMinimized )
+        return false;
+
+    // If a control is in focus, it belongs to this dialog, and it's enabled, then give
+    // it the first chance at handling the message.
+    if( s_pControlFocus && 
+        s_pControlFocus->m_pDialog == this && 
+        s_pControlFocus->GetEnabled() )
+    {
+        // If the control MsgProc handles it, then we don't.
+        if( s_pControlFocus->MsgProc( uMsg, wParam, lParam ) )
+            return true;
+    }
+
+    switch( uMsg )
+    {
+        case WM_SIZE:
+        case WM_MOVE:
+        {
+            // Handle sizing and moving messages so that in case the mouse cursor is moved out
+            // of an UI control because of the window adjustment, we can properly
+            // unhighlight the highlighted control.
+            POINT pt = { -1, -1 };
+            OnMouseMove( pt );
+            break;
+        }
+
+        case WM_ACTIVATEAPP:
+            // Call OnFocusIn()/OnFocusOut() of the control that currently has the focus
+            // as the application is activated/deactivated.  This matches the Windows
+            // behavior.
+            if( s_pControlFocus && 
+                s_pControlFocus->m_pDialog == this && 
+                s_pControlFocus->GetEnabled() )
+            {
+                if( wParam )
+                    s_pControlFocus->OnFocusIn();
+                else
+                    s_pControlFocus->OnFocusOut();
+            }
+            break;
+
+        // Keyboard messages
+        case WM_KEYDOWN:
+        case WM_SYSKEYDOWN:
+        case WM_KEYUP:
+        case WM_SYSKEYUP:
+        {
+            // If a control is in focus, it belongs to this dialog, and it's enabled, then give
+            // it the first chance at handling the message.
+            if( s_pControlFocus && 
+                s_pControlFocus->m_pDialog == this && 
+                s_pControlFocus->GetEnabled() )
+            {
+                if( s_pControlFocus->HandleKeyboard( uMsg, wParam, lParam ) )
+                    return true;
+            }
+
+            // Not yet handled, see if this matches a control's hotkey
+            // Activate the hotkey if the focus doesn't belong to an
+            // edit box.
+            if( uMsg == WM_KEYDOWN && ( !s_pControlFocus ||
+                                      ( s_pControlFocus->GetType() != DXUT_CONTROL_EDITBOX
+                                     && s_pControlFocus->GetType() != DXUT_CONTROL_IMEEDITBOX ) ) )
+            {
+                for( int i=0; i < m_Controls.GetSize(); i++ )
+                {
+                    CDXUTControl* pControl = m_Controls.GetAt( i );
+                    if( pControl->GetHotkey() == wParam )
+                    {
+                        pControl->OnHotkey();
+                        return true;
+                    }
+                }
+            }
+
+            // Not yet handled, check for focus messages
+            if( uMsg == WM_KEYDOWN )
+            {
+                // If keyboard input is not enabled, this message should be ignored
+                if( !m_bKeyboardInput )
+                    return false;
+
+                switch( wParam )
+                {
+                    case VK_RIGHT:
+                    case VK_DOWN:
+                        if( s_pControlFocus != NULL )
+                        {
+                            return OnCycleFocus( true );
+                        }
+                        break;
+
+                    case VK_LEFT:
+                    case VK_UP:
+                        if( s_pControlFocus != NULL )
+                        {
+                            return OnCycleFocus( false );
+                        }
+                        break;
+
+                    case VK_TAB: 
+                    {
+                        bool bShiftDown = ((GetKeyState( VK_SHIFT ) & 0x8000) != 0);
+                        return OnCycleFocus( !bShiftDown );
+                    }
+                }
+            }
+
+            break;
+        }
+
+
+        // Mouse messages
+        case WM_MOUSEMOVE:
+        case WM_LBUTTONDOWN:
+        case WM_LBUTTONUP:
+        case WM_MBUTTONDOWN:
+        case WM_MBUTTONUP:
+        case WM_RBUTTONDOWN:
+        case WM_RBUTTONUP:
+        case WM_XBUTTONDOWN:
+        case WM_XBUTTONUP:
+        case WM_LBUTTONDBLCLK:
+        case WM_MBUTTONDBLCLK:
+        case WM_RBUTTONDBLCLK:
+        case WM_XBUTTONDBLCLK:
+        case WM_MOUSEWHEEL:
+        {
+            // If not accepting mouse input, return false to indicate the message should still 
+            // be handled by the application (usually to move the camera).
+            if( !m_bMouseInput )
+                return false;
+
+            POINT mousePoint = { short(LOWORD(lParam)), short(HIWORD(lParam)) };
+            mousePoint.x -= m_x;
+            mousePoint.y -= m_y;
+
+            // If caption is enabled, offset the Y coordinate by the negative of its height.
+            if( m_bCaption )
+                mousePoint.y -= m_nCaptionHeight;
+
+            // If a control is in focus, it belongs to this dialog, and it's enabled, then give
+            // it the first chance at handling the message.
+            if( s_pControlFocus && 
+                s_pControlFocus->m_pDialog == this && 
+                s_pControlFocus->GetEnabled() )
+            {
+                if( s_pControlFocus->HandleMouse( uMsg, mousePoint, wParam, lParam ) )
+                    return true;
+            }
+
+            // Not yet handled, see if the mouse is over any controls
+            CDXUTControl* pControl = GetControlAtPoint( mousePoint );
+            if( pControl != NULL && pControl->GetEnabled() )
+            {
+                bHandled = pControl->HandleMouse( uMsg, mousePoint, wParam, lParam );
+                if( bHandled )
+                    return true;
+            }
+            else
+            {
+                // Mouse not over any controls in this dialog, if there was a control
+                // which had focus it just lost it
+                if( uMsg == WM_LBUTTONDOWN && 
+                    s_pControlFocus && 
+                    s_pControlFocus->m_pDialog == this )
+                {
+                    s_pControlFocus->OnFocusOut();
+                    s_pControlFocus = NULL;
+                }
+            }
+
+            // Still not handled, hand this off to the dialog. Return false to indicate the
+            // message should still be handled by the application (usually to move the camera).
+            switch( uMsg )
+            {
+                case WM_MOUSEMOVE:
+                    OnMouseMove( mousePoint );
+                    return false;
+            }
+
+            break;
+        }
+
+        case WM_CAPTURECHANGED:
+        {
+            // The application has lost mouse capture.
+            // The dialog object may not have received
+            // a WM_MOUSEUP when capture changed. Reset
+            // m_bDrag so that the dialog does not mistakenly
+            // think the mouse button is still held down.
+            m_bDrag = false;
+        }
+    }
+
+    return false;
+}
+
+//--------------------------------------------------------------------------------------
+CDXUTControl* CDXUTDialog::GetControlAtPoint( POINT pt )
+{
+    // Search through all child controls for the first one which
+    // contains the mouse point
+    for( int i=0; i < m_Controls.GetSize(); i++ )
+    {
+        CDXUTControl* pControl = m_Controls.GetAt(i);
+
+        if( pControl == NULL )
+        {
+            continue;
+        }
+
+        // We only return the current control if it is visible
+        // and enabled.  Because GetControlAtPoint() is used to do mouse
+        // hittest, it makes sense to perform this filtering.
+        if( pControl->ContainsPoint( pt ) && pControl->GetEnabled() && pControl->GetVisible() )
+        {
+            return pControl;
+        }
+    }
+
+    return NULL;
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTDialog::GetControlEnabled( int ID )
+{
+    CDXUTControl* pControl = GetControl( ID );
+    if( pControl == NULL )
+        return false;
+
+    return pControl->GetEnabled();
+}
+
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDialog::SetControlEnabled( int ID, bool bEnabled )
+{
+    CDXUTControl* pControl = GetControl( ID );
+    if( pControl == NULL )
+        return;
+
+    pControl->SetEnabled( bEnabled );
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDialog::OnMouseUp( POINT pt )
+{
+    s_pControlPressed = NULL;
+    m_pControlMouseOver = NULL;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDialog::OnMouseMove( POINT pt )
+{
+    // Figure out which control the mouse is over now
+    CDXUTControl* pControl = GetControlAtPoint( pt );
+
+    // If the mouse is still over the same control, nothing needs to be done
+    if( pControl == m_pControlMouseOver )
+        return;
+
+    // Handle mouse leaving the old control
+    if( m_pControlMouseOver )
+        m_pControlMouseOver->OnMouseLeave();
+
+    // Handle mouse entering the new control
+    m_pControlMouseOver = pControl;
+    if( pControl != NULL )
+        m_pControlMouseOver->OnMouseEnter();
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialog::SetDefaultElement( UINT nControlType, UINT iElement, CDXUTElement* pElement )
+{
+    // If this Element type already exist in the list, simply update the stored Element
+    for( int i=0; i < m_DefaultElements.GetSize(); i++ )
+    {
+        DXUTElementHolder* pElementHolder = m_DefaultElements.GetAt( i );
+        
+        if( pElementHolder->nControlType == nControlType &&
+            pElementHolder->iElement == iElement )
+        {
+            pElementHolder->Element = *pElement;
+            return S_OK;
+        }
+    }
+
+    // Otherwise, add a new entry
+    DXUTElementHolder* pNewHolder;
+    pNewHolder = new DXUTElementHolder;
+    if( pNewHolder == NULL )
+        return E_OUTOFMEMORY;
+
+    pNewHolder->nControlType = nControlType;
+    pNewHolder->iElement = iElement;
+    pNewHolder->Element = *pElement;
+
+    m_DefaultElements.Add( pNewHolder );
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+CDXUTElement* CDXUTDialog::GetDefaultElement( UINT nControlType, UINT iElement )
+{
+    for( int i=0; i < m_DefaultElements.GetSize(); i++ )
+    {
+        DXUTElementHolder* pElementHolder = m_DefaultElements.GetAt( i );
+        
+        if( pElementHolder->nControlType == nControlType &&
+            pElementHolder->iElement == iElement )
+        {
+            return &pElementHolder->Element;
+        }
+    }
+    
+    return NULL;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialog::AddStatic( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bIsDefault, CDXUTStatic** ppCreated )
+{
+    HRESULT hr = S_OK;
+
+    CDXUTStatic* pStatic = new CDXUTStatic( this );
+
+    if( ppCreated != NULL )
+        *ppCreated = pStatic;
+
+    if( pStatic == NULL )
+        return E_OUTOFMEMORY;
+
+    hr = AddControl( pStatic );
+    if( FAILED(hr) )
+        return hr;
+
+    // Set the ID and list index
+    pStatic->SetID( ID ); 
+    pStatic->SetText( strText );
+    pStatic->SetLocation( x, y );
+    pStatic->SetSize( width, height );
+    pStatic->m_bIsDefault = bIsDefault;
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialog::AddButton( int ID, LPCWSTR strText, int x, int y, int width, int height, UINT nHotkey, bool bIsDefault, CDXUTButton** ppCreated )
+{
+    HRESULT hr = S_OK;
+
+    CDXUTButton* pButton = new CDXUTButton( this );
+
+    if( ppCreated != NULL )
+        *ppCreated = pButton;
+
+    if( pButton == NULL )
+        return E_OUTOFMEMORY;
+
+    hr = AddControl( pButton );
+    if( FAILED(hr) )
+        return hr;
+
+    // Set the ID and list index
+    pButton->SetID( ID ); 
+    pButton->SetText( strText );
+    pButton->SetLocation( x, y );
+    pButton->SetSize( width, height );
+    pButton->SetHotkey( nHotkey );
+    pButton->m_bIsDefault = bIsDefault;
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialog::AddCheckBox( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bChecked, UINT nHotkey, bool bIsDefault, CDXUTCheckBox** ppCreated )
+{
+    HRESULT hr = S_OK;
+
+    CDXUTCheckBox* pCheckBox = new CDXUTCheckBox( this );
+
+    if( ppCreated != NULL )
+        *ppCreated = pCheckBox;
+
+    if( pCheckBox == NULL )
+        return E_OUTOFMEMORY;
+
+    hr = AddControl( pCheckBox );
+    if( FAILED(hr) )
+        return hr;
+
+    // Set the ID and list index
+    pCheckBox->SetID( ID ); 
+    pCheckBox->SetText( strText );
+    pCheckBox->SetLocation( x, y );
+    pCheckBox->SetSize( width, height );
+    pCheckBox->SetHotkey( nHotkey );
+    pCheckBox->m_bIsDefault = bIsDefault;
+    pCheckBox->SetChecked( bChecked );
+    
+    return S_OK;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialog::AddRadioButton( int ID, UINT nButtonGroup, LPCWSTR strText, int x, int y, int width, int height, bool bChecked, UINT nHotkey, bool bIsDefault, CDXUTRadioButton** ppCreated )
+{
+    HRESULT hr = S_OK;
+
+    CDXUTRadioButton* pRadioButton = new CDXUTRadioButton( this );
+
+    if( ppCreated != NULL )
+        *ppCreated = pRadioButton;
+
+    if( pRadioButton == NULL )
+        return E_OUTOFMEMORY;
+
+    hr = AddControl( pRadioButton );
+    if( FAILED(hr) )
+        return hr;
+
+    // Set the ID and list index
+    pRadioButton->SetID( ID ); 
+    pRadioButton->SetText( strText );
+    pRadioButton->SetButtonGroup( nButtonGroup );
+    pRadioButton->SetLocation( x, y );
+    pRadioButton->SetSize( width, height );
+    pRadioButton->SetHotkey( nHotkey );
+    pRadioButton->SetChecked( bChecked );
+    pRadioButton->m_bIsDefault = bIsDefault;
+    pRadioButton->SetChecked( bChecked );
+
+    return S_OK;
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialog::AddComboBox( int ID, int x, int y, int width, int height, UINT nHotkey, bool bIsDefault, CDXUTComboBox** ppCreated )
+{
+    HRESULT hr = S_OK;
+
+    CDXUTComboBox* pComboBox = new CDXUTComboBox( this );
+
+    if( ppCreated != NULL )
+        *ppCreated = pComboBox;
+
+    if( pComboBox == NULL )
+        return E_OUTOFMEMORY;
+
+    hr = AddControl( pComboBox );
+    if( FAILED(hr) )
+        return hr;
+
+    // Set the ID and list index
+    pComboBox->SetID( ID ); 
+    pComboBox->SetLocation( x, y );
+    pComboBox->SetSize( width, height );
+    pComboBox->SetHotkey( nHotkey );
+    pComboBox->m_bIsDefault = bIsDefault;
+
+    return S_OK;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialog::AddSlider( int ID, int x, int y, int width, int height, int min, int max, int value, bool bIsDefault, CDXUTSlider** ppCreated )
+{
+    HRESULT hr = S_OK;
+
+    CDXUTSlider* pSlider = new CDXUTSlider( this );
+
+    if( ppCreated != NULL )
+        *ppCreated = pSlider;
+
+    if( pSlider == NULL )
+        return E_OUTOFMEMORY;
+
+    hr = AddControl( pSlider );
+    if( FAILED(hr) )
+        return hr;
+
+    // Set the ID and list index
+    pSlider->SetID( ID ); 
+    pSlider->SetLocation( x, y );
+    pSlider->SetSize( width, height );
+    pSlider->m_bIsDefault = bIsDefault;
+    pSlider->SetRange( min, max );
+    pSlider->SetValue( value );
+    pSlider->UpdateRects();
+
+    return S_OK;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialog::AddEditBox( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bIsDefault, CDXUTEditBox** ppCreated )
+{
+    HRESULT hr = S_OK;
+
+    CDXUTEditBox *pEditBox = new CDXUTEditBox( this );
+
+    if( ppCreated != NULL )
+        *ppCreated = pEditBox;
+
+    if( pEditBox == NULL )
+        return E_OUTOFMEMORY;
+
+    hr = AddControl( pEditBox );
+    if( FAILED(hr) )
+        return hr;
+
+    // Set the ID and position
+    pEditBox->SetID( ID ); 
+    pEditBox->SetLocation( x, y );
+    pEditBox->SetSize( width, height );
+    pEditBox->m_bIsDefault = bIsDefault;
+
+    if( strText )
+        pEditBox->SetText( strText );
+
+    return S_OK;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialog::AddIMEEditBox( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bIsDefault, CDXUTIMEEditBox** ppCreated )
+{
+    HRESULT hr = S_OK;
+    CDXUTIMEEditBox *pEditBox = new CDXUTIMEEditBox( this );
+
+    if( ppCreated != NULL )
+        *ppCreated = pEditBox;
+
+    if( pEditBox == NULL )
+        return E_OUTOFMEMORY;
+
+    hr = AddControl( pEditBox );
+    if( FAILED(hr) )
+        return hr;
+
+    // Set the ID and position
+    pEditBox->SetID( ID ); 
+    pEditBox->SetLocation( x, y );
+    pEditBox->SetSize( width, height );
+    pEditBox->m_bIsDefault = bIsDefault;
+
+    if( strText )
+        pEditBox->SetText( strText );
+
+    return S_OK;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialog::AddListBox( int ID, int x, int y, int width, int height, DWORD dwStyle, CDXUTListBox** ppCreated )
+{
+    HRESULT hr = S_OK;
+    CDXUTListBox *pListBox = new CDXUTListBox( this );
+
+    if( ppCreated != NULL )
+        *ppCreated = pListBox;
+
+    if( pListBox == NULL )
+        return E_OUTOFMEMORY;
+
+    hr = AddControl( pListBox );
+    if( FAILED(hr) )
+        return hr;
+
+    // Set the ID and position
+    pListBox->SetID( ID );
+    pListBox->SetLocation( x, y );
+    pListBox->SetSize( width, height );
+    pListBox->SetStyle( dwStyle );
+
+    return S_OK;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialog::InitControl( CDXUTControl* pControl )
+{
+    HRESULT hr;
+
+    if( pControl == NULL )
+        return E_INVALIDARG;
+
+    pControl->m_Index = m_Controls.GetSize();
+    
+    // Look for a default Element entries
+    for( int i=0; i < m_DefaultElements.GetSize(); i++ )
+    {
+        DXUTElementHolder* pElementHolder = m_DefaultElements.GetAt( i );
+        if( pElementHolder->nControlType == pControl->GetType() )
+            pControl->SetElement( pElementHolder->iElement, &pElementHolder->Element );
+    }
+
+    V_RETURN( pControl->OnInit() );
+
+    return S_OK;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialog::AddControl( CDXUTControl* pControl )
+{
+    HRESULT hr = S_OK;
+
+    hr = InitControl( pControl );
+    if( FAILED(hr) )
+        return DXTRACE_ERR( L"CDXUTDialog::InitControl", hr );
+
+    // Add to the list
+    hr = m_Controls.Add( pControl );
+    if( FAILED(hr) )
+    {
+        return DXTRACE_ERR( L"CGrowableArray::Add", hr );
+    }
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+CDXUTControl* CDXUTDialog::GetControl( int ID )
+{
+    // Try to find the control with the given ID
+    for( int i=0; i < m_Controls.GetSize(); i++ )
+    {
+        CDXUTControl* pControl = m_Controls.GetAt( i );
+
+        if( pControl->GetID() == ID )
+        {
+            return pControl;
+        }
+    }
+
+    // Not found
+    return NULL;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+CDXUTControl* CDXUTDialog::GetControl( int ID, UINT nControlType )
+{
+    // Try to find the control with the given ID
+    for( int i=0; i < m_Controls.GetSize(); i++ )
+    {
+        CDXUTControl* pControl = m_Controls.GetAt( i );
+
+        if( pControl->GetID() == ID && pControl->GetType() == nControlType )
+        {
+            return pControl;
+        }
+    }
+
+    // Not found
+    return NULL;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+CDXUTControl* CDXUTDialog::GetNextControl( CDXUTControl* pControl )
+{
+    int index = pControl->m_Index + 1;
+
+    CDXUTDialog* pDialog = pControl->m_pDialog;
+
+    // Cycle through dialogs in the loop to find the next control. Note
+    // that if only one control exists in all looped dialogs it will
+    // be the returned 'next' control.
+    while( index >= (int) pDialog->m_Controls.GetSize() )
+    {
+        pDialog = pDialog->m_pNextDialog;
+        index = 0;
+    }
+
+    return pDialog->m_Controls.GetAt( index );
+}
+
+//--------------------------------------------------------------------------------------
+CDXUTControl* CDXUTDialog::GetPrevControl( CDXUTControl* pControl )
+{
+    int index = pControl->m_Index - 1;
+
+    CDXUTDialog* pDialog = pControl->m_pDialog;
+    
+    // Cycle through dialogs in the loop to find the next control. Note
+    // that if only one control exists in all looped dialogs it will
+    // be the returned 'previous' control.
+    while( index < 0 )
+    {
+        pDialog = pDialog->m_pPrevDialog;
+        if( pDialog == NULL )
+            pDialog = pControl->m_pDialog;
+
+        index = pDialog->m_Controls.GetSize() - 1;
+    }
+    
+    return pDialog->m_Controls.GetAt( index );    
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDialog::ClearRadioButtonGroup( UINT nButtonGroup )
+{
+    // Find all radio buttons with the given group number
+    for( int i=0; i < m_Controls.GetSize(); i++ )
+    {
+        CDXUTControl* pControl = m_Controls.GetAt( i );
+
+        if( pControl->GetType() == DXUT_CONTROL_RADIOBUTTON )
+        {
+            CDXUTRadioButton* pRadioButton = (CDXUTRadioButton*) pControl;
+
+            if( pRadioButton->GetButtonGroup() == nButtonGroup )
+                pRadioButton->SetChecked( false, false );
+        }
+    }
+}
+
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDialog::ClearComboBox( int ID )
+{
+    CDXUTComboBox* pComboBox = GetComboBox( ID );
+    if( pComboBox == NULL )
+        return;
+
+    pComboBox->RemoveAllItems();
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDialog::RequestFocus( CDXUTControl* pControl )
+{
+    if( s_pControlFocus == pControl )
+        return;
+
+    if( !pControl->CanHaveFocus() )
+        return;
+
+    if( s_pControlFocus )
+        s_pControlFocus->OnFocusOut();
+
+    pControl->OnFocusIn();
+    s_pControlFocus = pControl;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialog::DrawRect( RECT* pRect, D3DCOLOR color )
+{
+    RECT rcScreen = *pRect;
+    OffsetRect( &rcScreen, m_x, m_y );
+
+    // If caption is enabled, offset the Y position by its height.
+    if( m_bCaption )
+        OffsetRect( &rcScreen, 0, m_nCaptionHeight );
+
+    DXUT_SCREEN_VERTEX vertices[4] =
+    {
+        (float) rcScreen.left -0.5f,  (float) rcScreen.top -0.5f,    0.5f, 1.0f, color, 0, 0,
+        (float) rcScreen.right -0.5f, (float) rcScreen.top -0.5f,    0.5f, 1.0f, color, 0, 0, 
+        (float) rcScreen.right -0.5f, (float) rcScreen.bottom -0.5f, 0.5f, 1.0f, color, 0, 0, 
+        (float) rcScreen.left -0.5f,  (float) rcScreen.bottom -0.5f, 0.5f, 1.0f, color, 0, 0,
+    };
+
+    IDirect3DDevice9* pd3dDevice = m_pManager->GetD3DDevice();
+
+    // Since we're doing our own drawing here we need to flush the sprites
+    m_pManager->m_pSprite->Flush();
+    IDirect3DVertexDeclaration9 *pDecl = NULL;
+    pd3dDevice->GetVertexDeclaration( &pDecl );  // Preserve the sprite's current vertex decl
+    pd3dDevice->SetFVF( DXUT_SCREEN_VERTEX::FVF );
+
+    pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG2 );
+    pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2 );
+
+    pd3dDevice->DrawPrimitiveUP( D3DPT_TRIANGLEFAN, 2, vertices, sizeof(DXUT_SCREEN_VERTEX) );
+
+    pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE );
+    pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE );
+
+    // Restore the vertex decl
+    pd3dDevice->SetVertexDeclaration( pDecl );
+    pDecl->Release();
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialog::DrawPolyLine( POINT* apPoints, UINT nNumPoints, D3DCOLOR color )
+{
+    DXUT_SCREEN_VERTEX* vertices = new DXUT_SCREEN_VERTEX[ nNumPoints ];
+    if( vertices == NULL )
+        return E_OUTOFMEMORY;
+
+    DXUT_SCREEN_VERTEX* pVertex = vertices;
+    POINT* pt = apPoints;
+    for( UINT i=0; i < nNumPoints; i++ )
+    {
+        pVertex->x = m_x + (float) pt->x;
+        pVertex->y = m_y + (float) pt->y;
+        pVertex->z = 0.5f;
+        pVertex->h = 1.0f;
+        pVertex->color = color;
+        pVertex->tu = 0.0f;
+        pVertex->tv = 0.0f;
+
+        pVertex++;
+        pt++;
+    }
+
+    IDirect3DDevice9* pd3dDevice = m_pManager->GetD3DDevice();
+
+    // Since we're doing our own drawing here we need to flush the sprites
+    m_pManager->m_pSprite->Flush();
+    IDirect3DVertexDeclaration9 *pDecl = NULL;
+    pd3dDevice->GetVertexDeclaration( &pDecl );  // Preserve the sprite's current vertex decl
+    pd3dDevice->SetFVF( DXUT_SCREEN_VERTEX::FVF );
+
+    pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG2 );
+    pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2 );
+
+    pd3dDevice->DrawPrimitiveUP( D3DPT_LINESTRIP, nNumPoints - 1, vertices, sizeof(DXUT_SCREEN_VERTEX) );
+
+    pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE );
+    pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE );
+
+    // Restore the vertex decl
+    pd3dDevice->SetVertexDeclaration( pDecl );
+    pDecl->Release();
+
+    SAFE_DELETE_ARRAY( vertices );
+    return S_OK;
+}
+ 
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialog::DrawSprite( CDXUTElement* pElement, RECT* prcDest )
+{
+    // No need to draw fully transparent layers
+    if( pElement->TextureColor.Current.a == 0 )
+        return S_OK;
+
+    RECT rcTexture = pElement->rcTexture;
+    
+    RECT rcScreen = *prcDest;
+    OffsetRect( &rcScreen, m_x, m_y );
+
+    // If caption is enabled, offset the Y position by its height.
+    if( m_bCaption )
+        OffsetRect( &rcScreen, 0, m_nCaptionHeight );
+
+    DXUTTextureNode* pTextureNode = GetTexture( pElement->iTexture );
+    if( pTextureNode == NULL )
+        return E_FAIL;
+    
+    float fScaleX = (float) RectWidth( rcScreen ) / RectWidth( rcTexture );
+    float fScaleY = (float) RectHeight( rcScreen ) / RectHeight( rcTexture );
+
+    D3DXMATRIXA16 matTransform;
+    D3DXMatrixScaling( &matTransform, fScaleX, fScaleY, 1.0f );
+
+    m_pManager->m_pSprite->SetTransform( &matTransform );
+    
+    D3DXVECTOR3 vPos( (float)rcScreen.left, (float)rcScreen.top, 0.0f );
+
+    vPos.x /= fScaleX;
+    vPos.y /= fScaleY;
+
+    return m_pManager->m_pSprite->Draw( pTextureNode->pTexture, &rcTexture, NULL, &vPos, pElement->TextureColor.Current );
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialog::CalcTextRect( LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, int nCount )
+{
+    HRESULT hr = S_OK;
+
+    DXUTFontNode* pFontNode = GetFont( pElement->iFont );
+    if( pFontNode == NULL )
+        return E_FAIL;
+
+    DWORD dwTextFormat = pElement->dwTextFormat | DT_CALCRECT;
+    // Since we are only computing the rectangle, we don't need a sprite.
+    hr = pFontNode->pFont->DrawText( NULL, strText, nCount, prcDest, dwTextFormat, pElement->FontColor.Current );
+    if( FAILED(hr) )
+        return hr;
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialog::DrawText( LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, bool bShadow, int nCount )
+{
+    HRESULT hr = S_OK;
+
+    // No need to draw fully transparent layers
+    if( pElement->FontColor.Current.a == 0 )
+        return S_OK;
+
+    RECT rcScreen = *prcDest;
+    OffsetRect( &rcScreen, m_x, m_y );
+
+    // If caption is enabled, offset the Y position by its height.
+    if( m_bCaption )
+        OffsetRect( &rcScreen, 0, m_nCaptionHeight );
+
+    //debug
+    //DrawRect( &rcScreen, D3DCOLOR_ARGB(100, 255, 0, 0) );
+
+    D3DXMATRIXA16 matTransform;
+    D3DXMatrixIdentity( &matTransform );
+    m_pManager->m_pSprite->SetTransform( &matTransform );
+
+    DXUTFontNode* pFontNode = GetFont( pElement->iFont );
+    
+    if( bShadow )
+    {
+        RECT rcShadow = rcScreen;
+        OffsetRect( &rcShadow, 1, 1 );
+        hr = pFontNode->pFont->DrawText( m_pManager->m_pSprite, strText, nCount, &rcShadow, pElement->dwTextFormat, D3DCOLOR_ARGB(DWORD(pElement->FontColor.Current.a * 255), 0, 0, 0) );
+        if( FAILED(hr) )
+            return hr;
+    }
+
+    hr = pFontNode->pFont->DrawText( m_pManager->m_pSprite, strText, nCount, &rcScreen, pElement->dwTextFormat, pElement->FontColor.Current );
+    if( FAILED(hr) )
+        return hr;
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDialog::SetBackgroundColors( D3DCOLOR colorTopLeft, D3DCOLOR colorTopRight, D3DCOLOR colorBottomLeft, D3DCOLOR colorBottomRight )
+{
+    m_colorTopLeft = colorTopLeft;
+    m_colorTopRight = colorTopRight;
+    m_colorBottomLeft = colorBottomLeft;
+    m_colorBottomRight = colorBottomRight;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDialog::SetNextDialog( CDXUTDialog* pNextDialog )
+{ 
+    if( pNextDialog == NULL )
+        pNextDialog = this;
+    
+    m_pNextDialog = pNextDialog;
+    if( pNextDialog )
+        m_pNextDialog->m_pPrevDialog = this;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDialog::ClearFocus()
+{
+    if( s_pControlFocus )
+    {
+        s_pControlFocus->OnFocusOut();
+        s_pControlFocus = NULL;
+    }
+
+    ReleaseCapture();
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDialog::FocusDefaultControl()
+{
+    // Check for default control in this dialog
+    for( int i=0; i < m_Controls.GetSize(); i++ )
+    {
+        CDXUTControl* pControl = m_Controls.GetAt( i );
+        if( pControl->m_bIsDefault )
+        {
+            // Remove focus from the current control
+            ClearFocus();
+
+            // Give focus to the default control
+            s_pControlFocus = pControl;
+            s_pControlFocus->OnFocusIn();
+            return;
+        }
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTDialog::OnCycleFocus( bool bForward )
+{
+    CDXUTControl *pControl = NULL;
+    CDXUTDialog *pDialog = NULL; // pDialog and pLastDialog are used to track wrapping of
+    CDXUTDialog *pLastDialog;    // focus from first control to last or vice versa.
+
+    if( s_pControlFocus == NULL )
+    {
+        // If s_pControlFocus is NULL, we focus the first control of first dialog in
+        // the case that bForward is true, and focus the last control of last dialog when
+        // bForward is false.
+        //
+        if( bForward )
+        {
+            // Search for the first control from the start of the dialog
+            // array.
+            for( int d = 0; d < m_pManager->m_Dialogs.GetSize(); ++d )
+            {
+                pDialog = pLastDialog = m_pManager->m_Dialogs.GetAt(d);
+                if( pDialog && pDialog->m_Controls.GetSize() > 0 )
+                {
+                    pControl = pDialog->m_Controls.GetAt(0);
+                    break;
+                }
+            }
+
+            if( !pDialog || !pControl )
+            {
+                // No dialog has been registered yet or no controls have been
+                // added to the dialogs. Cannot proceed.
+                return true;
+            }
+        }
+        else
+        {
+            // Search for the first control from the end of the dialog
+            // array.
+            for( int d = m_pManager->m_Dialogs.GetSize() - 1; d >= 0; --d )
+            {
+                pDialog = pLastDialog = m_pManager->m_Dialogs.GetAt(d);
+                if( pDialog && pDialog->m_Controls.GetSize() > 0 )
+                {
+                    pControl = pDialog->m_Controls.GetAt( pDialog->m_Controls.GetSize() - 1 );
+                    break;
+                }
+            }
+
+            if( !pDialog || !pControl )
+            {
+                // No dialog has been registered yet or no controls have been
+                // added to the dialogs. Cannot proceed.
+                return true;
+            }
+        }
+    }
+    else
+    if( s_pControlFocus->m_pDialog != this )
+    {
+        // If a control belonging to another dialog has focus, let that other
+        // dialog handle this event by returning false.
+        //
+        return false;
+    }
+    else
+    {
+        // Focused control belongs to this dialog. Cycle to the
+        // next/previous control.
+        pLastDialog = s_pControlFocus->m_pDialog;
+        pControl = (bForward) ? GetNextControl( s_pControlFocus ) : GetPrevControl( s_pControlFocus );
+        pDialog = pControl->m_pDialog;
+    }
+
+    for( int i=0; i < 0xffff; i++ )
+    {
+        // If we just wrapped from last control to first or vice versa,
+        // set the focused control to NULL. This state, where no control
+        // has focus, allows the camera to work.
+        int nLastDialogIndex = m_pManager->m_Dialogs.IndexOf( pLastDialog );
+        int nDialogIndex = m_pManager->m_Dialogs.IndexOf( pDialog );
+        if( ( !bForward && nLastDialogIndex < nDialogIndex ) ||
+            ( bForward && nDialogIndex < nLastDialogIndex ) )
+        {
+            if( s_pControlFocus )
+                s_pControlFocus->OnFocusOut();
+            s_pControlFocus = NULL;
+            return true;
+        }
+
+        // If we've gone in a full circle then focus doesn't change
+        if( pControl == s_pControlFocus )
+            return true;
+
+        // If the dialog accepts keybord input and the control can have focus then
+        // move focus
+        if( pControl->m_pDialog->m_bKeyboardInput && pControl->CanHaveFocus() )
+        {
+            if( s_pControlFocus )
+                s_pControlFocus->OnFocusOut();
+            s_pControlFocus = pControl;
+            s_pControlFocus->OnFocusIn();
+            return true;
+        }
+
+        pLastDialog = pDialog;
+        pControl = (bForward) ? GetNextControl( pControl ) : GetPrevControl( pControl );
+        pDialog = pControl->m_pDialog;
+    }
+
+    // If we reached this point, the chain of dialogs didn't form a complete loop
+    DXTRACE_ERR( L"CDXUTDialog: Multiple dialogs are improperly chained together", E_FAIL );
+    return false;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialogResourceManager::CreateFont( UINT iFont )
+{
+    HRESULT hr = S_OK;
+
+    DXUTFontNode* pFontNode = m_FontCache.GetAt( iFont );
+
+    SAFE_RELEASE( pFontNode->pFont );
+    
+    V_RETURN( D3DXCreateFont( m_pd3dDevice, pFontNode->nHeight, 0, pFontNode->nWeight, 1, FALSE, DEFAULT_CHARSET, 
+                              OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, 
+                              pFontNode->strFace, &pFontNode->pFont ) );
+
+    return S_OK;
+}
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTDialogResourceManager::CreateTexture( UINT iTexture )
+{
+    HRESULT hr = S_OK;
+
+    DXUTTextureNode* pTextureNode = m_TextureCache.GetAt( iTexture );
+
+    
+	D3DXIMAGE_INFO info;
+
+    if( !pTextureNode->bFileSource )
+    {
+        if( pTextureNode->nResourceID == 0xFFFF && pTextureNode->hResourceModule == (HMODULE) 0xFFFF )
+        {
+            hr = DXUTCreateGUITextureFromInternalArray( m_pd3dDevice, &pTextureNode->pTexture, &info );
+            if( FAILED(hr) )
+                return DXTRACE_ERR( L"D3DXCreateTextureFromFileInMemoryEx", hr );
+        }
+        else
+        {
+            LPCWSTR pID = pTextureNode->nResourceID ? (LPCWSTR)(size_t)pTextureNode->nResourceID : pTextureNode->strFilename;
+
+            // Create texture from resource
+            hr =  D3DXCreateTextureFromResourceEx( m_pd3dDevice, pTextureNode->hResourceModule, pID, D3DX_DEFAULT, D3DX_DEFAULT, 
+                                                1, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, 
+                                                D3DX_DEFAULT, D3DX_DEFAULT, 0, 
+                                                &info, NULL, &pTextureNode->pTexture );
+            if( FAILED(hr) )
+                return DXTRACE_ERR( L"D3DXCreateTextureFromResourceEx", hr );
+        }
+    }
+    else
+    {
+		// Make sure there's a texture to create
+		if( pTextureNode->strFilename[0] == 0 )
+			return S_OK;
+
+        // Find the texture on the hard drive
+        WCHAR strPath[MAX_PATH];
+        hr = DXUTFindDXSDKMediaFileCch( strPath, MAX_PATH, pTextureNode->strFilename );
+        if( FAILED(hr) )
+        {
+            return DXTRACE_ERR( L"DXUTFindDXSDKMediaFileCch", hr );
+        }
+
+        // Create texture from file
+        hr =  D3DXCreateTextureFromFileEx( m_pd3dDevice, strPath, D3DX_DEFAULT, D3DX_DEFAULT, 
+                                           1, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, 
+                                           D3DX_DEFAULT, D3DX_DEFAULT, 0, 
+                                           &info, NULL, &pTextureNode->pTexture );
+        if( FAILED(hr) )
+        {
+            return DXTRACE_ERR( L"D3DXCreateTextureFromFileEx", hr );
+        }
+	}
+
+    // Store dimensions
+    pTextureNode->dwWidth = info.Width;
+    pTextureNode->dwHeight = info.Height;
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTDialog::InitDefaultElements()
+{
+    SetFont( 0, L"Arial", 14, FW_NORMAL );
+
+    CDXUTElement Element;
+    RECT rcTexture;
+
+    //-------------------------------------
+    // Element for the caption
+    //-------------------------------------
+    m_CapElement.SetFont( 0 );
+    SetRect( &rcTexture, 17, 269, 241, 287 );
+    m_CapElement.SetTexture( 0, &rcTexture );
+    m_CapElement.TextureColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB(255, 255, 255, 255);
+    m_CapElement.FontColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB(255, 255, 255, 255);
+    m_CapElement.SetFont( 0, D3DCOLOR_ARGB(255, 255, 255, 255), DT_LEFT | DT_VCENTER );
+    // Pre-blend as we don't need to transition the state
+    m_CapElement.TextureColor.Blend( DXUT_STATE_NORMAL, 10.0f );
+    m_CapElement.FontColor.Blend( DXUT_STATE_NORMAL, 10.0f );
+
+    //-------------------------------------
+    // CDXUTStatic
+    //-------------------------------------
+    Element.SetFont( 0 );
+    Element.FontColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 200, 200, 200, 200 );
+
+    // Assign the Element
+    SetDefaultElement( DXUT_CONTROL_STATIC, 0, &Element );
+    
+
+    //-------------------------------------
+    // CDXUTButton - Button
+    //-------------------------------------
+    SetRect( &rcTexture, 0, 0, 136, 54 );
+    Element.SetTexture( 0, &rcTexture );
+    Element.SetFont( 0 );
+    Element.TextureColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB(150, 255, 255, 255);
+    Element.TextureColor.States[ DXUT_STATE_PRESSED ] = D3DCOLOR_ARGB(200, 255, 255, 255);
+    Element.FontColor.States[ DXUT_STATE_MOUSEOVER ] = D3DCOLOR_ARGB(255, 0, 0, 0);
+    
+    // Assign the Element
+    SetDefaultElement( DXUT_CONTROL_BUTTON, 0, &Element );
+    
+
+    //-------------------------------------
+    // CDXUTButton - Fill layer
+    //-------------------------------------
+    SetRect( &rcTexture, 136, 0, 252, 54 );
+    Element.SetTexture( 0, &rcTexture, D3DCOLOR_ARGB(0, 255, 255, 255) );
+    Element.TextureColor.States[ DXUT_STATE_MOUSEOVER ] = D3DCOLOR_ARGB(160, 255, 255, 255);
+    Element.TextureColor.States[ DXUT_STATE_PRESSED ] = D3DCOLOR_ARGB(60, 0, 0, 0);
+    Element.TextureColor.States[ DXUT_STATE_FOCUS ] = D3DCOLOR_ARGB(30, 255, 255, 255);
+    
+    
+    // Assign the Element
+    SetDefaultElement( DXUT_CONTROL_BUTTON, 1, &Element );
+
+
+    //-------------------------------------
+    // CDXUTCheckBox - Box
+    //-------------------------------------
+    SetRect( &rcTexture, 0, 54, 27, 81 );
+    Element.SetTexture( 0, &rcTexture );
+    Element.SetFont( 0, D3DCOLOR_ARGB(255, 255, 255, 255), DT_LEFT | DT_VCENTER );
+    Element.FontColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 200, 200, 200, 200 );
+    Element.TextureColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB(150, 255, 255, 255);
+    Element.TextureColor.States[ DXUT_STATE_FOCUS ] = D3DCOLOR_ARGB(200, 255, 255, 255);
+    Element.TextureColor.States[ DXUT_STATE_PRESSED ] = D3DCOLOR_ARGB(255, 255, 255, 255);
+    
+    // Assign the Element
+    SetDefaultElement( DXUT_CONTROL_CHECKBOX, 0, &Element );
+
+
+    //-------------------------------------
+    // CDXUTCheckBox - Check
+    //-------------------------------------
+    SetRect( &rcTexture, 27, 54, 54, 81 );
+    Element.SetTexture( 0, &rcTexture );
+    
+    // Assign the Element
+    SetDefaultElement( DXUT_CONTROL_CHECKBOX, 1, &Element );
+
+
+    //-------------------------------------
+    // CDXUTRadioButton - Box
+    //-------------------------------------
+    SetRect( &rcTexture, 54, 54, 81, 81 );
+    Element.SetTexture( 0, &rcTexture );
+    Element.SetFont( 0, D3DCOLOR_ARGB(255, 255, 255, 255), DT_LEFT | DT_VCENTER );
+    Element.FontColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB( 200, 200, 200, 200 );
+    Element.TextureColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB(150, 255, 255, 255);
+    Element.TextureColor.States[ DXUT_STATE_FOCUS ] = D3DCOLOR_ARGB(200, 255, 255, 255);
+    Element.TextureColor.States[ DXUT_STATE_PRESSED ] = D3DCOLOR_ARGB(255, 255, 255, 255);
+    
+    // Assign the Element
+    SetDefaultElement( DXUT_CONTROL_RADIOBUTTON, 0, &Element );
+
+
+    //-------------------------------------
+    // CDXUTRadioButton - Check
+    //-------------------------------------
+    SetRect( &rcTexture, 81, 54, 108, 81 );
+    Element.SetTexture( 0, &rcTexture );
+    
+    // Assign the Element
+    SetDefaultElement( DXUT_CONTROL_RADIOBUTTON, 1, &Element );
+
+
+    //-------------------------------------
+    // CDXUTComboBox - Main
+    //-------------------------------------
+    SetRect( &rcTexture, 7, 81, 247, 123 );
+    Element.SetTexture( 0, &rcTexture );
+    Element.SetFont( 0 );
+    Element.TextureColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB(150, 200, 200, 200);
+    Element.TextureColor.States[ DXUT_STATE_FOCUS ] = D3DCOLOR_ARGB(170, 230, 230, 230);
+    Element.TextureColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB(70, 200, 200, 200);
+    Element.FontColor.States[ DXUT_STATE_MOUSEOVER ] = D3DCOLOR_ARGB(255, 0, 0, 0);
+    Element.FontColor.States[ DXUT_STATE_PRESSED ] = D3DCOLOR_ARGB(255, 0, 0, 0);
+    Element.FontColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB(200, 200, 200, 200);
+    
+    
+    // Assign the Element
+    SetDefaultElement( DXUT_CONTROL_COMBOBOX, 0, &Element );
+
+
+    //-------------------------------------
+    // CDXUTComboBox - Button
+    //-------------------------------------
+    SetRect( &rcTexture, 98, 189, 151, 238 );
+    Element.SetTexture( 0, &rcTexture );
+    Element.TextureColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB(150, 255, 255, 255);
+    Element.TextureColor.States[ DXUT_STATE_PRESSED ] = D3DCOLOR_ARGB(255, 150, 150, 150);
+    Element.TextureColor.States[ DXUT_STATE_FOCUS ] = D3DCOLOR_ARGB(200, 255, 255, 255);
+    Element.TextureColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB(70, 255, 255, 255);
+    
+    // Assign the Element
+    SetDefaultElement( DXUT_CONTROL_COMBOBOX, 1, &Element );
+
+
+    //-------------------------------------
+    // CDXUTComboBox - Dropdown
+    //-------------------------------------
+    SetRect( &rcTexture, 13, 123, 241, 160 );
+    Element.SetTexture( 0, &rcTexture );
+    Element.SetFont( 0, D3DCOLOR_ARGB(255, 0, 0, 0), DT_LEFT | DT_TOP );
+    
+    // Assign the Element
+    SetDefaultElement( DXUT_CONTROL_COMBOBOX, 2, &Element );
+
+
+    //-------------------------------------
+    // CDXUTComboBox - Selection
+    //-------------------------------------
+    SetRect( &rcTexture, 12, 163, 239, 183 );
+    Element.SetTexture( 0, &rcTexture );
+    Element.SetFont( 0, D3DCOLOR_ARGB(255, 255, 255, 255), DT_LEFT | DT_TOP );
+    
+    // Assign the Element
+    SetDefaultElement( DXUT_CONTROL_COMBOBOX, 3, &Element );
+
+
+    //-------------------------------------
+    // CDXUTSlider - Track
+    //-------------------------------------
+    SetRect( &rcTexture, 1, 187, 93, 228 );
+    Element.SetTexture( 0, &rcTexture );
+    Element.TextureColor.States[ DXUT_STATE_NORMAL ] = D3DCOLOR_ARGB(150, 255, 255, 255);
+    Element.TextureColor.States[ DXUT_STATE_FOCUS ] = D3DCOLOR_ARGB(200, 255, 255, 255);
+    Element.TextureColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB(70, 255, 255, 255);
+    
+    // Assign the Element
+    SetDefaultElement( DXUT_CONTROL_SLIDER, 0, &Element );
+
+    //-------------------------------------
+    // CDXUTSlider - Button
+    //-------------------------------------
+    SetRect( &rcTexture, 151, 193, 192, 234 );
+    Element.SetTexture( 0, &rcTexture );
+
+    // Assign the Element
+    SetDefaultElement( DXUT_CONTROL_SLIDER, 1, &Element );
+
+    //-------------------------------------
+    // CDXUTScrollBar - Track
+    //-------------------------------------
+    int nScrollBarStartX = 196;
+    int nScrollBarStartY = 191;
+    SetRect( &rcTexture, nScrollBarStartX + 0, nScrollBarStartY + 21, nScrollBarStartX + 22, nScrollBarStartY + 32 );
+    Element.SetTexture( 0, &rcTexture );
+    Element.TextureColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB(255, 200, 200, 200);
+        
+    // Assign the Element
+    SetDefaultElement( DXUT_CONTROL_SCROLLBAR, 0, &Element );
+
+    //-------------------------------------
+    // CDXUTScrollBar - Up Arrow
+    //-------------------------------------
+    SetRect( &rcTexture, nScrollBarStartX + 0, nScrollBarStartY + 1, nScrollBarStartX + 22, nScrollBarStartY + 21 );
+    Element.SetTexture( 0, &rcTexture );
+    Element.TextureColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB(255, 200, 200, 200);
+    
+    
+    // Assign the Element
+    SetDefaultElement( DXUT_CONTROL_SCROLLBAR, 1, &Element );
+
+    //-------------------------------------
+    // CDXUTScrollBar - Down Arrow
+    //-------------------------------------
+    SetRect( &rcTexture, nScrollBarStartX + 0, nScrollBarStartY + 32, nScrollBarStartX + 22, nScrollBarStartY + 53 );
+    Element.SetTexture( 0, &rcTexture );
+    Element.TextureColor.States[ DXUT_STATE_DISABLED ] = D3DCOLOR_ARGB(255, 200, 200, 200);
+    
+    
+    // Assign the Element
+    SetDefaultElement( DXUT_CONTROL_SCROLLBAR, 2, &Element );
+
+    //-------------------------------------
+    // CDXUTScrollBar - Button
+    //-------------------------------------
+    SetRect( &rcTexture, 220, 192, 238, 234 );
+    Element.SetTexture( 0, &rcTexture );
+    
+    // Assign the Element
+    SetDefaultElement( DXUT_CONTROL_SCROLLBAR, 3, &Element );
+
+
+    //-------------------------------------
+    // CDXUTEditBox
+    //-------------------------------------
+    // Element assignment:
+    //   0 - text area
+    //   1 - top left border
+    //   2 - top border
+    //   3 - top right border
+    //   4 - left border
+    //   5 - right border
+    //   6 - lower left border
+    //   7 - lower border
+    //   8 - lower right border
+
+    Element.SetFont( 0, D3DCOLOR_ARGB( 255, 0, 0, 0 ), DT_LEFT | DT_TOP );
+
+    // Assign the style
+    SetRect( &rcTexture, 14, 90, 241, 113 );
+    Element.SetTexture( 0, &rcTexture );
+    SetDefaultElement( DXUT_CONTROL_EDITBOX, 0, &Element );
+    SetRect( &rcTexture, 8, 82, 14, 90 );
+    Element.SetTexture( 0, &rcTexture );
+    SetDefaultElement( DXUT_CONTROL_EDITBOX, 1, &Element );
+    SetRect( &rcTexture, 14, 82, 241, 90 );
+    Element.SetTexture( 0, &rcTexture );
+    SetDefaultElement( DXUT_CONTROL_EDITBOX, 2, &Element );
+    SetRect( &rcTexture, 241, 82, 246, 90 );
+    Element.SetTexture( 0, &rcTexture );
+    SetDefaultElement( DXUT_CONTROL_EDITBOX, 3, &Element );
+    SetRect( &rcTexture, 8, 90, 14, 113 );
+    Element.SetTexture( 0, &rcTexture );
+    SetDefaultElement( DXUT_CONTROL_EDITBOX, 4, &Element );
+    SetRect( &rcTexture, 241, 90, 246, 113 );
+    Element.SetTexture( 0, &rcTexture );
+    SetDefaultElement( DXUT_CONTROL_EDITBOX, 5, &Element );
+    SetRect( &rcTexture, 8, 113, 14, 121 );
+    Element.SetTexture( 0, &rcTexture );
+    SetDefaultElement( DXUT_CONTROL_EDITBOX, 6, &Element );
+    SetRect( &rcTexture, 14, 113, 241, 121 );
+    Element.SetTexture( 0, &rcTexture );
+    SetDefaultElement( DXUT_CONTROL_EDITBOX, 7, &Element );
+    SetRect( &rcTexture, 241, 113, 246, 121 );
+    Element.SetTexture( 0, &rcTexture );
+    SetDefaultElement( DXUT_CONTROL_EDITBOX, 8, &Element );
+
+
+    //-------------------------------------
+    // CDXUTIMEEditBox
+    //-------------------------------------
+
+    Element.SetFont( 0, D3DCOLOR_ARGB( 255, 0, 0, 0 ), DT_LEFT | DT_TOP );
+
+    // Assign the style
+    SetRect( &rcTexture, 14, 90, 241, 113 );
+    Element.SetTexture( 0, &rcTexture );
+    SetDefaultElement( DXUT_CONTROL_IMEEDITBOX, 0, &Element );
+    SetRect( &rcTexture, 8, 82, 14, 90 );
+    Element.SetTexture( 0, &rcTexture );
+    SetDefaultElement( DXUT_CONTROL_IMEEDITBOX, 1, &Element );
+    SetRect( &rcTexture, 14, 82, 241, 90 );
+    Element.SetTexture( 0, &rcTexture );
+    SetDefaultElement( DXUT_CONTROL_IMEEDITBOX, 2, &Element );
+    SetRect( &rcTexture, 241, 82, 246, 90 );
+    Element.SetTexture( 0, &rcTexture );
+    SetDefaultElement( DXUT_CONTROL_IMEEDITBOX, 3, &Element );
+    SetRect( &rcTexture, 8, 90, 14, 113 );
+    Element.SetTexture( 0, &rcTexture );
+    SetDefaultElement( DXUT_CONTROL_IMEEDITBOX, 4, &Element );
+    SetRect( &rcTexture, 241, 90, 246, 113 );
+    Element.SetTexture( 0, &rcTexture );
+    SetDefaultElement( DXUT_CONTROL_IMEEDITBOX, 5, &Element );
+    SetRect( &rcTexture, 8, 113, 14, 121 );
+    Element.SetTexture( 0, &rcTexture );
+    SetDefaultElement( DXUT_CONTROL_IMEEDITBOX, 6, &Element );
+    SetRect( &rcTexture, 14, 113, 241, 121 );
+    Element.SetTexture( 0, &rcTexture );
+    SetDefaultElement( DXUT_CONTROL_IMEEDITBOX, 7, &Element );
+    SetRect( &rcTexture, 241, 113, 246, 121 );
+    Element.SetTexture( 0, &rcTexture );
+    SetDefaultElement( DXUT_CONTROL_IMEEDITBOX, 8, &Element );
+    // Element 9 for IME text, and indicator button
+    SetRect( &rcTexture, 0, 0, 136, 54 );
+    Element.SetTexture( 0, &rcTexture );
+    Element.SetFont( 0, D3DCOLOR_ARGB( 255, 0, 0, 0 ), DT_CENTER | DT_VCENTER );
+    SetDefaultElement( DXUT_CONTROL_IMEEDITBOX, 9, &Element );
+
+    //-------------------------------------
+    // CDXUTListBox - Main
+    //-------------------------------------
+    SetRect( &rcTexture, 13, 123, 241, 160 );
+    Element.SetTexture( 0, &rcTexture );
+    Element.SetFont( 0, D3DCOLOR_ARGB(255, 0, 0, 0), DT_LEFT | DT_TOP );
+
+    // Assign the Element
+    SetDefaultElement( DXUT_CONTROL_LISTBOX, 0, &Element );
+
+    //-------------------------------------
+    // CDXUTListBox - Selection
+    //-------------------------------------
+
+    SetRect( &rcTexture, 16, 166, 240, 183 );
+    Element.SetTexture( 0, &rcTexture );
+    Element.SetFont( 0, D3DCOLOR_ARGB(255, 255, 255, 255), DT_LEFT | DT_TOP );
+
+    // Assign the Element
+    SetDefaultElement( DXUT_CONTROL_LISTBOX, 1, &Element );
+}
+
+
+
+//--------------------------------------------------------------------------------------
+// CDXUTControl class
+//--------------------------------------------------------------------------------------
+
+//--------------------------------------------------------------------------------------
+CDXUTControl::CDXUTControl( CDXUTDialog *pDialog )
+{
+    m_Type = DXUT_CONTROL_BUTTON;
+    m_pDialog = pDialog;
+    m_ID = 0;
+    m_Index = 0;
+    m_pUserData = NULL;
+
+    m_bEnabled = true;
+    m_bVisible = true;
+    m_bMouseOver = false;
+    m_bHasFocus = false;
+    m_bIsDefault = false;
+
+    m_pDialog = NULL;
+
+    m_x = 0;
+    m_y = 0;
+    m_width = 0;
+    m_height = 0;
+
+   ZeroMemory( &m_rcBoundingBox, sizeof( m_rcBoundingBox ) );
+}
+
+
+CDXUTControl::~CDXUTControl()
+{
+    for( int i = 0; i < m_Elements.GetSize(); ++i )
+    {
+        delete m_Elements[i];
+    }
+    m_Elements.RemoveAll();
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTControl::SetTextColor( D3DCOLOR Color )
+{
+    CDXUTElement* pElement = m_Elements.GetAt( 0 );
+
+    if( pElement )
+        pElement->FontColor.States[DXUT_STATE_NORMAL] = Color;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTControl::SetElement( UINT iElement, CDXUTElement* pElement )
+{
+    HRESULT hr = S_OK;
+
+    if( pElement == NULL )
+        return E_INVALIDARG;
+
+    // Make certain the array is this large
+    for( UINT i=m_Elements.GetSize(); i <= iElement; i++ )
+    {
+        CDXUTElement* pNewElement = new CDXUTElement();
+        if( pNewElement == NULL )
+            return E_OUTOFMEMORY;
+
+        hr = m_Elements.Add( pNewElement );
+        if( FAILED(hr) )
+        {
+            SAFE_DELETE( pNewElement );
+            return hr;
+        }
+    }
+
+    // Update the data
+    CDXUTElement* pCurElement = m_Elements.GetAt( iElement );
+    *pCurElement = *pElement;
+    
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTControl::Refresh()
+{
+    m_bMouseOver = false;
+    m_bHasFocus = false;
+
+    for( int i=0; i < m_Elements.GetSize(); i++ )
+    {
+        CDXUTElement* pElement = m_Elements.GetAt( i );
+        pElement->Refresh();
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTControl::UpdateRects()
+{
+    SetRect( &m_rcBoundingBox, m_x, m_y, m_x + m_width, m_y + m_height );
+}
+
+
+//--------------------------------------------------------------------------------------
+// CDXUTStatic class
+//--------------------------------------------------------------------------------------
+
+//--------------------------------------------------------------------------------------
+CDXUTStatic::CDXUTStatic( CDXUTDialog *pDialog )
+{
+    m_Type = DXUT_CONTROL_STATIC;
+    m_pDialog = pDialog;
+
+    ZeroMemory( &m_strText, sizeof(m_strText) );  
+
+    for( int i=0; i < m_Elements.GetSize(); i++ )
+    {
+        CDXUTElement* pElement = m_Elements.GetAt( i );
+        SAFE_DELETE( pElement );
+    }
+
+    m_Elements.RemoveAll();
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTStatic::Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime )
+{    
+    if( m_bVisible == false )
+        return;
+
+    DXUT_CONTROL_STATE iState = DXUT_STATE_NORMAL;
+
+    if( m_bEnabled == false )
+        iState = DXUT_STATE_DISABLED;
+        
+    CDXUTElement* pElement = m_Elements.GetAt( 0 );
+
+    pElement->FontColor.Blend( iState, fElapsedTime );
+    
+    m_pDialog->DrawText( m_strText, pElement, &m_rcBoundingBox, true );
+}
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTStatic::GetTextCopy( LPWSTR strDest, UINT bufferCount )
+{
+    // Validate incoming parameters
+    if( strDest == NULL || bufferCount == 0 )
+    {
+        return E_INVALIDARG;
+    }
+
+    // Copy the window text
+    StringCchCopy( strDest, bufferCount, m_strText );
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTStatic::SetText( LPCWSTR strText )
+{
+    if( strText == NULL )
+    {
+        m_strText[0] = 0;
+        return S_OK;
+    }
+    
+    StringCchCopy( m_strText, MAX_PATH, strText); 
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+// CDXUTButton class
+//--------------------------------------------------------------------------------------
+
+//--------------------------------------------------------------------------------------
+CDXUTButton::CDXUTButton( CDXUTDialog *pDialog )
+{
+    m_Type = DXUT_CONTROL_BUTTON;
+    m_pDialog = pDialog;
+
+    m_bPressed = false;
+    m_nHotkey = 0;
+}
+
+//--------------------------------------------------------------------------------------
+bool CDXUTButton::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    if( !m_bEnabled || !m_bVisible )
+        return false;
+
+    switch( uMsg )
+    {
+        case WM_KEYDOWN:
+        {
+            switch( wParam )
+            {
+                case VK_SPACE:
+                    m_bPressed = true;
+                    return true;
+            }
+        }
+
+        case WM_KEYUP:
+        {
+            switch( wParam )
+            {
+                case VK_SPACE:
+                    if( m_bPressed == true )
+                    {
+                        m_bPressed = false;
+                        m_pDialog->SendEvent( EVENT_BUTTON_CLICKED, true, this );
+                    }
+                    return true;
+            }
+        }
+    }
+    return false;
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTButton::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam )
+{
+    if( !m_bEnabled || !m_bVisible )
+        return false;
+
+    switch( uMsg )
+    {
+        case WM_LBUTTONDOWN:
+        case WM_LBUTTONDBLCLK:
+        {
+            if( ContainsPoint( pt ) )
+            {
+                // Pressed while inside the control
+                m_bPressed = true;
+                SetCapture( DXUTGetHWND() );
+
+                if( !m_bHasFocus )
+                    m_pDialog->RequestFocus( this );
+
+                return true;
+            }
+
+            break;
+        }
+
+        case WM_LBUTTONUP:
+        {
+            if( m_bPressed )
+            {
+                m_bPressed = false;
+                ReleaseCapture();
+
+                if( !m_pDialog->m_bKeyboardInput )
+                    m_pDialog->ClearFocus();
+
+                // Button click
+                if( ContainsPoint( pt ) )
+                    m_pDialog->SendEvent( EVENT_BUTTON_CLICKED, true, this );
+
+                return true;
+            }
+
+            break;
+        }
+    };
+    
+    return false;
+}
+
+//--------------------------------------------------------------------------------------
+void CDXUTButton::Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime )
+{
+    int nOffsetX = 0;
+    int nOffsetY = 0;
+
+    DXUT_CONTROL_STATE iState = DXUT_STATE_NORMAL;
+
+    if( m_bVisible == false )
+    {
+        iState = DXUT_STATE_HIDDEN;
+    }
+    else if( m_bEnabled == false )
+    {
+        iState = DXUT_STATE_DISABLED;
+    }
+    else if( m_bPressed )
+    {
+        iState = DXUT_STATE_PRESSED;
+
+        nOffsetX = 1;
+        nOffsetY = 2;
+    }
+    else if( m_bMouseOver )
+    {
+        iState = DXUT_STATE_MOUSEOVER;
+
+        nOffsetX = -1;
+        nOffsetY = -2;
+    }
+    else if( m_bHasFocus )
+    {
+        iState = DXUT_STATE_FOCUS;
+    }
+    
+    // Background fill layer
+    //TODO: remove magic numbers
+    CDXUTElement* pElement = m_Elements.GetAt( 0 );
+    
+    float fBlendRate = ( iState == DXUT_STATE_PRESSED ) ? 0.0f : 0.8f;
+
+    RECT rcWindow = m_rcBoundingBox;
+    OffsetRect( &rcWindow, nOffsetX, nOffsetY );
+
+ 
+    // Blend current color
+    pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate );
+    pElement->FontColor.Blend( iState, fElapsedTime, fBlendRate );
+
+    m_pDialog->DrawSprite( pElement, &rcWindow );
+    m_pDialog->DrawText( m_strText, pElement, &rcWindow );
+
+    // Main button
+    pElement = m_Elements.GetAt( 1 );
+
+
+    // Blend current color
+    pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate );
+    pElement->FontColor.Blend( iState, fElapsedTime, fBlendRate );
+
+    m_pDialog->DrawSprite( pElement, &rcWindow );
+    m_pDialog->DrawText( m_strText, pElement, &rcWindow );
+}
+
+
+
+//--------------------------------------------------------------------------------------
+// CDXUTCheckBox class
+//--------------------------------------------------------------------------------------
+
+//--------------------------------------------------------------------------------------
+CDXUTCheckBox::CDXUTCheckBox( CDXUTDialog *pDialog )
+{
+    m_Type = DXUT_CONTROL_CHECKBOX;
+    m_pDialog = pDialog;
+
+    m_bChecked = false;
+}
+    
+
+//--------------------------------------------------------------------------------------
+bool CDXUTCheckBox::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    if( !m_bEnabled || !m_bVisible )
+        return false;
+
+    switch( uMsg )
+    {
+        case WM_KEYDOWN:
+        {
+            switch( wParam )
+            {
+                case VK_SPACE:
+                    m_bPressed = true;
+                    return true;
+            }
+        }
+
+        case WM_KEYUP:
+        {
+            switch( wParam )
+            {
+                case VK_SPACE:
+                    if( m_bPressed == true )
+                    {
+                        m_bPressed = false;
+                        SetCheckedInternal( !m_bChecked, true );
+                    }
+                    return true;
+            }
+        }
+    }
+    return false;
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTCheckBox::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam )
+{
+    if( !m_bEnabled || !m_bVisible )
+        return false;
+
+    switch( uMsg )
+    {
+        case WM_LBUTTONDOWN:
+        case WM_LBUTTONDBLCLK:
+        {
+            if( ContainsPoint( pt ) )
+            {
+                // Pressed while inside the control
+                m_bPressed = true;
+                SetCapture( DXUTGetHWND() );
+
+                if( !m_bHasFocus )
+                    m_pDialog->RequestFocus( this );
+
+                return true;
+            }
+
+            break;
+        }
+
+        case WM_LBUTTONUP:
+        {
+            if( m_bPressed )
+            {
+                m_bPressed = false;
+                ReleaseCapture();
+
+                // Button click
+                if( ContainsPoint( pt ) )
+                    SetCheckedInternal( !m_bChecked, true );
+                
+                return true;
+            }
+
+            break;
+        }
+    };
+    
+    return false;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTCheckBox::SetCheckedInternal( bool bChecked, bool bFromInput ) 
+{ 
+    m_bChecked = bChecked; 
+
+    m_pDialog->SendEvent( EVENT_CHECKBOX_CHANGED, bFromInput, this ); 
+}
+
+
+//--------------------------------------------------------------------------------------
+BOOL CDXUTCheckBox::ContainsPoint( POINT pt ) 
+{ 
+    return ( PtInRect( &m_rcBoundingBox, pt ) || 
+             PtInRect( &m_rcButton, pt ) ); 
+}
+
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTCheckBox::UpdateRects()
+{
+    CDXUTButton::UpdateRects();
+
+    m_rcButton = m_rcBoundingBox;
+    m_rcButton.right = m_rcButton.left + RectHeight( m_rcButton );
+
+    m_rcText = m_rcBoundingBox;
+    m_rcText.left += (int) ( 1.25f * RectWidth( m_rcButton ) );
+}
+
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTCheckBox::Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime )
+{
+    DXUT_CONTROL_STATE iState = DXUT_STATE_NORMAL;
+
+    if( m_bVisible == false )
+        iState = DXUT_STATE_HIDDEN;
+    else if( m_bEnabled == false )
+        iState = DXUT_STATE_DISABLED;
+    else if( m_bPressed )
+        iState = DXUT_STATE_PRESSED;
+    else if( m_bMouseOver )
+        iState = DXUT_STATE_MOUSEOVER;
+    else if( m_bHasFocus )
+        iState = DXUT_STATE_FOCUS;
+
+    CDXUTElement* pElement = m_Elements.GetAt( 0 );
+
+    float fBlendRate = ( iState == DXUT_STATE_PRESSED ) ? 0.0f : 0.8f;
+
+    pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate );
+    pElement->FontColor.Blend( iState, fElapsedTime, fBlendRate );
+
+    m_pDialog->DrawSprite( pElement, &m_rcButton );
+    m_pDialog->DrawText( m_strText, pElement, &m_rcText, true );
+
+    if( !m_bChecked )
+        iState = DXUT_STATE_HIDDEN;
+
+    pElement = m_Elements.GetAt( 1 );
+
+    pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate );
+    m_pDialog->DrawSprite( pElement, &m_rcButton );
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+// CDXUTRadioButton class
+//--------------------------------------------------------------------------------------
+
+//--------------------------------------------------------------------------------------
+CDXUTRadioButton::CDXUTRadioButton( CDXUTDialog *pDialog )
+{
+    m_Type = DXUT_CONTROL_RADIOBUTTON;
+    m_pDialog = pDialog;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTRadioButton::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    if( !m_bEnabled || !m_bVisible )
+        return false;
+
+    switch( uMsg )
+    {
+        case WM_KEYDOWN:
+        {
+            switch( wParam )
+            {
+                case VK_SPACE:
+                    m_bPressed = true;
+                    return true;
+            }
+        }
+
+        case WM_KEYUP:
+        {
+            switch( wParam )
+            {
+                case VK_SPACE:
+                    if( m_bPressed == true )
+                    {
+                        m_bPressed = false;
+                        
+                        m_pDialog->ClearRadioButtonGroup( m_nButtonGroup );
+                        m_bChecked = !m_bChecked;
+
+                        m_pDialog->SendEvent( EVENT_RADIOBUTTON_CHANGED, true, this );
+                    }
+                    return true;
+            }
+        }
+    }
+    return false;
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTRadioButton::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam )
+{
+    if( !m_bEnabled || !m_bVisible )
+        return false;
+
+    switch( uMsg )
+    {
+        case WM_LBUTTONDOWN:
+        case WM_LBUTTONDBLCLK:
+        {
+            if( ContainsPoint( pt ) )
+            {
+                // Pressed while inside the control
+                m_bPressed = true;
+                SetCapture( DXUTGetHWND() );
+
+                if( !m_bHasFocus )
+                    m_pDialog->RequestFocus( this );
+
+                return true;
+            }
+
+            break;
+        }
+
+        case WM_LBUTTONUP:
+        {
+            if( m_bPressed )
+            {
+                m_bPressed = false;
+                ReleaseCapture();
+
+                // Button click
+                if( ContainsPoint( pt ) )
+                {
+                    m_pDialog->ClearRadioButtonGroup( m_nButtonGroup );
+                    m_bChecked = !m_bChecked;
+
+                    m_pDialog->SendEvent( EVENT_RADIOBUTTON_CHANGED, true, this );
+                }
+
+                return true;
+            }
+
+            break;
+        }
+    };
+    
+    return false;
+}
+
+//--------------------------------------------------------------------------------------
+void CDXUTRadioButton::SetCheckedInternal( bool bChecked, bool bClearGroup, bool bFromInput )
+{
+    if( bChecked && bClearGroup )
+        m_pDialog->ClearRadioButtonGroup( m_nButtonGroup );
+
+    m_bChecked = bChecked;
+    m_pDialog->SendEvent( EVENT_RADIOBUTTON_CHANGED, bFromInput, this );
+}
+
+
+
+
+//--------------------------------------------------------------------------------------
+// CDXUTComboBox class
+//--------------------------------------------------------------------------------------
+
+//--------------------------------------------------------------------------------------
+CDXUTComboBox::CDXUTComboBox( CDXUTDialog *pDialog ) :
+    m_ScrollBar( pDialog )
+{
+    m_Type = DXUT_CONTROL_COMBOBOX;
+    m_pDialog = pDialog;
+
+    m_nDropHeight = 100;
+
+    m_nSBWidth = 16;
+    m_bOpened = false;
+    m_iSelected = -1;
+    m_iFocused = -1;
+}
+
+
+//--------------------------------------------------------------------------------------
+CDXUTComboBox::~CDXUTComboBox()
+{
+    RemoveAllItems();
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTComboBox::SetTextColor( D3DCOLOR Color )
+{
+    CDXUTElement* pElement = m_Elements.GetAt( 0 );
+
+    if( pElement )
+        pElement->FontColor.States[DXUT_STATE_NORMAL] = Color;
+
+    pElement = m_Elements.GetAt( 2 );
+
+    if( pElement )
+        pElement->FontColor.States[DXUT_STATE_NORMAL] = Color;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTComboBox::UpdateRects()
+{
+    
+    CDXUTButton::UpdateRects();
+
+    m_rcButton = m_rcBoundingBox;
+    m_rcButton.left = m_rcButton.right - RectHeight( m_rcButton );
+
+    m_rcText = m_rcBoundingBox;
+    m_rcText.right = m_rcButton.left;
+
+    m_rcDropdown = m_rcText;
+    OffsetRect( &m_rcDropdown, 0, (int) (0.90f * RectHeight( m_rcText )) );
+    m_rcDropdown.bottom += m_nDropHeight;
+    m_rcDropdown.right -= m_nSBWidth;
+
+    m_rcDropdownText = m_rcDropdown;
+    m_rcDropdownText.left += (int) (0.1f * RectWidth( m_rcDropdown ));
+    m_rcDropdownText.right -= (int) (0.1f * RectWidth( m_rcDropdown ));
+    m_rcDropdownText.top += (int) (0.1f * RectHeight( m_rcDropdown ));
+    m_rcDropdownText.bottom -= (int) (0.1f * RectHeight( m_rcDropdown ));
+
+    // Update the scrollbar's rects
+    m_ScrollBar.SetLocation( m_rcDropdown.right, m_rcDropdown.top+2 );
+    m_ScrollBar.SetSize( m_nSBWidth, RectHeight( m_rcDropdown )-2 );
+    DXUTFontNode* pFontNode = m_pDialog->GetManager()->GetFontNode( m_Elements.GetAt( 2 )->iFont );
+    if( pFontNode && pFontNode->nHeight )
+    {
+        m_ScrollBar.SetPageSize( RectHeight( m_rcDropdownText ) / pFontNode->nHeight );
+
+        // The selected item may have been scrolled off the page.
+        // Ensure that it is in page again.
+        m_ScrollBar.ShowItem( m_iSelected );
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTComboBox::OnFocusOut()
+{
+    CDXUTButton::OnFocusOut();
+
+    m_bOpened = false;
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTComboBox::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    const DWORD REPEAT_MASK = (0x40000000);
+
+    if( !m_bEnabled || !m_bVisible )
+        return false;
+
+    // Let the scroll bar have a chance to handle it first
+    if( m_ScrollBar.HandleKeyboard( uMsg, wParam, lParam ) )
+        return true;
+
+    switch( uMsg )
+    {
+        case WM_KEYDOWN:
+        {
+            switch( wParam )
+            {
+                case VK_RETURN:
+                    if( m_bOpened )
+                    {
+                        if( m_iSelected != m_iFocused )
+                        {
+                            m_iSelected = m_iFocused;
+                            m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this );
+                        }
+                        m_bOpened = false;
+                        
+                        if( !m_pDialog->m_bKeyboardInput )
+                            m_pDialog->ClearFocus();
+
+                        return true;
+                    }
+                    break;
+
+                case VK_F4:
+                    // Filter out auto-repeats
+                    if( lParam & REPEAT_MASK )
+                        return true;
+
+                    m_bOpened = !m_bOpened;
+
+                    if( !m_bOpened )
+                    {
+                        m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this );
+
+                        if( !m_pDialog->m_bKeyboardInput )
+                            m_pDialog->ClearFocus();
+                    }
+
+                    return true;
+
+                case VK_LEFT:
+                case VK_UP:
+                    if( m_iFocused > 0 )
+                    {
+                        m_iFocused--;
+                        m_iSelected = m_iFocused;
+
+                        if( !m_bOpened )
+                            m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this );
+                    }
+                    
+                    return true;
+
+                case VK_RIGHT:
+                case VK_DOWN:
+                    if( m_iFocused+1 < (int)GetNumItems() )
+                    {
+                        m_iFocused++;
+                        m_iSelected = m_iFocused;
+
+                        if( !m_bOpened )
+                            m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this );
+                    }
+
+                    return true;
+            }
+            break;
+        }
+    }
+
+    return false;
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTComboBox::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam )
+{
+    if( !m_bEnabled || !m_bVisible )
+        return false;
+
+    // Let the scroll bar handle it first.
+    if( m_ScrollBar.HandleMouse( uMsg, pt, wParam, lParam ) )
+        return true;
+
+    switch( uMsg )
+    {
+        case WM_MOUSEMOVE:
+        {
+            if( m_bOpened && PtInRect( &m_rcDropdown, pt ) )
+            {
+                // Determine which item has been selected
+                for( int i=0; i < m_Items.GetSize(); i++ )
+                {
+                    DXUTComboBoxItem* pItem = m_Items.GetAt( i );
+                    if( pItem -> bVisible &&
+                        PtInRect( &pItem->rcActive, pt ) )
+                    {
+                        m_iFocused = i;
+                    }
+                }
+                return true;
+            }
+            break;
+        }
+
+        case WM_LBUTTONDOWN:
+        case WM_LBUTTONDBLCLK:
+        {
+            if( ContainsPoint( pt ) )
+            {
+                // Pressed while inside the control
+                m_bPressed = true;
+                SetCapture( DXUTGetHWND() );
+
+                if( !m_bHasFocus )
+                    m_pDialog->RequestFocus( this );
+
+                // Toggle dropdown
+                if( m_bHasFocus )
+                {
+                    m_bOpened = !m_bOpened;
+                
+                    if( !m_bOpened )
+                    {
+                        if( !m_pDialog->m_bKeyboardInput )
+                            m_pDialog->ClearFocus();
+                    }
+                }
+
+                return true;
+            }
+
+            // Perhaps this click is within the dropdown
+            if( m_bOpened && PtInRect( &m_rcDropdown, pt ) )
+            {
+                // Determine which item has been selected
+                for( int i=m_ScrollBar.GetTrackPos(); i < m_Items.GetSize(); i++ )
+                {
+                    DXUTComboBoxItem* pItem = m_Items.GetAt( i );
+                    if( pItem -> bVisible &&
+                        PtInRect( &pItem->rcActive, pt ) )
+                    {
+                        m_iFocused = m_iSelected = i;
+                        m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this );
+                        m_bOpened = false;
+                        
+                        if( !m_pDialog->m_bKeyboardInput )
+                            m_pDialog->ClearFocus();
+
+                        break;
+                    }
+                }
+
+                return true;
+            }
+
+            // Mouse click not on main control or in dropdown, fire an event if needed
+            if( m_bOpened )
+            {
+                m_iFocused = m_iSelected;
+
+                m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this );
+                m_bOpened = false;
+            }
+
+            // Make sure the control is no longer in a pressed state
+            m_bPressed = false;
+
+            // Release focus if appropriate
+            if( !m_pDialog->m_bKeyboardInput )
+            {
+                m_pDialog->ClearFocus();
+            }
+
+            break;
+        }
+
+        case WM_LBUTTONUP:
+        {
+            if( m_bPressed && ContainsPoint( pt ) )
+            {
+                // Button click
+                m_bPressed = false;
+                ReleaseCapture();
+                return true;
+            }
+
+            break;
+        }
+
+        case WM_MOUSEWHEEL:
+        {
+            int zDelta = (short) HIWORD(wParam) / WHEEL_DELTA;
+            if( m_bOpened )
+            {
+                UINT uLines;
+                SystemParametersInfo( SPI_GETWHEELSCROLLLINES, 0, &uLines, 0 );
+                m_ScrollBar.Scroll( -zDelta * uLines );
+            } else
+            {
+                if( zDelta > 0 )
+                {
+                    if( m_iFocused > 0 )
+                    {
+                        m_iFocused--;
+                        m_iSelected = m_iFocused;     
+                        
+                        if( !m_bOpened )
+                            m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this );
+                    }          
+                }
+                else
+                {
+                    if( m_iFocused+1 < (int)GetNumItems() )
+                    {
+                        m_iFocused++;
+                        m_iSelected = m_iFocused;   
+
+                        if( !m_bOpened )
+                            m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this );
+                    }
+                }
+            }
+            return true;
+        }
+    };
+    
+    return false;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTComboBox::OnHotkey()
+{
+    if( m_bOpened )
+        return;
+
+    if( m_iSelected == -1 )
+        return;
+
+    if( m_pDialog->IsKeyboardInputEnabled() )
+        m_pDialog->RequestFocus( this );
+
+    m_iSelected++;
+    
+    if( m_iSelected >= (int) m_Items.GetSize() )
+        m_iSelected = 0;
+
+    m_iFocused = m_iSelected;
+    m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, true, this );
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTComboBox::Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime )
+{
+    DXUT_CONTROL_STATE iState = DXUT_STATE_NORMAL;
+    
+    if( !m_bOpened )
+        iState = DXUT_STATE_HIDDEN;
+
+    // Dropdown box
+    CDXUTElement* pElement = m_Elements.GetAt( 2 );
+
+    // If we have not initialized the scroll bar page size,
+    // do that now.
+    static bool bSBInit;
+    if( !bSBInit )
+    {
+        // Update the page size of the scroll bar
+        if( m_pDialog->GetManager()->GetFontNode( pElement->iFont )->nHeight )
+            m_ScrollBar.SetPageSize( RectHeight( m_rcDropdownText ) / m_pDialog->GetManager()->GetFontNode( pElement->iFont )->nHeight );
+        else
+            m_ScrollBar.SetPageSize( RectHeight( m_rcDropdownText ) );
+        bSBInit = true;
+    }
+
+    // Scroll bar
+    if( m_bOpened )
+        m_ScrollBar.Render( pd3dDevice, fElapsedTime );
+
+    // Blend current color
+    pElement->TextureColor.Blend( iState, fElapsedTime );
+    pElement->FontColor.Blend( iState, fElapsedTime );
+
+    m_pDialog->DrawSprite( pElement, &m_rcDropdown );
+
+    // Selection outline
+    CDXUTElement* pSelectionElement = m_Elements.GetAt( 3 );
+    pSelectionElement->TextureColor.Current = pElement->TextureColor.Current;
+    pSelectionElement->FontColor.Current = pSelectionElement->FontColor.States[ DXUT_STATE_NORMAL ];
+
+    DXUTFontNode* pFont = m_pDialog->GetFont( pElement->iFont );
+    if( pFont )
+    {
+        int curY = m_rcDropdownText.top;
+        int nRemainingHeight = RectHeight( m_rcDropdownText );
+        //WCHAR strDropdown[4096] = {0};
+
+        for( int i = m_ScrollBar.GetTrackPos(); i < m_Items.GetSize(); i++ )
+        {
+            DXUTComboBoxItem* pItem = m_Items.GetAt( i );
+
+            // Make sure there's room left in the dropdown
+            nRemainingHeight -= pFont->nHeight;
+            if( nRemainingHeight < 0 )
+            {
+                pItem->bVisible = false;
+                continue;
+            }
+
+            SetRect( &pItem->rcActive, m_rcDropdownText.left, curY, m_rcDropdownText.right, curY + pFont->nHeight );
+            curY += pFont->nHeight;
+            
+            //debug
+            //int blue = 50 * i;
+            //m_pDialog->DrawRect( &pItem->rcActive, 0xFFFF0000 | blue );
+
+            pItem->bVisible = true;
+
+            if( m_bOpened )
+            {
+                if( (int)i == m_iFocused )
+                {
+                    RECT rc;
+                    SetRect( &rc, m_rcDropdown.left, pItem->rcActive.top-2, m_rcDropdown.right, pItem->rcActive.bottom+2 );
+                    m_pDialog->DrawSprite( pSelectionElement, &rc );
+                    m_pDialog->DrawText( pItem->strText, pSelectionElement, &pItem->rcActive );
+                }
+                else
+                {
+                    m_pDialog->DrawText( pItem->strText, pElement, &pItem->rcActive );
+                }
+            }
+        }
+    }
+
+    int nOffsetX = 0;
+    int nOffsetY = 0;
+
+    iState = DXUT_STATE_NORMAL;
+    
+    if( m_bVisible == false )
+        iState = DXUT_STATE_HIDDEN;
+    else if( m_bEnabled == false )
+        iState = DXUT_STATE_DISABLED;
+    else if( m_bPressed )
+    {
+        iState = DXUT_STATE_PRESSED;
+
+        nOffsetX = 1;
+        nOffsetY = 2;
+    }
+    else if( m_bMouseOver )
+    {
+        iState = DXUT_STATE_MOUSEOVER;
+
+        nOffsetX = -1;
+        nOffsetY = -2;
+    }
+    else if( m_bHasFocus )
+        iState = DXUT_STATE_FOCUS;
+
+    float fBlendRate = ( iState == DXUT_STATE_PRESSED ) ? 0.0f : 0.8f;
+    
+    // Button
+    pElement = m_Elements.GetAt( 1 );
+    
+    // Blend current color
+    pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate );
+    
+    RECT rcWindow = m_rcButton;
+    OffsetRect( &rcWindow, nOffsetX, nOffsetY );
+    m_pDialog->DrawSprite( pElement, &rcWindow );
+
+    if( m_bOpened )
+        iState = DXUT_STATE_PRESSED;
+
+    // Main text box
+    //TODO: remove magic numbers
+    pElement = m_Elements.GetAt( 0 );
+    
+    // Blend current color
+    pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate );
+    pElement->FontColor.Blend( iState, fElapsedTime, fBlendRate );
+
+    m_pDialog->DrawSprite( pElement, &m_rcText);
+    
+    if( m_iSelected >= 0 && m_iSelected < (int) m_Items.GetSize() )
+    {
+        DXUTComboBoxItem* pItem = m_Items.GetAt( m_iSelected );
+        if( pItem != NULL )
+        {
+            m_pDialog->DrawText( pItem->strText, pElement, &m_rcText );
+        
+        }
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTComboBox::AddItem( const WCHAR* strText, void* pData )
+{
+    // Validate parameters
+    if( strText== NULL )
+    {
+        return E_INVALIDARG;
+    }
+    
+    // Create a new item and set the data
+    DXUTComboBoxItem* pItem = new DXUTComboBoxItem;
+    if( pItem == NULL )
+    {
+        return DXTRACE_ERR_MSGBOX( L"new", E_OUTOFMEMORY );
+    }
+    
+    ZeroMemory( pItem, sizeof(DXUTComboBoxItem) );
+    StringCchCopy( pItem->strText, 256, strText );
+    pItem->pData = pData;
+
+    m_Items.Add( pItem );
+
+    // Update the scroll bar with new range
+    m_ScrollBar.SetTrackRange( 0, m_Items.GetSize() );
+
+    // If this is the only item in the list, it's selected
+    if( GetNumItems() == 1 )
+    {
+        m_iSelected = 0;
+        m_iFocused = 0;
+        m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, false, this );
+    }
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTComboBox::RemoveItem( UINT index )
+{
+    DXUTComboBoxItem* pItem = m_Items.GetAt( index );
+    SAFE_DELETE( pItem );
+    m_Items.Remove( index );
+    m_ScrollBar.SetTrackRange( 0, m_Items.GetSize() );
+    if( m_iSelected >= m_Items.GetSize() )
+        m_iSelected = m_Items.GetSize() - 1;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTComboBox::RemoveAllItems()
+{
+    for( int i=0; i < m_Items.GetSize(); i++ )
+    {
+        DXUTComboBoxItem* pItem = m_Items.GetAt( i );
+        SAFE_DELETE( pItem );
+    }
+
+    m_Items.RemoveAll();
+    m_ScrollBar.SetTrackRange( 0, 1 );
+    m_iFocused = m_iSelected = -1;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTComboBox::ContainsItem( const WCHAR* strText, UINT iStart )
+{
+    return ( -1 != FindItem( strText, iStart ) );
+}
+
+
+//--------------------------------------------------------------------------------------
+int CDXUTComboBox::FindItem( const WCHAR* strText, UINT iStart )
+{
+    if( strText == NULL )
+        return -1;
+
+    for( int i = iStart; i < m_Items.GetSize(); i++ )
+    {
+        DXUTComboBoxItem* pItem = m_Items.GetAt(i);
+
+        if( 0 == wcscmp( pItem->strText, strText ) )
+        {
+            return i;
+        }
+    }
+
+    return -1;
+}
+
+
+//--------------------------------------------------------------------------------------
+void* CDXUTComboBox::GetSelectedData()
+{
+    if( m_iSelected < 0 )
+        return NULL;
+
+    DXUTComboBoxItem* pItem = m_Items.GetAt( m_iSelected );
+    return pItem->pData;
+}
+
+
+//--------------------------------------------------------------------------------------
+DXUTComboBoxItem* CDXUTComboBox::GetSelectedItem()
+{
+    if( m_iSelected < 0 )
+        return NULL;
+
+    return m_Items.GetAt( m_iSelected );
+}
+
+
+//--------------------------------------------------------------------------------------
+void* CDXUTComboBox::GetItemData( const WCHAR* strText )
+{
+    int index = FindItem( strText );
+    if( index == -1 )
+    {
+        return NULL;
+    }
+
+    DXUTComboBoxItem* pItem = m_Items.GetAt(index);
+    if( pItem == NULL )
+    {
+        DXTRACE_ERR( L"CGrowableArray::GetAt", E_FAIL );
+        return NULL;
+    }
+
+    return pItem->pData;
+}
+
+
+//--------------------------------------------------------------------------------------
+void* CDXUTComboBox::GetItemData( int nIndex )
+{
+    if( nIndex < 0 || nIndex >= m_Items.GetSize() )
+        return NULL;
+
+    return m_Items.GetAt( nIndex )->pData;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTComboBox::SetSelectedByIndex( UINT index )
+{
+    if( index >= GetNumItems() )
+        return E_INVALIDARG;
+
+    m_iFocused = m_iSelected = index;
+    m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, false, this );
+
+    return S_OK;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTComboBox::SetSelectedByText( const WCHAR* strText )
+{
+    if( strText == NULL )
+        return E_INVALIDARG;
+
+    int index = FindItem( strText );
+    if( index == -1 )
+        return E_FAIL;
+
+    m_iFocused = m_iSelected = index;
+    m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, false, this );
+
+    return S_OK;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTComboBox::SetSelectedByData( void* pData )
+{
+    for( int i=0; i < m_Items.GetSize(); i++ )
+    {
+        DXUTComboBoxItem* pItem = m_Items.GetAt(i);
+
+        if( pItem->pData == pData )
+        {
+            m_iFocused = m_iSelected = i;
+            m_pDialog->SendEvent( EVENT_COMBOBOX_SELECTION_CHANGED, false, this );
+            return S_OK;
+        }
+    }
+
+    return E_FAIL;
+}
+
+
+
+//--------------------------------------------------------------------------------------
+CDXUTSlider::CDXUTSlider( CDXUTDialog *pDialog )
+{
+    m_Type = DXUT_CONTROL_SLIDER;
+    m_pDialog = pDialog;
+
+    m_nMin = 0;
+    m_nMax = 100;
+    m_nValue = 50;
+
+    m_bPressed = false;
+}
+
+
+//--------------------------------------------------------------------------------------
+BOOL CDXUTSlider::ContainsPoint( POINT pt ) 
+{ 
+    return ( PtInRect( &m_rcBoundingBox, pt ) || 
+             PtInRect( &m_rcButton, pt ) ); 
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTSlider::UpdateRects()
+{
+    CDXUTControl::UpdateRects();
+
+    m_rcButton = m_rcBoundingBox;
+    m_rcButton.right = m_rcButton.left + RectHeight( m_rcButton );
+    OffsetRect( &m_rcButton, -RectWidth( m_rcButton )/2, 0 );
+
+    m_nButtonX = (int) ( (m_nValue - m_nMin) * (float)RectWidth( m_rcBoundingBox ) / (m_nMax - m_nMin) );
+    OffsetRect( &m_rcButton, m_nButtonX, 0 );
+}
+
+int CDXUTSlider::ValueFromPos( int x )
+{ 
+    float fValuePerPixel = (float)(m_nMax - m_nMin) / RectWidth( m_rcBoundingBox );
+    return (int) (0.5f + m_nMin + fValuePerPixel * (x - m_rcBoundingBox.left)) ; 
+}
+
+//--------------------------------------------------------------------------------------
+bool CDXUTSlider::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    if( !m_bEnabled || !m_bVisible )
+        return false;
+
+    switch( uMsg )
+    {
+        case WM_KEYDOWN:
+        {
+            switch( wParam )
+            {
+                case VK_HOME:
+                    SetValueInternal( m_nMin, true );
+                    return true;
+
+                case VK_END:
+                    SetValueInternal( m_nMax, true );
+                    return true;
+
+                case VK_LEFT:
+                case VK_DOWN:
+                    SetValueInternal( m_nValue - 1, true );
+                    return true;
+
+                case VK_RIGHT:
+                case VK_UP:
+                    SetValueInternal( m_nValue + 1, true );
+                    return true;
+
+                case VK_NEXT:
+                    SetValueInternal( m_nValue - ( 10 > (m_nMax - m_nMin) / 10 ? 10 : (m_nMax - m_nMin) / 10 ), true );
+                    return true;
+
+                case VK_PRIOR:
+                    SetValueInternal( m_nValue + ( 10 > (m_nMax - m_nMin) / 10 ? 10 : (m_nMax - m_nMin) / 10 ), true );
+                    return true;
+            }
+            break;
+        }
+    }
+    
+
+    return false;
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTSlider::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam )
+{
+    if( !m_bEnabled || !m_bVisible )
+        return false;
+
+    switch( uMsg )
+    {
+        case WM_LBUTTONDOWN:
+        case WM_LBUTTONDBLCLK:
+        {
+            if( PtInRect( &m_rcButton, pt ) )
+            {
+                // Pressed while inside the control
+                m_bPressed = true;
+                SetCapture( DXUTGetHWND() );
+
+                m_nDragX = pt.x;
+                //m_nDragY = pt.y;
+                m_nDragOffset = m_nButtonX - m_nDragX;
+
+                //m_nDragValue = m_nValue;
+
+                if( !m_bHasFocus )
+                    m_pDialog->RequestFocus( this );
+
+                return true;
+            }
+
+            if( PtInRect( &m_rcBoundingBox, pt ) )
+            {
+                m_nDragX = pt.x;
+                m_nDragOffset = 0;               
+                m_bPressed = true;
+                
+                if( !m_bHasFocus )
+                    m_pDialog->RequestFocus( this );
+
+                if( pt.x > m_nButtonX + m_x )
+                {
+                    SetValueInternal( m_nValue + 1, true );
+                    return true;
+                }
+
+                if( pt.x < m_nButtonX + m_x )
+                {
+                    SetValueInternal( m_nValue - 1, true );
+                    return true;
+                }
+            }
+
+            break;
+        }
+
+        case WM_LBUTTONUP:
+        {
+            if( m_bPressed )
+            {
+                m_bPressed = false;
+                ReleaseCapture();
+                m_pDialog->SendEvent( EVENT_SLIDER_VALUE_CHANGED, true, this );
+
+                return true;
+            }
+
+            break;
+        }
+
+        case WM_MOUSEMOVE:
+        {
+            if( m_bPressed )
+            {
+                SetValueInternal( ValueFromPos( m_x + pt.x + m_nDragOffset ), true );
+                return true;
+            }
+
+            break;
+        }
+
+	    case WM_MOUSEWHEEL:
+	    {
+	        int nScrollAmount = int((short)HIWORD(wParam)) / WHEEL_DELTA;
+            SetValueInternal( m_nValue - nScrollAmount, true );
+	        return true;
+	    }
+    };
+    
+    return false;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTSlider::SetRange( int nMin, int nMax ) 
+{
+    m_nMin = nMin;
+    m_nMax = nMax;
+
+    SetValueInternal( m_nValue, false );
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTSlider::SetValueInternal( int nValue, bool bFromInput )
+{
+    // Clamp to range
+    nValue = __max( m_nMin, nValue );
+    nValue = __min( m_nMax, nValue );
+    
+    if( nValue == m_nValue )
+        return;
+
+    m_nValue = nValue;
+    UpdateRects();
+
+    m_pDialog->SendEvent( EVENT_SLIDER_VALUE_CHANGED, bFromInput, this );
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTSlider::Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime )
+{
+    int nOffsetX = 0;
+    int nOffsetY = 0;
+
+    DXUT_CONTROL_STATE iState = DXUT_STATE_NORMAL;
+
+    if( m_bVisible == false )
+    {
+        iState = DXUT_STATE_HIDDEN;
+    }
+    else if( m_bEnabled == false )
+    {
+        iState = DXUT_STATE_DISABLED;
+    }
+    else if( m_bPressed )
+    {
+        iState = DXUT_STATE_PRESSED;
+
+        nOffsetX = 1;
+        nOffsetY = 2;
+    }
+    else if( m_bMouseOver )
+    {
+        iState = DXUT_STATE_MOUSEOVER;
+        
+        nOffsetX = -1;
+        nOffsetY = -2;
+    }
+    else if( m_bHasFocus )
+    {
+        iState = DXUT_STATE_FOCUS;
+    }
+
+    float fBlendRate = ( iState == DXUT_STATE_PRESSED ) ? 0.0f : 0.8f;
+
+    CDXUTElement* pElement = m_Elements.GetAt( 0 );
+    
+    // Blend current color
+    pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate ); 
+    m_pDialog->DrawSprite( pElement, &m_rcBoundingBox );
+
+    //TODO: remove magic numbers
+    pElement = m_Elements.GetAt( 1 );
+       
+    // Blend current color
+    pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate );
+    m_pDialog->DrawSprite( pElement, &m_rcButton );
+}
+
+
+//--------------------------------------------------------------------------------------
+// CDXUTScrollBar class
+//--------------------------------------------------------------------------------------
+
+//--------------------------------------------------------------------------------------
+CDXUTScrollBar::CDXUTScrollBar( CDXUTDialog *pDialog )
+{
+    m_Type = DXUT_CONTROL_SCROLLBAR;
+    m_pDialog = pDialog;
+
+    m_bShowThumb = true;
+    m_bDrag = false;
+
+    SetRect( &m_rcUpButton, 0, 0, 0, 0 );
+    SetRect( &m_rcDownButton, 0, 0, 0, 0 );
+    SetRect( &m_rcTrack, 0, 0, 0, 0 );
+    SetRect( &m_rcThumb, 0, 0, 0, 0 );
+    m_nPosition = 0;
+    m_nPageSize = 1;
+    m_nStart = 0;
+    m_nEnd = 1;
+    m_Arrow = CLEAR;
+    m_dArrowTS = 0.0;
+}
+
+
+//--------------------------------------------------------------------------------------
+CDXUTScrollBar::~CDXUTScrollBar()
+{
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTScrollBar::UpdateRects()
+{
+    CDXUTControl::UpdateRects();
+
+    // Make the buttons square
+
+    SetRect( &m_rcUpButton, m_rcBoundingBox.left, m_rcBoundingBox.top,
+                            m_rcBoundingBox.right, m_rcBoundingBox.top + RectWidth( m_rcBoundingBox ) );
+    SetRect( &m_rcDownButton, m_rcBoundingBox.left, m_rcBoundingBox.bottom - RectWidth( m_rcBoundingBox ),
+                              m_rcBoundingBox.right, m_rcBoundingBox.bottom );
+    SetRect( &m_rcTrack, m_rcUpButton.left, m_rcUpButton.bottom,
+                         m_rcDownButton.right, m_rcDownButton.top );
+    m_rcThumb.left = m_rcUpButton.left;
+    m_rcThumb.right = m_rcUpButton.right;
+
+    UpdateThumbRect();
+}
+
+
+//--------------------------------------------------------------------------------------
+// Compute the dimension of the scroll thumb
+void CDXUTScrollBar::UpdateThumbRect()
+{
+    if( m_nEnd - m_nStart > m_nPageSize )
+    {
+        int nThumbHeight = __max( RectHeight( m_rcTrack ) * m_nPageSize / ( m_nEnd - m_nStart ), SCROLLBAR_MINTHUMBSIZE );
+        int nMaxPosition = m_nEnd - m_nStart - m_nPageSize;
+        m_rcThumb.top = m_rcTrack.top + ( m_nPosition - m_nStart ) * ( RectHeight( m_rcTrack ) - nThumbHeight )
+                        / nMaxPosition;
+        m_rcThumb.bottom = m_rcThumb.top + nThumbHeight;
+        m_bShowThumb = true;
+
+    } 
+    else
+    {
+        // No content to scroll
+        m_rcThumb.bottom = m_rcThumb.top;
+        m_bShowThumb = false;
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+// Scroll() scrolls by nDelta items.  A positive value scrolls down, while a negative
+// value scrolls up.
+void CDXUTScrollBar::Scroll( int nDelta )
+{
+    // Perform scroll
+    m_nPosition += nDelta;
+
+    // Cap position
+    Cap();
+
+    // Update thumb position
+    UpdateThumbRect();
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTScrollBar::ShowItem( int nIndex )
+{
+    // Cap the index
+
+    if( nIndex < 0 )
+        nIndex = 0;
+
+    if( nIndex >= m_nEnd )
+        nIndex = m_nEnd - 1;
+
+    // Adjust position
+
+    if( m_nPosition > nIndex )
+        m_nPosition = nIndex;
+    else
+    if( m_nPosition + m_nPageSize <= nIndex )
+        m_nPosition = nIndex - m_nPageSize + 1;
+
+    UpdateThumbRect();
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTScrollBar::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    return false;
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTScrollBar::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam )
+{
+    static int ThumbOffsetY;
+
+    m_LastMouse = pt;
+    switch( uMsg )
+    {
+        case WM_LBUTTONDOWN:
+        case WM_LBUTTONDBLCLK:
+        {
+            // Check for click on up button
+
+            if( PtInRect( &m_rcUpButton, pt ) )
+            {
+                SetCapture( DXUTGetHWND() );
+                if( m_nPosition > m_nStart )
+                    --m_nPosition;
+                UpdateThumbRect();
+                m_Arrow = CLICKED_UP;
+                m_dArrowTS = DXUTGetTime();
+                return true;
+            }
+
+            // Check for click on down button
+
+            if( PtInRect( &m_rcDownButton, pt ) )
+            {
+                SetCapture( DXUTGetHWND() );
+                if( m_nPosition + m_nPageSize < m_nEnd )
+                    ++m_nPosition;
+                UpdateThumbRect();
+                m_Arrow = CLICKED_DOWN;
+                m_dArrowTS = DXUTGetTime();
+                return true;
+            }
+
+            // Check for click on thumb
+
+            if( PtInRect( &m_rcThumb, pt ) )
+            {
+                SetCapture( DXUTGetHWND() );
+                m_bDrag = true;
+                ThumbOffsetY = pt.y - m_rcThumb.top;
+                return true;
+            }
+
+            // Check for click on track
+
+            if( m_rcThumb.left <= pt.x &&
+                m_rcThumb.right > pt.x )
+            {
+                SetCapture( DXUTGetHWND() );
+                if( m_rcThumb.top > pt.y &&
+                    m_rcTrack.top <= pt.y )
+                {
+                    Scroll( -( m_nPageSize - 1 ) );
+                    return true;
+                } else
+                if( m_rcThumb.bottom <= pt.y &&
+                    m_rcTrack.bottom > pt.y )
+                {
+                    Scroll( m_nPageSize - 1 );
+                    return true;
+                }
+            }
+
+            break;
+        }
+
+        case WM_LBUTTONUP:
+        {
+            m_bDrag = false;
+            ReleaseCapture();
+            UpdateThumbRect();
+            m_Arrow = CLEAR;
+            break;
+        }
+
+        case WM_MOUSEMOVE:
+        {
+            if( m_bDrag )
+            {
+                m_rcThumb.bottom += pt.y - ThumbOffsetY - m_rcThumb.top;
+                m_rcThumb.top = pt.y - ThumbOffsetY;
+                if( m_rcThumb.top < m_rcTrack.top )
+                    OffsetRect( &m_rcThumb, 0, m_rcTrack.top - m_rcThumb.top );
+                else
+                if( m_rcThumb.bottom > m_rcTrack.bottom )
+                    OffsetRect( &m_rcThumb, 0, m_rcTrack.bottom - m_rcThumb.bottom );
+
+                // Compute first item index based on thumb position
+
+                int nMaxFirstItem = m_nEnd - m_nStart - m_nPageSize;  // Largest possible index for first item
+                int nMaxThumb = RectHeight( m_rcTrack ) - RectHeight( m_rcThumb );  // Largest possible thumb position from the top
+
+                m_nPosition = m_nStart +
+                              ( m_rcThumb.top - m_rcTrack.top +
+                                nMaxThumb / ( nMaxFirstItem * 2 ) ) * // Shift by half a row to avoid last row covered by only one pixel
+                              nMaxFirstItem  / nMaxThumb;
+
+                return true;
+            }
+
+            break;
+        }
+    }
+
+    return false;
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTScrollBar::MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    if( WM_CAPTURECHANGED == uMsg )
+    {
+        // The application just lost mouse capture. We may not have gotten
+        // the WM_MOUSEUP message, so reset m_bDrag here.
+        m_bDrag = false;
+    }
+
+    return false;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTScrollBar::Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime )
+{
+    // Check if the arrow button has been held for a while.
+    // If so, update the thumb position to simulate repeated
+    // scroll.
+    if( m_Arrow != CLEAR )
+    {
+        double dCurrTime = DXUTGetTime();
+        if( PtInRect( &m_rcUpButton, m_LastMouse ) )
+        {
+            switch( m_Arrow )
+            {
+                case CLICKED_UP:
+                    if( SCROLLBAR_ARROWCLICK_DELAY < dCurrTime - m_dArrowTS )
+                    {
+                        Scroll( -1 );
+                        m_Arrow = HELD_UP;
+                        m_dArrowTS = dCurrTime;
+                    }
+                    break;
+                case HELD_UP:
+                    if( SCROLLBAR_ARROWCLICK_REPEAT < dCurrTime - m_dArrowTS )
+                    {
+                        Scroll( -1 );
+                        m_dArrowTS = dCurrTime;
+                    }
+                    break;
+            }
+        } else
+        if( PtInRect( &m_rcDownButton, m_LastMouse ) )
+        {
+            switch( m_Arrow )
+            {
+                case CLICKED_DOWN:
+                    if( SCROLLBAR_ARROWCLICK_DELAY < dCurrTime - m_dArrowTS )
+                    {
+                        Scroll( 1 );
+                        m_Arrow = HELD_DOWN;
+                        m_dArrowTS = dCurrTime;
+                    }
+                    break;
+                case HELD_DOWN:
+                    if( SCROLLBAR_ARROWCLICK_REPEAT < dCurrTime - m_dArrowTS )
+                    {
+                        Scroll( 1 );
+                        m_dArrowTS = dCurrTime;
+                    }
+                    break;
+            }
+        }
+    }
+
+    DXUT_CONTROL_STATE iState = DXUT_STATE_NORMAL;
+
+    if( m_bVisible == false )
+        iState = DXUT_STATE_HIDDEN;
+    else if( m_bEnabled == false || m_bShowThumb == false )
+        iState = DXUT_STATE_DISABLED;
+    else if( m_bMouseOver )
+        iState = DXUT_STATE_MOUSEOVER;
+    else if( m_bHasFocus )
+        iState = DXUT_STATE_FOCUS;
+
+
+    float fBlendRate = ( iState == DXUT_STATE_PRESSED ) ? 0.0f : 0.8f;
+
+    // Background track layer
+    CDXUTElement* pElement = m_Elements.GetAt( 0 );
+    
+    // Blend current color
+    pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate );
+    m_pDialog->DrawSprite( pElement, &m_rcTrack );
+
+    // Up Arrow
+    pElement = m_Elements.GetAt( 1 );
+    
+    // Blend current color
+    pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate );
+    m_pDialog->DrawSprite( pElement, &m_rcUpButton );
+
+    // Down Arrow
+    pElement = m_Elements.GetAt( 2 );
+    
+    // Blend current color
+    pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate );
+    m_pDialog->DrawSprite( pElement, &m_rcDownButton );
+
+    // Thumb button
+    pElement = m_Elements.GetAt( 3 );
+    
+    // Blend current color
+    pElement->TextureColor.Blend( iState, fElapsedTime, fBlendRate );
+    m_pDialog->DrawSprite( pElement, &m_rcThumb );
+ 
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTScrollBar::SetTrackRange( int nStart, int nEnd )
+{
+    m_nStart = nStart; m_nEnd = nEnd;
+    Cap();
+    UpdateThumbRect();
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTScrollBar::Cap()  // Clips position at boundaries. Ensures it stays within legal range.
+{
+    if( m_nPosition < m_nStart ||
+        m_nEnd - m_nStart <= m_nPageSize )
+    {
+        m_nPosition = m_nStart;
+    }
+    else
+    if( m_nPosition + m_nPageSize > m_nEnd )
+        m_nPosition = m_nEnd - m_nPageSize;
+}
+
+//--------------------------------------------------------------------------------------
+// CDXUTListBox class
+//--------------------------------------------------------------------------------------
+
+//--------------------------------------------------------------------------------------
+CDXUTListBox::CDXUTListBox( CDXUTDialog *pDialog ) :
+    m_ScrollBar( pDialog )
+{
+    m_Type = DXUT_CONTROL_LISTBOX;
+    m_pDialog = pDialog;
+
+    m_dwStyle = 0;
+    m_nSBWidth = 16;
+    m_nSelected = -1;
+    m_nSelStart = 0;
+    m_bDrag = false;
+    m_nBorder = 6;
+    m_nMargin = 5;
+    m_nTextHeight = 0;
+}
+
+
+//--------------------------------------------------------------------------------------
+CDXUTListBox::~CDXUTListBox()
+{
+    RemoveAllItems();
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTListBox::UpdateRects()
+{
+    CDXUTControl::UpdateRects();
+
+    m_rcSelection = m_rcBoundingBox;
+    m_rcSelection.right -= m_nSBWidth;
+    InflateRect( &m_rcSelection, -m_nBorder, -m_nBorder );
+    m_rcText = m_rcSelection;
+    InflateRect( &m_rcText, -m_nMargin, 0 );
+
+    // Update the scrollbar's rects
+    m_ScrollBar.SetLocation( m_rcBoundingBox.right - m_nSBWidth, m_rcBoundingBox.top );
+    m_ScrollBar.SetSize( m_nSBWidth, m_height );
+    DXUTFontNode* pFontNode = m_pDialog->GetManager()->GetFontNode( m_Elements.GetAt( 0 )->iFont );
+    if( pFontNode && pFontNode->nHeight )
+    {
+        m_ScrollBar.SetPageSize( RectHeight( m_rcText ) / pFontNode->nHeight );
+
+        // The selected item may have been scrolled off the page.
+        // Ensure that it is in page again.
+        m_ScrollBar.ShowItem( m_nSelected );
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTListBox::AddItem( const WCHAR *wszText, void *pData )
+{
+    DXUTListBoxItem *pNewItem = new DXUTListBoxItem;
+    if( !pNewItem )
+        return E_OUTOFMEMORY;
+
+    StringCchCopy( pNewItem->strText, 256, wszText );
+    pNewItem->pData = pData;
+    SetRect( &pNewItem->rcActive, 0, 0, 0, 0 );
+    pNewItem->bSelected = false;
+
+    HRESULT hr = m_Items.Add( pNewItem );
+    if( FAILED(hr) )
+    {
+        SAFE_DELETE( pNewItem );
+    }
+    else
+    {
+        m_ScrollBar.SetTrackRange( 0, m_Items.GetSize() );
+    }
+
+    return hr;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTListBox::InsertItem( int nIndex, const WCHAR *wszText, void *pData )
+{
+    DXUTListBoxItem *pNewItem = new DXUTListBoxItem;
+    if( !pNewItem )
+        return E_OUTOFMEMORY;
+
+    StringCchCopy( pNewItem->strText, 256, wszText );
+    pNewItem->pData = pData;
+    SetRect( &pNewItem->rcActive, 0, 0, 0, 0 );
+    pNewItem->bSelected = false;
+
+    HRESULT hr = m_Items.Insert( nIndex, pNewItem );
+    if( SUCCEEDED( hr ) )
+        m_ScrollBar.SetTrackRange( 0, m_Items.GetSize() );
+    else
+        SAFE_DELETE( pNewItem );
+
+    return hr;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTListBox::RemoveItem( int nIndex )
+{
+    if( nIndex < 0 || nIndex >= (int)m_Items.GetSize() )
+        return;
+
+    DXUTListBoxItem *pItem = m_Items.GetAt( nIndex );
+
+    delete pItem;
+    m_Items.Remove( nIndex );
+    m_ScrollBar.SetTrackRange( 0, m_Items.GetSize() );
+    if( m_nSelected >= (int)m_Items.GetSize() )
+        m_nSelected = m_Items.GetSize() - 1;
+
+    m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this );
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTListBox::RemoveItemByText( WCHAR *wszText )
+{
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTListBox::RemoveItemByData( void *pData )
+{
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTListBox::RemoveAllItems()
+{
+    for( int i = 0; i < m_Items.GetSize(); ++i )
+    {
+        DXUTListBoxItem *pItem = m_Items.GetAt( i );
+        delete pItem;
+    }
+
+    m_Items.RemoveAll();
+    m_ScrollBar.SetTrackRange( 0, 1 );
+}
+
+
+//--------------------------------------------------------------------------------------
+DXUTListBoxItem *CDXUTListBox::GetItem( int nIndex )
+{
+    if( nIndex < 0 || nIndex >= (int)m_Items.GetSize() )
+        return NULL;
+
+    return m_Items[nIndex];
+}
+
+
+//--------------------------------------------------------------------------------------
+// For single-selection listbox, returns the index of the selected item.
+// For multi-selection, returns the first selected item after the nPreviousSelected position.
+// To search for the first selected item, the app passes -1 for nPreviousSelected.  For
+// subsequent searches, the app passes the returned index back to GetSelectedIndex as.
+// nPreviousSelected.
+// Returns -1 on error or if no item is selected.
+int CDXUTListBox::GetSelectedIndex( int nPreviousSelected )
+{
+    if( nPreviousSelected < -1 )
+        return -1;
+
+    if( m_dwStyle & MULTISELECTION )
+    {
+        // Multiple selection enabled. Search for the next item with the selected flag.
+        for( int i = nPreviousSelected + 1; i < (int)m_Items.GetSize(); ++i )
+        {
+            DXUTListBoxItem *pItem = m_Items.GetAt( i );
+
+            if( pItem->bSelected )
+                return i;
+        }
+
+        return -1;
+    }
+    else
+    {
+        // Single selection
+        return m_nSelected;
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTListBox::SelectItem( int nNewIndex )
+{
+    // If no item exists, do nothing.
+    if( m_Items.GetSize() == 0 )
+        return;
+
+    int nOldSelected = m_nSelected;
+
+    // Adjust m_nSelected
+    m_nSelected = nNewIndex;
+
+    // Perform capping
+    if( m_nSelected < 0 )
+        m_nSelected = 0;
+    if( m_nSelected >= (int)m_Items.GetSize() )
+        m_nSelected = m_Items.GetSize() - 1;
+
+    if( nOldSelected != m_nSelected )
+    {
+        if( m_dwStyle & MULTISELECTION )
+        {
+            m_Items[m_nSelected]->bSelected = true;
+        }
+
+        // Update selection start
+        m_nSelStart = m_nSelected;
+
+        // Adjust scroll bar
+        m_ScrollBar.ShowItem( m_nSelected );
+    }
+
+    m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this );
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTListBox::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    if( !m_bEnabled || !m_bVisible )
+        return false;
+
+    // Let the scroll bar have a chance to handle it first
+    if( m_ScrollBar.HandleKeyboard( uMsg, wParam, lParam ) )
+        return true;
+
+    switch( uMsg )
+    {
+        case WM_KEYDOWN:
+            switch( wParam )
+            {
+                case VK_UP:
+                case VK_DOWN:
+                case VK_NEXT:
+                case VK_PRIOR:
+                case VK_HOME:
+                case VK_END:
+                {
+                    // If no item exists, do nothing.
+                    if( m_Items.GetSize() == 0 )
+                        return true;
+
+                    int nOldSelected = m_nSelected;
+
+                    // Adjust m_nSelected
+                    switch( wParam )
+                    {
+                        case VK_UP: --m_nSelected; break;
+                        case VK_DOWN: ++m_nSelected; break;
+                        case VK_NEXT: m_nSelected += m_ScrollBar.GetPageSize() - 1; break;
+                        case VK_PRIOR: m_nSelected -= m_ScrollBar.GetPageSize() - 1; break;
+                        case VK_HOME: m_nSelected = 0; break;
+                        case VK_END: m_nSelected = m_Items.GetSize() - 1; break;
+                    }
+
+                    // Perform capping
+                    if( m_nSelected < 0 )
+                        m_nSelected = 0;
+                    if( m_nSelected >= (int)m_Items.GetSize() )
+                        m_nSelected = m_Items.GetSize() - 1;
+
+                    if( nOldSelected != m_nSelected )
+                    {
+                        if( m_dwStyle & MULTISELECTION )
+                        {
+                            // Multiple selection
+
+                            // Clear all selection
+                            for( int i = 0; i < (int)m_Items.GetSize(); ++i )
+                            {
+                                DXUTListBoxItem *pItem = m_Items[i];
+                                pItem->bSelected = false;
+                            }
+
+                            if( GetKeyState( VK_SHIFT ) < 0 )
+                            {
+                                // Select all items from m_nSelStart to
+                                // m_nSelected
+                                int nEnd = __max( m_nSelStart, m_nSelected );
+
+                                for( int n = __min( m_nSelStart, m_nSelected ); n <= nEnd; ++n )
+                                    m_Items[n]->bSelected = true;
+                            }
+                            else
+                            {
+                                m_Items[m_nSelected]->bSelected = true;
+
+                                // Update selection start
+                                m_nSelStart = m_nSelected;
+                            }
+                        } else
+                            m_nSelStart = m_nSelected;
+
+                        // Adjust scroll bar
+
+                        m_ScrollBar.ShowItem( m_nSelected );
+
+                        // Send notification
+
+                        m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this );
+                    }
+                    return true;
+                }
+
+                // Space is the hotkey for double-clicking an item.
+                //
+                case VK_SPACE:
+                    m_pDialog->SendEvent( EVENT_LISTBOX_ITEM_DBLCLK, true, this );
+                    return true;
+            }
+            break;
+    }
+
+    return false;
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTListBox::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam )
+{
+    if( !m_bEnabled || !m_bVisible )
+        return false;
+
+    // First acquire focus
+    if( WM_LBUTTONDOWN == uMsg )
+        if( !m_bHasFocus )
+            m_pDialog->RequestFocus( this );
+
+    // Let the scroll bar handle it first.
+    if( m_ScrollBar.HandleMouse( uMsg, pt, wParam, lParam ) )
+        return true;
+
+    switch( uMsg )
+    {
+        case WM_LBUTTONDOWN:
+        case WM_LBUTTONDBLCLK:
+            // Check for clicks in the text area
+            if( m_Items.GetSize() > 0 && PtInRect( &m_rcSelection, pt ) )
+            {
+                // Compute the index of the clicked item
+
+                int nClicked;
+                if( m_nTextHeight )
+                    nClicked = m_ScrollBar.GetTrackPos() + ( pt.y - m_rcText.top ) / m_nTextHeight;
+                else
+                    nClicked = -1;
+
+                // Only proceed if the click falls on top of an item.
+
+                if( nClicked >= m_ScrollBar.GetTrackPos() &&
+                    nClicked < (int)m_Items.GetSize() &&
+                    nClicked < m_ScrollBar.GetTrackPos() + m_ScrollBar.GetPageSize() )
+                {
+                    SetCapture( DXUTGetHWND() );
+                    m_bDrag = true;
+
+                    // If this is a double click, fire off an event and exit
+                    // since the first click would have taken care of the selection
+                    // updating.
+                    if( uMsg == WM_LBUTTONDBLCLK )
+                    {
+                        m_pDialog->SendEvent( EVENT_LISTBOX_ITEM_DBLCLK, true, this );
+                        return true;
+                    }
+
+                    m_nSelected = nClicked;
+                    if( !( wParam & MK_SHIFT ) )
+                        m_nSelStart = m_nSelected;
+
+                    // If this is a multi-selection listbox, update per-item
+                    // selection data.
+
+                    if( m_dwStyle & MULTISELECTION )
+                    {
+                        // Determine behavior based on the state of Shift and Ctrl
+
+                        DXUTListBoxItem *pSelItem = m_Items.GetAt( m_nSelected );
+                        if( ( wParam & (MK_SHIFT|MK_CONTROL) ) == MK_CONTROL )
+                        {
+                            // Control click. Reverse the selection of this item.
+
+                            pSelItem->bSelected = !pSelItem->bSelected;
+                        } else
+                        if( ( wParam & (MK_SHIFT|MK_CONTROL) ) == MK_SHIFT )
+                        {
+                            // Shift click. Set the selection for all items
+                            // from last selected item to the current item.
+                            // Clear everything else.
+
+                            int nBegin = __min( m_nSelStart, m_nSelected );
+                            int nEnd = __max( m_nSelStart, m_nSelected );
+
+                            for( int i = 0; i < nBegin; ++i )
+                            {
+                                DXUTListBoxItem *pItem = m_Items.GetAt( i );
+                                pItem->bSelected = false;
+                            }
+
+                            for( int i = nEnd + 1; i < (int)m_Items.GetSize(); ++i )
+                            {
+                                DXUTListBoxItem *pItem = m_Items.GetAt( i );
+                                pItem->bSelected = false;
+                            }
+
+                            for( int i = nBegin; i <= nEnd; ++i )
+                            {
+                                DXUTListBoxItem *pItem = m_Items.GetAt( i );
+                                pItem->bSelected = true;
+                            }
+                        } else
+                        if( ( wParam & (MK_SHIFT|MK_CONTROL) ) == ( MK_SHIFT|MK_CONTROL ) )
+                        {
+                            // Control-Shift-click.
+
+                            // The behavior is:
+                            //   Set all items from m_nSelStart to m_nSelected to
+                            //     the same state as m_nSelStart, not including m_nSelected.
+                            //   Set m_nSelected to selected.
+
+                            int nBegin = __min( m_nSelStart, m_nSelected );
+                            int nEnd = __max( m_nSelStart, m_nSelected );
+
+                            // The two ends do not need to be set here.
+
+                            bool bLastSelected = m_Items.GetAt( m_nSelStart )->bSelected;
+                            for( int i = nBegin + 1; i < nEnd; ++i )
+                            {
+                                DXUTListBoxItem *pItem = m_Items.GetAt( i );
+                                pItem->bSelected = bLastSelected;
+                            }
+
+                            pSelItem->bSelected = true;
+
+                            // Restore m_nSelected to the previous value
+                            // This matches the Windows behavior
+
+                            m_nSelected = m_nSelStart;
+                        } else
+                        {
+                            // Simple click.  Clear all items and select the clicked
+                            // item.
+
+
+                            for( int i = 0; i < (int)m_Items.GetSize(); ++i )
+                            {
+                                DXUTListBoxItem *pItem = m_Items.GetAt( i );
+                                pItem->bSelected = false;
+                            }
+
+                            pSelItem->bSelected = true;
+                        }
+                    }  // End of multi-selection case
+
+                    m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this );
+                }
+
+                return true;
+            }
+            break;
+
+        case WM_LBUTTONUP:
+        {
+            ReleaseCapture();
+            m_bDrag = false;
+
+            if( m_nSelected != -1 )
+            {
+                // Set all items between m_nSelStart and m_nSelected to
+                // the same state as m_nSelStart
+                int nEnd = __max( m_nSelStart, m_nSelected );
+
+                for( int n = __min( m_nSelStart, m_nSelected ) + 1; n < nEnd; ++n )
+                    m_Items[n]->bSelected = m_Items[m_nSelStart]->bSelected;
+                m_Items[m_nSelected]->bSelected = m_Items[m_nSelStart]->bSelected;
+
+                // If m_nSelStart and m_nSelected are not the same,
+                // the user has dragged the mouse to make a selection.
+                // Notify the application of this.
+                if( m_nSelStart != m_nSelected )
+                    m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this );
+
+                m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION_END, true, this );
+            }
+            return false;
+        }
+
+        case WM_MOUSEMOVE:
+            if( m_bDrag )
+            {
+                // Compute the index of the item below cursor
+
+                int nItem;
+                if( m_nTextHeight )
+                    nItem = m_ScrollBar.GetTrackPos() + ( pt.y - m_rcText.top ) / m_nTextHeight;
+                else
+                    nItem = -1;
+
+                // Only proceed if the cursor is on top of an item.
+
+                if( nItem >= (int)m_ScrollBar.GetTrackPos() &&
+                    nItem < (int)m_Items.GetSize() &&
+                    nItem < m_ScrollBar.GetTrackPos() + m_ScrollBar.GetPageSize() )
+                {
+                    m_nSelected = nItem;
+                    m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this );
+                } else
+                if( nItem < (int)m_ScrollBar.GetTrackPos() )
+                {
+                    // User drags the mouse above window top
+                    m_ScrollBar.Scroll( -1 );
+                    m_nSelected = m_ScrollBar.GetTrackPos();
+                    m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this );
+                } else
+                if( nItem >= m_ScrollBar.GetTrackPos() + m_ScrollBar.GetPageSize() )
+                {
+                    // User drags the mouse below window bottom
+                    m_ScrollBar.Scroll( 1 );
+                    m_nSelected = __min( (int)m_Items.GetSize(), m_ScrollBar.GetTrackPos() + m_ScrollBar.GetPageSize() ) - 1;
+                    m_pDialog->SendEvent( EVENT_LISTBOX_SELECTION, true, this );
+                }
+            }
+            break;
+
+        case WM_MOUSEWHEEL:
+        {
+            UINT uLines;
+            SystemParametersInfo( SPI_GETWHEELSCROLLLINES, 0, &uLines, 0 );
+            int nScrollAmount = int((short)HIWORD(wParam)) / WHEEL_DELTA * uLines;
+            m_ScrollBar.Scroll( -nScrollAmount );
+            return true;
+        }
+    }
+
+    return false;
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTListBox::MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    if( WM_CAPTURECHANGED == uMsg )
+    {
+        // The application just lost mouse capture. We may not have gotten
+        // the WM_MOUSEUP message, so reset m_bDrag here.
+        m_bDrag = false;
+    }
+
+    return false;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTListBox::Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime )
+{
+    if( m_bVisible == false )
+        return;
+
+    CDXUTElement* pElement = m_Elements.GetAt( 0 );
+    pElement->TextureColor.Blend( DXUT_STATE_NORMAL, fElapsedTime );
+    pElement->FontColor.Blend( DXUT_STATE_NORMAL, fElapsedTime );
+
+    CDXUTElement* pSelElement = m_Elements.GetAt( 1 );
+    pSelElement->TextureColor.Blend( DXUT_STATE_NORMAL, fElapsedTime );
+    pSelElement->FontColor.Blend( DXUT_STATE_NORMAL, fElapsedTime );
+
+    m_pDialog->DrawSprite( pElement, &m_rcBoundingBox );
+
+    // Render the text
+    if( m_Items.GetSize() > 0 )
+    {
+        // Find out the height of a single line of text
+        RECT rc = m_rcText;
+        RECT rcSel = m_rcSelection;
+        rc.bottom = rc.top + m_pDialog->GetManager()->GetFontNode( pElement->iFont )->nHeight;
+
+        // Update the line height formation
+        m_nTextHeight = rc.bottom - rc.top;
+
+        static bool bSBInit;
+        if( !bSBInit )
+        {
+            // Update the page size of the scroll bar
+            if( m_nTextHeight )
+                m_ScrollBar.SetPageSize( RectHeight( m_rcText ) / m_nTextHeight );
+            else
+                m_ScrollBar.SetPageSize( RectHeight( m_rcText ) );
+            bSBInit = true;
+        }
+
+        rc.right = m_rcText.right;
+        for( int i = m_ScrollBar.GetTrackPos(); i < (int)m_Items.GetSize(); ++i )
+        {
+            if( rc.bottom > m_rcText.bottom )
+                break;
+
+            DXUTListBoxItem *pItem = m_Items.GetAt( i );
+
+            // Determine if we need to render this item with the
+            // selected element.
+            bool bSelectedStyle = false;
+
+            if( !( m_dwStyle & MULTISELECTION ) && i == m_nSelected )
+                bSelectedStyle = true;
+            else
+            if( m_dwStyle & MULTISELECTION )
+            {
+                if( m_bDrag &&
+                    ( ( i >= m_nSelected && i < m_nSelStart ) ||
+                      ( i <= m_nSelected && i > m_nSelStart ) ) )
+                    bSelectedStyle = m_Items[m_nSelStart]->bSelected;
+                else
+                if( pItem->bSelected )
+                    bSelectedStyle = true;
+            }
+
+            if( bSelectedStyle )
+            {
+                rcSel.top = rc.top; rcSel.bottom = rc.bottom;
+                m_pDialog->DrawSprite( pSelElement, &rcSel );
+                m_pDialog->DrawText( pItem->strText, pSelElement, &rc );
+            }
+            else
+                m_pDialog->DrawText( pItem->strText, pElement, &rc );
+
+            OffsetRect( &rc, 0, m_nTextHeight );
+        }
+    }
+
+    // Render the scroll bar
+
+    m_ScrollBar.Render( pd3dDevice, fElapsedTime );
+}
+
+
+// Static member initialization
+HINSTANCE CUniBuffer::s_hDll = NULL;
+HRESULT (WINAPI *CUniBuffer::_ScriptApplyDigitSubstitution)( const SCRIPT_DIGITSUBSTITUTE*, SCRIPT_CONTROL*, SCRIPT_STATE* ) = Dummy_ScriptApplyDigitSubstitution;
+HRESULT (WINAPI *CUniBuffer::_ScriptStringAnalyse)( HDC, const void *, int, int, int, DWORD, int, SCRIPT_CONTROL*, SCRIPT_STATE*, const int*, SCRIPT_TABDEF*, const BYTE*, SCRIPT_STRING_ANALYSIS* ) = Dummy_ScriptStringAnalyse;
+HRESULT (WINAPI *CUniBuffer::_ScriptStringCPtoX)( SCRIPT_STRING_ANALYSIS, int, BOOL, int* ) = Dummy_ScriptStringCPtoX;
+HRESULT (WINAPI *CUniBuffer::_ScriptStringXtoCP)( SCRIPT_STRING_ANALYSIS, int, int*, int* ) = Dummy_ScriptStringXtoCP;
+HRESULT (WINAPI *CUniBuffer::_ScriptStringFree)( SCRIPT_STRING_ANALYSIS* ) = Dummy_ScriptStringFree;
+const SCRIPT_LOGATTR* (WINAPI *CUniBuffer::_ScriptString_pLogAttr)( SCRIPT_STRING_ANALYSIS ) = Dummy_ScriptString_pLogAttr;
+const int* (WINAPI *CUniBuffer::_ScriptString_pcOutChars)( SCRIPT_STRING_ANALYSIS ) = Dummy_ScriptString_pcOutChars;
+bool CDXUTEditBox::s_bHideCaret;   // If true, we don't render the caret.
+
+
+
+//--------------------------------------------------------------------------------------
+// CDXUTEditBox class
+//--------------------------------------------------------------------------------------
+
+// When scrolling, EDITBOX_SCROLLEXTENT is reciprocal of the amount to scroll.
+// If EDITBOX_SCROLLEXTENT = 4, then we scroll 1/4 of the control each time.
+#define EDITBOX_SCROLLEXTENT 4
+
+//--------------------------------------------------------------------------------------
+CDXUTEditBox::CDXUTEditBox( CDXUTDialog *pDialog )
+{
+    m_Type = DXUT_CONTROL_EDITBOX;
+    m_pDialog = pDialog;
+
+    m_nBorder = 5;  // Default border width
+    m_nSpacing = 4;  // Default spacing
+
+    m_bCaretOn = true;
+    m_dfBlink = GetCaretBlinkTime() * 0.001f;
+    m_dfLastBlink = DXUTGetGlobalTimer()->GetAbsoluteTime();
+    s_bHideCaret = false;
+    m_nFirstVisible = 0;
+    m_TextColor = D3DCOLOR_ARGB( 255, 16, 16, 16 );
+    m_SelTextColor = D3DCOLOR_ARGB( 255, 255, 255, 255 );
+    m_SelBkColor = D3DCOLOR_ARGB( 255, 40, 50, 92 );
+    m_CaretColor = D3DCOLOR_ARGB( 255, 0, 0, 0 );
+    m_nCaret = m_nSelStart = 0;
+    m_bInsertMode = true;
+
+    m_bMouseDrag = false;
+}
+
+
+//--------------------------------------------------------------------------------------
+CDXUTEditBox::~CDXUTEditBox()
+{
+}
+
+
+//--------------------------------------------------------------------------------------
+// PlaceCaret: Set the caret to a character position, and adjust the scrolling if
+//             necessary.
+//--------------------------------------------------------------------------------------
+void CDXUTEditBox::PlaceCaret( int nCP )
+{
+    assert( nCP >= 0 && nCP <= m_Buffer.GetTextSize() );
+    m_nCaret = nCP;
+
+    // Obtain the X offset of the character.
+    int nX1st, nX, nX2;
+    m_Buffer.CPtoX( m_nFirstVisible, FALSE, &nX1st );  // 1st visible char
+    m_Buffer.CPtoX( nCP, FALSE, &nX );  // LEAD
+    // If nCP is the NULL terminator, get the leading edge instead of trailing.
+    if( nCP == m_Buffer.GetTextSize() )
+        nX2 = nX;
+    else
+        m_Buffer.CPtoX( nCP, TRUE, &nX2 );  // TRAIL
+
+    // If the left edge of the char is smaller than the left edge of the 1st visible char,
+    // we need to scroll left until this char is visible.
+    if( nX < nX1st )
+    {
+        // Simply make the first visible character the char at the new caret position.
+        m_nFirstVisible = nCP;
+    }
+    else
+    // If the right of the character is bigger than the offset of the control's
+    // right edge, we need to scroll right to this character.
+    if( nX2 > nX1st + RectWidth( m_rcText ) )
+    {
+        // Compute the X of the new left-most pixel
+        int nXNewLeft = nX2 - RectWidth( m_rcText );
+
+        // Compute the char position of this character
+        int nCPNew1st, nNewTrail;
+        m_Buffer.XtoCP( nXNewLeft, &nCPNew1st, &nNewTrail );
+
+        // If this coordinate is not on a character border,
+        // start from the next character so that the caret
+        // position does not fall outside the text rectangle.
+        int nXNew1st;
+        m_Buffer.CPtoX( nCPNew1st, FALSE, &nXNew1st );
+        if( nXNew1st < nXNewLeft )
+            ++nCPNew1st;
+
+        m_nFirstVisible = nCPNew1st;
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTEditBox::ClearText()
+{
+    m_Buffer.Clear();
+    m_nFirstVisible = 0;
+    PlaceCaret( 0 );
+    m_nSelStart = 0;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTEditBox::SetText( LPCWSTR wszText, bool bSelected )
+{
+    assert( wszText != NULL );
+
+    m_Buffer.SetText( wszText );
+    m_nFirstVisible = 0;
+    // Move the caret to the end of the text
+    PlaceCaret( m_Buffer.GetTextSize() );
+    m_nSelStart = bSelected ? 0 : m_nCaret;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CDXUTEditBox::GetTextCopy( LPWSTR strDest, UINT bufferCount )
+{
+    assert( strDest );
+
+    StringCchCopy( strDest, bufferCount, m_Buffer.GetBuffer() );
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTEditBox::DeleteSelectionText()
+{
+    int nFirst = __min( m_nCaret, m_nSelStart );
+    int nLast = __max( m_nCaret, m_nSelStart );
+    // Update caret and selection
+    PlaceCaret( nFirst );
+    m_nSelStart = m_nCaret;
+    // Remove the characters
+    for( int i = nFirst; i < nLast; ++i )
+        m_Buffer.RemoveChar( nFirst );
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTEditBox::UpdateRects()
+{
+    CDXUTControl::UpdateRects();
+
+    // Update the text rectangle
+    m_rcText = m_rcBoundingBox;
+    // First inflate by m_nBorder to compute render rects
+    InflateRect( &m_rcText, -m_nBorder, -m_nBorder );
+
+    // Update the render rectangles
+    m_rcRender[0] = m_rcText;
+    SetRect( &m_rcRender[1], m_rcBoundingBox.left, m_rcBoundingBox.top, m_rcText.left, m_rcText.top );
+    SetRect( &m_rcRender[2], m_rcText.left, m_rcBoundingBox.top, m_rcText.right, m_rcText.top );
+    SetRect( &m_rcRender[3], m_rcText.right, m_rcBoundingBox.top, m_rcBoundingBox.right, m_rcText.top );
+    SetRect( &m_rcRender[4], m_rcBoundingBox.left, m_rcText.top, m_rcText.left, m_rcText.bottom );
+    SetRect( &m_rcRender[5], m_rcText.right, m_rcText.top, m_rcBoundingBox.right, m_rcText.bottom );
+    SetRect( &m_rcRender[6], m_rcBoundingBox.left, m_rcText.bottom, m_rcText.left, m_rcBoundingBox.bottom );
+    SetRect( &m_rcRender[7], m_rcText.left, m_rcText.bottom, m_rcText.right, m_rcBoundingBox.bottom );
+    SetRect( &m_rcRender[8], m_rcText.right, m_rcText.bottom, m_rcBoundingBox.right, m_rcBoundingBox.bottom );
+
+    // Inflate further by m_nSpacing
+    InflateRect( &m_rcText, -m_nSpacing, -m_nSpacing );
+}
+
+
+void CDXUTEditBox::CopyToClipboard()
+{
+    // Copy the selection text to the clipboard
+    if( m_nCaret != m_nSelStart && OpenClipboard( NULL ) )
+    {
+        EmptyClipboard();
+
+        HGLOBAL hBlock = GlobalAlloc( GMEM_MOVEABLE, sizeof(WCHAR) * ( m_Buffer.GetTextSize() + 1 ) );
+        if( hBlock )
+        {
+            WCHAR *pwszText = (WCHAR*)GlobalLock( hBlock );
+            if( pwszText )
+            {
+                int nFirst = __min( m_nCaret, m_nSelStart );
+                int nLast = __max( m_nCaret, m_nSelStart );
+                if( nLast - nFirst > 0 )
+                    CopyMemory( pwszText, m_Buffer.GetBuffer() + nFirst, (nLast - nFirst) * sizeof(WCHAR) );
+                pwszText[nLast - nFirst] = L'\0';  // Terminate it
+                GlobalUnlock( hBlock );
+            }
+            SetClipboardData( CF_UNICODETEXT, hBlock );
+        }
+        CloseClipboard();
+        // We must not free the object until CloseClipboard is called.
+        if( hBlock )
+            GlobalFree( hBlock );
+    }
+}
+
+
+void CDXUTEditBox::PasteFromClipboard()
+{
+    DeleteSelectionText();
+
+    if( OpenClipboard( NULL ) )
+    {
+        HANDLE handle = GetClipboardData( CF_UNICODETEXT );
+        if( handle )
+        {
+            // Convert the ANSI string to Unicode, then
+            // insert to our buffer.
+            WCHAR *pwszText = (WCHAR*)GlobalLock( handle );
+            if( pwszText )
+            {
+                // Copy all characters up to null.
+                if( m_Buffer.InsertString( m_nCaret, pwszText ) )
+                    PlaceCaret( m_nCaret + lstrlenW( pwszText ) );
+                m_nSelStart = m_nCaret;
+                GlobalUnlock( handle );
+            }
+        }
+        CloseClipboard();
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTEditBox::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    if( !m_bEnabled || !m_bVisible )
+        return false;
+
+    bool bHandled = false;
+
+    switch( uMsg )
+    {
+        case WM_KEYDOWN:
+        {
+            switch( wParam )
+            {
+                case VK_TAB:
+                    // We don't process Tab in case keyboard input is enabled and the user
+                    // wishes to Tab to other controls.
+                    break;
+
+                case VK_HOME:
+                    PlaceCaret( 0 );
+                    if( GetKeyState( VK_SHIFT ) >= 0 )
+                        // Shift is not down. Update selection
+                        // start along with the caret.
+                        m_nSelStart = m_nCaret;
+                    ResetCaretBlink();
+                    bHandled = true;
+                    break;
+
+                case VK_END:
+                    PlaceCaret( m_Buffer.GetTextSize() );
+                    if( GetKeyState( VK_SHIFT ) >= 0 )
+                        // Shift is not down. Update selection
+                        // start along with the caret.
+                        m_nSelStart = m_nCaret;
+                    ResetCaretBlink();
+                    bHandled = true;
+                    break;
+
+                case VK_INSERT:
+                    if( GetKeyState( VK_CONTROL ) < 0 )
+                    {
+                        // Control Insert. Copy to clipboard
+                        CopyToClipboard();
+                    } else
+                    if( GetKeyState( VK_SHIFT ) < 0 )
+                    {
+                        // Shift Insert. Paste from clipboard
+                        PasteFromClipboard();
+                    } else
+                    {
+                        // Toggle caret insert mode
+                        m_bInsertMode = !m_bInsertMode;
+                    }
+                    break;
+
+                case VK_DELETE:
+                    // Check if there is a text selection.
+                    if( m_nCaret != m_nSelStart )
+                    {
+                        DeleteSelectionText();
+                        m_pDialog->SendEvent( EVENT_EDITBOX_CHANGE, true, this );
+                    }
+                    else
+                    {
+                        // Deleting one character
+                        if( m_Buffer.RemoveChar( m_nCaret ) )
+                            m_pDialog->SendEvent( EVENT_EDITBOX_CHANGE, true, this );
+                    }
+                    ResetCaretBlink();
+                    bHandled = true;
+                    break;
+
+                case VK_LEFT:
+                    if( GetKeyState( VK_CONTROL ) < 0 )
+                    {
+                        // Control is down. Move the caret to a new item
+                        // instead of a character.
+                        m_Buffer.GetPriorItemPos( m_nCaret, &m_nCaret );
+                        PlaceCaret( m_nCaret );
+                    }
+                    else
+                    if( m_nCaret > 0 )
+                        PlaceCaret( m_nCaret - 1 );
+                    if( GetKeyState( VK_SHIFT ) >= 0 )
+                        // Shift is not down. Update selection
+                        // start along with the caret.
+                        m_nSelStart = m_nCaret;
+                    ResetCaretBlink();
+                    bHandled = true;
+                    break;
+
+                case VK_RIGHT:
+                    if( GetKeyState( VK_CONTROL ) < 0 )
+                    {
+                        // Control is down. Move the caret to a new item
+                        // instead of a character.
+                        m_Buffer.GetNextItemPos( m_nCaret, &m_nCaret );
+                        PlaceCaret( m_nCaret );
+                    }
+                    else
+                    if( m_nCaret < m_Buffer.GetTextSize() )
+                        PlaceCaret( m_nCaret + 1 );
+                    if( GetKeyState( VK_SHIFT ) >= 0 )
+                        // Shift is not down. Update selection
+                        // start along with the caret.
+                        m_nSelStart = m_nCaret;
+                    ResetCaretBlink();
+                    bHandled = true;
+                    break;
+
+                case VK_UP:
+                case VK_DOWN:
+                    // Trap up and down arrows so that the dialog
+                    // does not switch focus to another control.
+                    bHandled = true;
+                    break;
+
+                default:
+                    bHandled = wParam != VK_ESCAPE;  // Let the application handle Esc.
+            }
+        }
+    }
+    return bHandled;
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTEditBox::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam )
+{
+    if( !m_bEnabled || !m_bVisible )
+        return false;
+
+    switch( uMsg )
+    {
+        case WM_LBUTTONDOWN:
+        case WM_LBUTTONDBLCLK:
+        {
+            if( !m_bHasFocus )
+                m_pDialog->RequestFocus( this );
+
+            if( !ContainsPoint( pt ) )
+                return false;
+
+            m_bMouseDrag = true;
+            SetCapture( DXUTGetHWND() );
+            // Determine the character corresponding to the coordinates.
+            int nCP, nTrail, nX1st;
+            m_Buffer.CPtoX( m_nFirstVisible, FALSE, &nX1st );  // X offset of the 1st visible char
+            if( SUCCEEDED( m_Buffer.XtoCP( pt.x - m_rcText.left + nX1st, &nCP, &nTrail ) ) )
+            {
+                // Cap at the NULL character.
+                if( nTrail && nCP < m_Buffer.GetTextSize() )
+                    PlaceCaret( nCP + 1 );
+                else
+                    PlaceCaret( nCP );
+                m_nSelStart = m_nCaret;
+                ResetCaretBlink();
+            }
+            return true;
+        }
+
+        case WM_LBUTTONUP:
+            ReleaseCapture();
+            m_bMouseDrag = false;
+            break;
+
+        case WM_MOUSEMOVE:
+            if( m_bMouseDrag )
+            {
+                // Determine the character corresponding to the coordinates.
+                int nCP, nTrail, nX1st;
+                m_Buffer.CPtoX( m_nFirstVisible, FALSE, &nX1st );  // X offset of the 1st visible char
+                if( SUCCEEDED( m_Buffer.XtoCP( pt.x - m_rcText.left + nX1st, &nCP, &nTrail ) ) )
+                {
+                    // Cap at the NULL character.
+                    if( nTrail && nCP < m_Buffer.GetTextSize() )
+                        PlaceCaret( nCP + 1 );
+                    else
+                        PlaceCaret( nCP );
+                }
+            }
+            break;
+    }
+
+    return false;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTEditBox::OnFocusIn()
+{
+    CDXUTControl::OnFocusIn();
+
+    ResetCaretBlink();
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTEditBox::MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    if( !m_bEnabled || !m_bVisible )
+        return false;
+
+    switch( uMsg )
+    {
+        case WM_CHAR:
+        {
+            switch( (WCHAR)wParam )
+            {
+                // Backspace
+                case VK_BACK:
+                {
+                    // If there's a selection, treat this
+                    // like a delete key.
+                    if( m_nCaret != m_nSelStart )
+                    {
+                        DeleteSelectionText();
+                        m_pDialog->SendEvent( EVENT_EDITBOX_CHANGE, true, this );
+                    }
+                    else
+                    if( m_nCaret > 0 )
+                    {
+                        // Move the caret, then delete the char.
+                        PlaceCaret( m_nCaret - 1 );
+                        m_nSelStart = m_nCaret;
+                        m_Buffer.RemoveChar( m_nCaret );
+                        m_pDialog->SendEvent( EVENT_EDITBOX_CHANGE, true, this );
+                    }
+                    ResetCaretBlink();
+                    break;
+                }
+
+                case 24:        // Ctrl-X Cut
+                case VK_CANCEL: // Ctrl-C Copy
+                {
+                    CopyToClipboard();
+
+                    // If the key is Ctrl-X, delete the selection too.
+                    if( (WCHAR)wParam == 24 )
+                    {
+                        DeleteSelectionText();
+                        m_pDialog->SendEvent( EVENT_EDITBOX_CHANGE, true, this );
+                    }
+
+                    break;
+                }
+
+                // Ctrl-V Paste
+                case 22:
+                {
+                    PasteFromClipboard();
+                    m_pDialog->SendEvent( EVENT_EDITBOX_CHANGE, true, this );
+                    break;
+                }
+
+                // Ctrl-A Select All
+                case 1:
+                    if( m_nSelStart == m_nCaret )
+                    {
+                        m_nSelStart = 0;
+                        PlaceCaret( m_Buffer.GetTextSize() );
+                    }
+                    break;
+
+                case VK_RETURN:
+                    // Invoke the callback when the user presses Enter.
+                    m_pDialog->SendEvent( EVENT_EDITBOX_STRING, true, this );
+                    break;
+
+                // Junk characters we don't want in the string
+                case 26:  // Ctrl Z
+                case 2:   // Ctrl B
+                case 14:  // Ctrl N
+                case 19:  // Ctrl S
+                case 4:   // Ctrl D
+                case 6:   // Ctrl F
+                case 7:   // Ctrl G
+                case 10:  // Ctrl J
+                case 11:  // Ctrl K
+                case 12:  // Ctrl L
+                case 17:  // Ctrl Q
+                case 23:  // Ctrl W
+                case 5:   // Ctrl E
+                case 18:  // Ctrl R
+                case 20:  // Ctrl T
+                case 25:  // Ctrl Y
+                case 21:  // Ctrl U
+                case 9:   // Ctrl I
+                case 15:  // Ctrl O
+                case 16:  // Ctrl P
+                case 27:  // Ctrl [
+                case 29:  // Ctrl ]
+                case 28:  // Ctrl \ 
+                    break;
+
+                default:
+                {
+                    // If there's a selection and the user
+                    // starts to type, the selection should
+                    // be deleted.
+                    if( m_nCaret != m_nSelStart )
+                        DeleteSelectionText();
+
+                    // If we are in overwrite mode and there is already
+                    // a char at the caret's position, simply replace it.
+                    // Otherwise, we insert the char as normal.
+                    if( !m_bInsertMode && m_nCaret < m_Buffer.GetTextSize() )
+                    {
+                        m_Buffer[m_nCaret] = (WCHAR)wParam;
+                        PlaceCaret( m_nCaret + 1 );
+                        m_nSelStart = m_nCaret;
+                    } else
+                    {
+                        // Insert the char
+                        if( m_Buffer.InsertChar( m_nCaret, (WCHAR)wParam ) )
+                        {
+                            PlaceCaret( m_nCaret + 1 );
+                            m_nSelStart = m_nCaret;
+                        }
+                    }
+                    ResetCaretBlink();
+                    m_pDialog->SendEvent( EVENT_EDITBOX_CHANGE, true, this );
+                }
+            }
+            return true;
+        }
+    }
+    return false;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTEditBox::Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime )
+{
+    if( m_bVisible == false )
+        return;
+
+    HRESULT hr;
+    int nSelStartX = 0, nCaretX = 0;  // Left and right X cordinates of the selection region
+
+    CDXUTElement* pElement = GetElement( 0 );
+    if( pElement )
+    {
+        m_Buffer.SetFontNode( m_pDialog->GetFont( pElement->iFont ) );
+        PlaceCaret( m_nCaret );  // Call PlaceCaret now that we have the font info (node),
+                                 // so that scrolling can be handled.
+    }
+
+    // Render the control graphics
+    for( int e = 0; e < 9; ++e )
+    {
+        pElement = m_Elements.GetAt( e );
+        pElement->TextureColor.Blend( DXUT_STATE_NORMAL, fElapsedTime );
+
+        m_pDialog->DrawSprite( pElement, &m_rcRender[e] );
+    }
+
+    //
+    // Compute the X coordinates of the first visible character.
+    //
+    int nXFirst;
+    m_Buffer.CPtoX( m_nFirstVisible, FALSE, &nXFirst );
+
+    //
+    // Compute the X coordinates of the selection rectangle
+    //
+    hr = m_Buffer.CPtoX( m_nCaret, FALSE, &nCaretX );
+    if( m_nCaret != m_nSelStart )
+        hr = m_Buffer.CPtoX( m_nSelStart, FALSE, &nSelStartX );
+    else
+        nSelStartX = nCaretX;
+
+    //
+    // Render the selection rectangle
+    //
+    RECT rcSelection;  // Make this available for rendering selected text
+    if( m_nCaret != m_nSelStart )
+    {
+        int nSelLeftX = nCaretX, nSelRightX = nSelStartX;
+        // Swap if left is bigger than right
+        if( nSelLeftX > nSelRightX )
+            { int nTemp = nSelLeftX; nSelLeftX = nSelRightX; nSelRightX = nTemp; }
+
+        SetRect( &rcSelection, nSelLeftX, m_rcText.top, nSelRightX, m_rcText.bottom );
+        OffsetRect( &rcSelection, m_rcText.left - nXFirst, 0 );
+        IntersectRect( &rcSelection, &m_rcText, &rcSelection );
+        m_pDialog->DrawRect( &rcSelection, m_SelBkColor );
+    }
+
+    //
+    // Render the text
+    //
+    // Element 0 for text
+    m_Elements.GetAt( 0 )->FontColor.Current = m_TextColor;
+    m_pDialog->DrawText( m_Buffer.GetBuffer() + m_nFirstVisible, m_Elements.GetAt( 0 ), &m_rcText );
+
+    // Render the selected text
+    if( m_nCaret != m_nSelStart )
+    {
+        int nFirstToRender = __max( m_nFirstVisible, __min( m_nSelStart, m_nCaret ) );
+        int nNumChatToRender = __max( m_nSelStart, m_nCaret ) - nFirstToRender;
+        m_Elements.GetAt( 0 )->FontColor.Current = m_SelTextColor;
+        m_pDialog->DrawText( m_Buffer.GetBuffer() + nFirstToRender,
+                             m_Elements.GetAt( 0 ), &rcSelection, false, nNumChatToRender );
+    }
+
+    //
+    // Blink the caret
+    //
+    if( DXUTGetGlobalTimer()->GetAbsoluteTime() - m_dfLastBlink >= m_dfBlink )
+    {
+        m_bCaretOn = !m_bCaretOn;
+        m_dfLastBlink = DXUTGetGlobalTimer()->GetAbsoluteTime();
+    }
+
+    //
+    // Render the caret if this control has the focus
+    //
+    if( m_bHasFocus && m_bCaretOn && !s_bHideCaret )
+    {
+        // Start the rectangle with insert mode caret
+        RECT rcCaret = { m_rcText.left - nXFirst + nCaretX - 1, m_rcText.top,
+                         m_rcText.left - nXFirst + nCaretX + 1, m_rcText.bottom };
+
+        // If we are in overwrite mode, adjust the caret rectangle
+        // to fill the entire character.
+        if( !m_bInsertMode )
+        {
+            // Obtain the right edge X coord of the current character
+            int nRightEdgeX;
+            m_Buffer.CPtoX( m_nCaret, TRUE, &nRightEdgeX );
+            rcCaret.right = m_rcText.left - nXFirst + nRightEdgeX;
+        }
+
+        m_pDialog->DrawRect( &rcCaret, m_CaretColor );
+    }
+}
+
+
+#define IN_FLOAT_CHARSET( c ) \
+    ( (c) == L'-' || (c) == L'.' || ( (c) >= L'0' && (c) <= L'9' ) )
+
+void CDXUTEditBox::ParseFloatArray( float *pNumbers, int nCount )
+{
+    int nWritten = 0;  // Number of floats written
+    const WCHAR *pToken, *pEnd;
+    WCHAR wszToken[60];
+
+    pToken = m_Buffer.GetBuffer();
+    while( nWritten < nCount && *pToken != L'\0' )
+    {
+        // Skip leading spaces
+        while( *pToken == L' ' )
+            ++pToken;
+
+        if( *pToken == L'\0' )
+            break;
+
+        // Locate the end of number
+        pEnd = pToken;
+        while( IN_FLOAT_CHARSET( *pEnd ) )
+            ++pEnd;
+
+        // Copy the token to our buffer
+        int nTokenLen = __min( sizeof(wszToken) / sizeof(wszToken[0]) - 1, int(pEnd - pToken) );
+        StringCchCopy( wszToken, nTokenLen, pToken );
+        *pNumbers = (float)wcstod( wszToken, NULL );
+        ++nWritten;
+        ++pNumbers;
+        pToken = pEnd;
+    }
+}
+
+
+void CDXUTEditBox::SetTextFloatArray( const float *pNumbers, int nCount )
+{
+    WCHAR wszBuffer[512] = {0};
+    WCHAR wszTmp[64];
+    
+    if( pNumbers == NULL )
+        return;
+        
+    for( int i = 0; i < nCount; ++i )
+    {
+        StringCchPrintf( wszTmp, 64, L"%.4f ", pNumbers[i] );
+        StringCchCat( wszBuffer, 512, wszTmp );
+    }
+
+    // Don't want the last space
+    if( nCount > 0 && wcslen(wszBuffer) > 0 )
+        wszBuffer[wcslen(wszBuffer)-1] = 0;
+
+    SetText( wszBuffer );
+}
+
+
+//--------------------------------------------------------------------------------------
+// CDXUTIMEEditBox class
+//--------------------------------------------------------------------------------------
+// IME constants
+#define CHT_IMEFILENAME1    "TINTLGNT.IME" // New Phonetic
+#define CHT_IMEFILENAME2    "CINTLGNT.IME" // New Chang Jie
+#define CHT_IMEFILENAME3    "MSTCIPHA.IME" // Phonetic 5.1
+#define CHS_IMEFILENAME1    "PINTLGNT.IME" // MSPY1.5/2/3
+#define CHS_IMEFILENAME2    "MSSCIPYA.IME" // MSPY3 for OfficeXP
+
+#define LANG_CHT            MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL)
+#define LANG_CHS            MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED)
+#define _CHT_HKL            ( (HKL)(INT_PTR)0xE0080404 ) // New Phonetic
+#define _CHT_HKL2           ( (HKL)(INT_PTR)0xE0090404 ) // New Chang Jie
+#define _CHS_HKL            ( (HKL)(INT_PTR)0xE00E0804 ) // MSPY
+#define MAKEIMEVERSION( major, minor )      ( (DWORD)( ( (BYTE)( major ) << 24 ) | ( (BYTE)( minor ) << 16 ) ) )
+
+#define IMEID_CHT_VER42 ( LANG_CHT | MAKEIMEVERSION( 4, 2 ) )   // New(Phonetic/ChanJie)IME98  : 4.2.x.x // Win98
+#define IMEID_CHT_VER43 ( LANG_CHT | MAKEIMEVERSION( 4, 3 ) )   // New(Phonetic/ChanJie)IME98a : 4.3.x.x // Win2k
+#define IMEID_CHT_VER44 ( LANG_CHT | MAKEIMEVERSION( 4, 4 ) )   // New ChanJie IME98b          : 4.4.x.x // WinXP
+#define IMEID_CHT_VER50 ( LANG_CHT | MAKEIMEVERSION( 5, 0 ) )   // New(Phonetic/ChanJie)IME5.0 : 5.0.x.x // WinME
+#define IMEID_CHT_VER51 ( LANG_CHT | MAKEIMEVERSION( 5, 1 ) )   // New(Phonetic/ChanJie)IME5.1 : 5.1.x.x // IME2002(w/OfficeXP)
+#define IMEID_CHT_VER52 ( LANG_CHT | MAKEIMEVERSION( 5, 2 ) )   // New(Phonetic/ChanJie)IME5.2 : 5.2.x.x // IME2002a(w/Whistler)
+#define IMEID_CHT_VER60 ( LANG_CHT | MAKEIMEVERSION( 6, 0 ) )   // New(Phonetic/ChanJie)IME6.0 : 6.0.x.x // IME XP(w/WinXP SP1)
+#define IMEID_CHS_VER41 ( LANG_CHS | MAKEIMEVERSION( 4, 1 ) )   // MSPY1.5  // SCIME97 or MSPY1.5 (w/Win98, Office97)
+#define IMEID_CHS_VER42 ( LANG_CHS | MAKEIMEVERSION( 4, 2 ) )   // MSPY2    // Win2k/WinME
+#define IMEID_CHS_VER53 ( LANG_CHS | MAKEIMEVERSION( 5, 3 ) )   // MSPY3    // WinXP
+
+// Function pointers
+INPUTCONTEXT* (WINAPI * CDXUTIMEEditBox::_ImmLockIMC)( HIMC ) = CDXUTIMEEditBox::Dummy_ImmLockIMC;
+BOOL (WINAPI * CDXUTIMEEditBox::_ImmUnlockIMC)( HIMC ) = CDXUTIMEEditBox::Dummy_ImmUnlockIMC;
+LPVOID (WINAPI * CDXUTIMEEditBox::_ImmLockIMCC)( HIMCC ) = CDXUTIMEEditBox::Dummy_ImmLockIMCC;
+BOOL (WINAPI * CDXUTIMEEditBox::_ImmUnlockIMCC)( HIMCC ) = CDXUTIMEEditBox::Dummy_ImmUnlockIMCC;
+BOOL (WINAPI * CDXUTIMEEditBox::_ImmDisableTextFrameService)( DWORD ) = CDXUTIMEEditBox::Dummy_ImmDisableTextFrameService;
+LONG (WINAPI * CDXUTIMEEditBox::_ImmGetCompositionStringW)( HIMC, DWORD, LPVOID, DWORD ) = CDXUTIMEEditBox::Dummy_ImmGetCompositionStringW;
+DWORD (WINAPI * CDXUTIMEEditBox::_ImmGetCandidateListW)( HIMC, DWORD, LPCANDIDATELIST, DWORD ) = CDXUTIMEEditBox::Dummy_ImmGetCandidateListW;
+HIMC (WINAPI * CDXUTIMEEditBox::_ImmGetContext)( HWND ) = CDXUTIMEEditBox::Dummy_ImmGetContext;
+BOOL (WINAPI * CDXUTIMEEditBox::_ImmReleaseContext)( HWND, HIMC ) = CDXUTIMEEditBox::Dummy_ImmReleaseContext;
+HIMC (WINAPI * CDXUTIMEEditBox::_ImmAssociateContext)( HWND, HIMC ) = CDXUTIMEEditBox::Dummy_ImmAssociateContext;
+BOOL (WINAPI * CDXUTIMEEditBox::_ImmGetOpenStatus)( HIMC ) = CDXUTIMEEditBox::Dummy_ImmGetOpenStatus;
+BOOL (WINAPI * CDXUTIMEEditBox::_ImmSetOpenStatus)( HIMC, BOOL ) = CDXUTIMEEditBox::Dummy_ImmSetOpenStatus;
+BOOL (WINAPI * CDXUTIMEEditBox::_ImmGetConversionStatus)( HIMC, LPDWORD, LPDWORD ) = CDXUTIMEEditBox::Dummy_ImmGetConversionStatus;
+HWND (WINAPI * CDXUTIMEEditBox::_ImmGetDefaultIMEWnd)( HWND ) = CDXUTIMEEditBox::Dummy_ImmGetDefaultIMEWnd;
+UINT (WINAPI * CDXUTIMEEditBox::_ImmGetIMEFileNameA)( HKL, LPSTR, UINT ) = CDXUTIMEEditBox::Dummy_ImmGetIMEFileNameA;
+UINT (WINAPI * CDXUTIMEEditBox::_ImmGetVirtualKey)( HWND ) = CDXUTIMEEditBox::Dummy_ImmGetVirtualKey;
+BOOL (WINAPI * CDXUTIMEEditBox::_ImmNotifyIME)( HIMC, DWORD, DWORD, DWORD ) = CDXUTIMEEditBox::Dummy_ImmNotifyIME;
+BOOL (WINAPI * CDXUTIMEEditBox::_ImmSetConversionStatus)( HIMC, DWORD, DWORD ) = CDXUTIMEEditBox::Dummy_ImmSetConversionStatus;
+BOOL (WINAPI * CDXUTIMEEditBox::_ImmSimulateHotKey)( HWND, DWORD ) = CDXUTIMEEditBox::Dummy_ImmSimulateHotKey;
+BOOL (WINAPI * CDXUTIMEEditBox::_ImmIsIME)( HKL ) = CDXUTIMEEditBox::Dummy_ImmIsIME;
+UINT (WINAPI * CDXUTIMEEditBox::_GetReadingString)( HIMC, UINT, LPWSTR, PINT, BOOL*, PUINT ) = CDXUTIMEEditBox::Dummy_GetReadingString; // Traditional Chinese IME
+BOOL (WINAPI * CDXUTIMEEditBox::_ShowReadingWindow)( HIMC, BOOL ) = CDXUTIMEEditBox::Dummy_ShowReadingWindow; // Traditional Chinese IME
+BOOL (APIENTRY * CDXUTIMEEditBox::_VerQueryValueA)( const LPVOID, LPSTR, LPVOID *, PUINT ) = CDXUTIMEEditBox::Dummy_VerQueryValueA;
+BOOL (APIENTRY * CDXUTIMEEditBox::_GetFileVersionInfoA)( LPSTR, DWORD, DWORD, LPVOID )= CDXUTIMEEditBox::Dummy_GetFileVersionInfoA;
+DWORD (APIENTRY * CDXUTIMEEditBox::_GetFileVersionInfoSizeA)( LPSTR, LPDWORD ) = CDXUTIMEEditBox::Dummy_GetFileVersionInfoSizeA;
+
+HINSTANCE CDXUTIMEEditBox::s_hDllImm32;      // IMM32 DLL handle
+HINSTANCE CDXUTIMEEditBox::s_hDllVer;        // Version DLL handle
+HKL       CDXUTIMEEditBox::s_hklCurrent;     // Current keyboard layout of the process
+bool      CDXUTIMEEditBox::s_bVerticalCand;  // Indicates that the candidates are listed vertically
+WCHAR     CDXUTIMEEditBox::s_aszIndicator[5][3] = // String to draw to indicate current input locale
+            {
+                L"En",
+                L"\x7B80",
+                L"\x7E41",
+                L"\xAC00",
+                L"\x3042",
+            };
+LPWSTR    CDXUTIMEEditBox::s_wszCurrIndicator = CDXUTIMEEditBox::s_aszIndicator[0];  // Points to an indicator string that corresponds to current input locale
+bool      CDXUTIMEEditBox::s_bInsertOnType;     // Insert the character as soon as a key is pressed (Korean behavior)
+HINSTANCE CDXUTIMEEditBox::s_hDllIme;           // Instance handle of the current IME module
+HIMC      CDXUTIMEEditBox::s_hImcDef;           // Default input context
+CDXUTIMEEditBox::IMESTATE  CDXUTIMEEditBox::s_ImeState = IMEUI_STATE_OFF;
+bool      CDXUTIMEEditBox::s_bEnableImeSystem;  // Whether the IME system is active
+POINT     CDXUTIMEEditBox::s_ptCompString;      // Composition string position. Updated every frame.
+int       CDXUTIMEEditBox::s_nCompCaret;
+int       CDXUTIMEEditBox::s_nFirstTargetConv;  // Index of the first target converted char in comp string.  If none, -1.
+CUniBuffer CDXUTIMEEditBox::s_CompString = CUniBuffer( 0 );
+BYTE      CDXUTIMEEditBox::s_abCompStringAttr[MAX_COMPSTRING_SIZE];
+DWORD     CDXUTIMEEditBox::s_adwCompStringClause[MAX_COMPSTRING_SIZE];
+WCHAR     CDXUTIMEEditBox::s_wszReadingString[32];
+CDXUTIMEEditBox::CCandList CDXUTIMEEditBox::s_CandList;       // Data relevant to the candidate list
+bool      CDXUTIMEEditBox::s_bShowReadingWindow; // Indicates whether reading window is visible
+bool      CDXUTIMEEditBox::s_bHorizontalReading; // Indicates whether the reading window is vertical or horizontal
+bool      CDXUTIMEEditBox::s_bChineseIME;
+CGrowableArray< CDXUTIMEEditBox::CInputLocale > CDXUTIMEEditBox::s_Locale; // Array of loaded keyboard layout on system
+#if defined(DEBUG) || defined(_DEBUG)
+bool      CDXUTIMEEditBox::m_bIMEStaticMsgProcCalled = false;
+#endif
+
+
+//--------------------------------------------------------------------------------------
+CDXUTIMEEditBox::CDXUTIMEEditBox( CDXUTDialog *pDialog )
+{
+    CDXUTIMEEditBox::Initialize(); // ensure static vars are properly init'ed first
+    _ImmDisableTextFrameService( (DWORD)-1 );  // Disable TSF for the current process
+
+    m_Type = DXUT_CONTROL_IMEEDITBOX;
+    m_pDialog = pDialog;
+
+    s_bEnableImeSystem = true;
+    m_nIndicatorWidth = 0;
+    m_ReadingColor = D3DCOLOR_ARGB( 188, 255, 255, 255 );
+    m_ReadingWinColor = D3DCOLOR_ARGB( 128, 0, 0, 0 );
+    m_ReadingSelColor = D3DCOLOR_ARGB( 255, 255, 0, 0 );
+    m_ReadingSelBkColor = D3DCOLOR_ARGB( 128, 80, 80, 80 );
+    m_CandidateColor = D3DCOLOR_ARGB( 255, 200, 200, 200 );
+    m_CandidateWinColor = D3DCOLOR_ARGB( 128, 0, 0, 0 );
+    m_CandidateSelColor = D3DCOLOR_ARGB( 255, 255, 255, 255 );
+    m_CandidateSelBkColor = D3DCOLOR_ARGB( 128, 158, 158, 158 );
+    m_CompColor = D3DCOLOR_ARGB( 255, 200, 200, 255 );
+    m_CompWinColor = D3DCOLOR_ARGB( 198, 0, 0, 0 );
+    m_CompCaretColor = D3DCOLOR_ARGB( 255, 255, 255, 255 );
+    m_CompTargetColor = D3DCOLOR_ARGB( 255, 255, 255, 255 );
+    m_CompTargetBkColor = D3DCOLOR_ARGB( 255, 150, 150, 150 );
+    m_CompTargetNonColor = D3DCOLOR_ARGB( 255, 255, 255, 0 );
+    m_CompTargetNonBkColor = D3DCOLOR_ARGB( 255, 150, 150, 150 );
+    m_IndicatorImeColor = D3DCOLOR_ARGB( 255, 255, 255, 255 );
+    m_IndicatorEngColor = D3DCOLOR_ARGB( 255, 0, 0, 0 );
+    m_IndicatorBkColor = D3DCOLOR_ARGB( 255, 128, 128, 128 );
+}
+
+
+//--------------------------------------------------------------------------------------
+CDXUTIMEEditBox::~CDXUTIMEEditBox()
+{
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTIMEEditBox::SendKey( BYTE nVirtKey )
+{
+    keybd_event( nVirtKey, 0, 0,               0 );
+    keybd_event( nVirtKey, 0, KEYEVENTF_KEYUP, 0 );
+}
+
+
+//--------------------------------------------------------------------------------------
+// Called by CDXUTDialogResourceManager::OnCreateDevice.  This gives the class a
+// chance to initialize its default input context associated with the app window.
+HRESULT CDXUTIMEEditBox::StaticOnCreateDevice()
+{
+    // Save the default input context
+    s_hImcDef = _ImmGetContext( DXUTGetHWND() );
+    _ImmReleaseContext( DXUTGetHWND(), s_hImcDef );
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTIMEEditBox::UpdateRects()
+{
+    // Temporary adjust m_width so that CDXUTEditBox can compute
+    // the correct rects for its rendering since we need to make space
+    // for the indicator button
+    int nWidth = m_width;
+    m_width -= m_nIndicatorWidth + m_nBorder * 2; // Make room for the indicator button
+    CDXUTEditBox::UpdateRects();
+    m_width = nWidth;  // Restore
+
+    // Compute the indicator button rectangle
+    SetRect( &m_rcIndicator, m_rcBoundingBox.right, m_rcBoundingBox.top, m_x + m_width, m_rcBoundingBox.bottom );
+//    InflateRect( &m_rcIndicator, -m_nBorder, -m_nBorder );
+    m_rcBoundingBox.right = m_rcBoundingBox.left + m_width;
+}
+
+
+//--------------------------------------------------------------------------------------
+//  GetImeId( UINT uIndex )
+//      returns 
+//  returned value:
+//  0: In the following cases
+//      - Non Chinese IME input locale
+//      - Older Chinese IME
+//      - Other error cases
+//
+//  Othewise:
+//      When uIndex is 0 (default)
+//          bit 31-24:  Major version
+//          bit 23-16:  Minor version
+//          bit 15-0:   Language ID
+//      When uIndex is 1
+//          pVerFixedInfo->dwFileVersionLS
+//
+//  Use IMEID_VER and IMEID_LANG macro to extract version and language information.
+//  
+
+// We define the locale-invariant ID ourselves since it doesn't exist prior to WinXP
+// For more information, see the CompareString() reference.
+#define LCID_INVARIANT MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT)
+
+DWORD CDXUTIMEEditBox::GetImeId( UINT uIndex )
+{
+    static HKL hklPrev = 0;
+    static DWORD dwID[2] = { 0, 0 };  // Cache the result
+    
+    DWORD   dwVerSize;
+    DWORD   dwVerHandle;
+    LPVOID  lpVerBuffer;
+    LPVOID  lpVerData;
+    UINT    cbVerData;
+    char    szTmp[1024];
+
+    if( uIndex >= sizeof( dwID ) / sizeof( dwID[0] ) )
+        return 0;
+
+    if( hklPrev == s_hklCurrent )
+        return dwID[uIndex];
+
+    hklPrev = s_hklCurrent;  // Save for the next invocation
+
+    // Check if we are using an older Chinese IME
+    if( !( ( s_hklCurrent == _CHT_HKL ) || ( s_hklCurrent == _CHT_HKL2 ) || ( s_hklCurrent == _CHS_HKL ) ) )
+    {
+        dwID[0] = dwID[1] = 0;
+        return dwID[uIndex];
+    }
+
+    // Obtain the IME file name
+    if ( !_ImmGetIMEFileNameA( s_hklCurrent, szTmp, ( sizeof(szTmp) / sizeof(szTmp[0]) ) - 1 ) )
+    {
+        dwID[0] = dwID[1] = 0;
+        return dwID[uIndex];
+    }
+
+    // Check for IME that doesn't implement reading string API
+    if ( !_GetReadingString )
+    {
+        if( ( CompareStringA( LCID_INVARIANT, NORM_IGNORECASE, szTmp, -1, CHT_IMEFILENAME1, -1 ) != CSTR_EQUAL ) &&
+            ( CompareStringA( LCID_INVARIANT, NORM_IGNORECASE, szTmp, -1, CHT_IMEFILENAME2, -1 ) != CSTR_EQUAL ) &&
+            ( CompareStringA( LCID_INVARIANT, NORM_IGNORECASE, szTmp, -1, CHT_IMEFILENAME3, -1 ) != CSTR_EQUAL ) &&
+            ( CompareStringA( LCID_INVARIANT, NORM_IGNORECASE, szTmp, -1, CHS_IMEFILENAME1, -1 ) != CSTR_EQUAL ) &&
+            ( CompareStringA( LCID_INVARIANT, NORM_IGNORECASE, szTmp, -1, CHS_IMEFILENAME2, -1 ) != CSTR_EQUAL ) )
+        {
+            dwID[0] = dwID[1] = 0;
+            return dwID[uIndex];
+        }
+    }
+
+    dwVerSize = _GetFileVersionInfoSizeA( szTmp, &dwVerHandle );
+    if( dwVerSize )
+    {
+        lpVerBuffer = HeapAlloc( GetProcessHeap(), 0, dwVerSize );
+        if( lpVerBuffer )
+        {
+            if( _GetFileVersionInfoA( szTmp, dwVerHandle, dwVerSize, lpVerBuffer ) )
+            {
+                if( _VerQueryValueA( lpVerBuffer, "\\", &lpVerData, &cbVerData ) )
+                {
+                    DWORD dwVer = ( (VS_FIXEDFILEINFO*)lpVerData )->dwFileVersionMS;
+                    dwVer = ( dwVer & 0x00ff0000 ) << 8 | ( dwVer & 0x000000ff ) << 16;
+                    if( _GetReadingString
+                        ||
+                        ( GetLanguage() == LANG_CHT &&
+                          ( dwVer == MAKEIMEVERSION(4, 2) || 
+                            dwVer == MAKEIMEVERSION(4, 3) || 
+                            dwVer == MAKEIMEVERSION(4, 4) || 
+                            dwVer == MAKEIMEVERSION(5, 0) ||
+                            dwVer == MAKEIMEVERSION(5, 1) ||
+                            dwVer == MAKEIMEVERSION(5, 2) ||
+                            dwVer == MAKEIMEVERSION(6, 0) ) )
+                        ||
+                        ( GetLanguage() == LANG_CHS &&
+                          ( dwVer == MAKEIMEVERSION(4, 1) ||
+                            dwVer == MAKEIMEVERSION(4, 2) ||
+                            dwVer == MAKEIMEVERSION(5, 3) ) )
+                      )
+                    {
+                        dwID[0] = dwVer | GetLanguage();
+                        dwID[1] = ( (VS_FIXEDFILEINFO*)lpVerData )->dwFileVersionLS;
+                    }
+                }
+            }
+            HeapFree( GetProcessHeap(), 0, lpVerBuffer );
+        }
+    }
+
+    return dwID[uIndex];
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTIMEEditBox::CheckInputLocale()
+{
+    static HKL hklPrev = 0;
+    s_hklCurrent = GetKeyboardLayout( 0 );
+    if ( hklPrev == s_hklCurrent )
+        return;
+
+    hklPrev = s_hklCurrent;
+    switch ( GetPrimaryLanguage() )
+    {
+        // Simplified Chinese
+        case LANG_CHINESE:
+            s_bVerticalCand = true;
+            switch ( GetSubLanguage() )
+            {
+                case SUBLANG_CHINESE_SIMPLIFIED:
+                    s_wszCurrIndicator = s_aszIndicator[INDICATOR_CHS];
+                    s_bVerticalCand = GetImeId() == 0;
+                    break;
+                case SUBLANG_CHINESE_TRADITIONAL:
+                    s_wszCurrIndicator = s_aszIndicator[INDICATOR_CHT];
+                    break;
+                default:    // unsupported sub-language
+                    s_wszCurrIndicator = s_aszIndicator[INDICATOR_NON_IME];
+                    break;
+            }
+            break;
+        // Korean
+        case LANG_KOREAN:
+            s_wszCurrIndicator = s_aszIndicator[INDICATOR_KOREAN];
+            s_bVerticalCand = false;
+            break;
+        // Japanese
+        case LANG_JAPANESE:
+            s_wszCurrIndicator = s_aszIndicator[INDICATOR_JAPANESE];
+            s_bVerticalCand = true;
+            break;
+        default:
+            // A non-IME language.  Obtain the language abbreviation
+            // and store it for rendering the indicator later.
+            s_wszCurrIndicator = s_aszIndicator[INDICATOR_NON_IME];
+    }
+
+    // If non-IME, use the language abbreviation.
+    if( s_wszCurrIndicator == s_aszIndicator[INDICATOR_NON_IME] )
+    {
+        WCHAR wszLang[5];
+        GetLocaleInfoW( MAKELCID( LOWORD( s_hklCurrent ), SORT_DEFAULT ), LOCALE_SABBREVLANGNAME, wszLang, 5 );
+        s_wszCurrIndicator[0] = wszLang[0];
+        s_wszCurrIndicator[1] = towlower( wszLang[1] );
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTIMEEditBox::CheckToggleState()
+{
+    CheckInputLocale();
+    bool bIme = _ImmIsIME( s_hklCurrent ) != 0;
+    s_bChineseIME = ( GetPrimaryLanguage() == LANG_CHINESE ) && bIme;
+
+    HIMC hImc;
+    if( NULL != ( hImc = _ImmGetContext( DXUTGetHWND() ) ) )
+    {
+        if( s_bChineseIME )
+        {
+            DWORD dwConvMode, dwSentMode;
+            _ImmGetConversionStatus( hImc, &dwConvMode, &dwSentMode );
+            s_ImeState = ( dwConvMode & IME_CMODE_NATIVE ) ? IMEUI_STATE_ON : IMEUI_STATE_ENGLISH;
+        }
+        else
+        {
+            s_ImeState = ( bIme && _ImmGetOpenStatus( hImc ) != 0 ) ? IMEUI_STATE_ON : IMEUI_STATE_OFF;
+        }
+        _ImmReleaseContext( DXUTGetHWND(), hImc );
+    }
+    else
+        s_ImeState = IMEUI_STATE_OFF;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Enable/disable the entire IME system.  When disabled, the default IME handling
+// kicks in.
+void CDXUTIMEEditBox::EnableImeSystem( bool bEnable )
+{
+    s_bEnableImeSystem = bEnable;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Sets up IME-specific APIs for the IME edit controls.  This is called every time
+// the input locale changes.
+void CDXUTIMEEditBox::SetupImeApi()
+{
+    char szImeFile[MAX_PATH + 1];
+
+    _GetReadingString = NULL;
+    _ShowReadingWindow = NULL;
+    if( _ImmGetIMEFileNameA( s_hklCurrent, szImeFile, sizeof(szImeFile)/sizeof(szImeFile[0]) - 1 ) == 0 )
+        return;
+
+    if( s_hDllIme ) FreeLibrary( s_hDllIme );
+    s_hDllIme = LoadLibraryA( szImeFile );
+    if ( !s_hDllIme )
+        return;
+    _GetReadingString = (UINT (WINAPI*)(HIMC, UINT, LPWSTR, PINT, BOOL*, PUINT))
+        ( GetProcAddress( s_hDllIme, "GetReadingString" ) );
+    _ShowReadingWindow =(BOOL (WINAPI*)(HIMC, BOOL))
+        ( GetProcAddress( s_hDllIme, "ShowReadingWindow" ) );
+}
+
+
+//--------------------------------------------------------------------------------------
+// Resets the composition string.
+void CDXUTIMEEditBox::ResetCompositionString()
+{
+    s_nCompCaret = 0;
+    s_CompString.SetText( L"" );
+    ZeroMemory( s_abCompStringAttr, sizeof(s_abCompStringAttr) );
+}
+
+
+//--------------------------------------------------------------------------------------
+// Truncate composition string by sending keystrokes to the window.
+void CDXUTIMEEditBox::TruncateCompString( bool bUseBackSpace, int iNewStrLen )
+{
+    if( !s_bInsertOnType )
+        return;
+
+    int cc = (int) wcslen( s_CompString.GetBuffer() );
+    assert( iNewStrLen == 0 || iNewStrLen >= cc );
+
+    // Send right arrow keystrokes to move the caret
+    //   to the end of the composition string.
+    for (int i = 0; i < cc - s_nCompCaret; ++i )
+        SendMessage( DXUTGetHWND(), WM_KEYDOWN, VK_RIGHT, 0 );
+    SendMessage( DXUTGetHWND(), WM_KEYUP, VK_RIGHT, 0 );
+
+    if( bUseBackSpace || m_bInsertMode )
+        iNewStrLen = 0;
+
+    // The caller sets bUseBackSpace to false if there's possibility of sending
+    // new composition string to the app right after this function call.
+    // 
+    // If the app is in overwriting mode and new comp string is 
+    // shorter than current one, delete previous comp string 
+    // till it's same long as the new one. Then move caret to the beginning of comp string.
+    // New comp string will overwrite old one.
+    if( iNewStrLen < cc )
+    {
+        for( int i = 0; i < cc - iNewStrLen; ++i )
+        {
+            SendMessage( DXUTGetHWND(), WM_KEYDOWN, VK_BACK, 0 );  // Backspace character
+            SendMessageW( DXUTGetHWND(), WM_CHAR, VK_BACK, 0 );
+        }
+        SendMessage( DXUTGetHWND(), WM_KEYUP, VK_BACK, 0 );
+    }
+    else
+        iNewStrLen = cc;
+
+    // Move the caret to the beginning by sending left keystrokes
+    for (int i = 0; i < iNewStrLen; ++i )
+        SendMessage( DXUTGetHWND(), WM_KEYDOWN, VK_LEFT, 0 );
+    SendMessage( DXUTGetHWND(), WM_KEYUP, VK_LEFT, 0 );
+}
+
+
+//--------------------------------------------------------------------------------------
+// Sends the current composition string to the application by sending keystroke
+// messages.
+void CDXUTIMEEditBox::SendCompString()
+{
+    for( int i = 0; i < lstrlen( s_CompString.GetBuffer() ); ++i )
+        MsgProc( WM_CHAR, (WPARAM)s_CompString[i], 0 );
+}
+
+
+//--------------------------------------------------------------------------------------
+// Outputs current composition string then cleans up the composition task.
+void CDXUTIMEEditBox::FinalizeString( bool bSend )
+{
+    HIMC hImc;
+    if( NULL == ( hImc = _ImmGetContext( DXUTGetHWND() ) ) )
+        return;
+
+    static bool bProcessing = false;
+    if( bProcessing )    // avoid infinite recursion
+    {
+        DXUTTRACE( L"CDXUTIMEEditBox::FinalizeString: Reentrant detected!\n" );
+        _ImmReleaseContext( DXUTGetHWND(), hImc );
+        return;
+    }
+    bProcessing = true;
+
+    if( !s_bInsertOnType && bSend )
+    {
+        // Send composition string to app.
+        LONG lLength = lstrlen( s_CompString.GetBuffer() );
+        // In case of CHT IME, don't send the trailing double byte space, if it exists.
+        if( GetLanguage() == LANG_CHT
+            && s_CompString[lLength - 1] == 0x3000 )
+        {
+            s_CompString[lLength - 1] = 0;
+        }
+        SendCompString();
+    }
+
+    ResetCompositionString();
+    // Clear composition string in IME
+    _ImmNotifyIME( hImc, NI_COMPOSITIONSTR, CPS_CANCEL, 0 );
+    // the following line is necessary as Korean IME doesn't close cand list
+    // when comp string is cancelled.
+    _ImmNotifyIME( hImc, NI_CLOSECANDIDATE, 0, 0 ); 
+    _ImmReleaseContext( DXUTGetHWND(), hImc );
+    bProcessing = false;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Determine whether the reading window should be vertical or horizontal.
+void CDXUTIMEEditBox::GetReadingWindowOrientation( DWORD dwId )
+{
+    s_bHorizontalReading = ( s_hklCurrent == _CHS_HKL ) || ( s_hklCurrent == _CHT_HKL2 ) || ( dwId == 0 );
+    if( !s_bHorizontalReading && ( dwId & 0x0000FFFF ) == LANG_CHT )
+    {
+        WCHAR wszRegPath[MAX_PATH];
+        HKEY hKey;
+        DWORD dwVer = dwId & 0xFFFF0000;
+        StringCchCopy( wszRegPath, MAX_PATH, L"software\\microsoft\\windows\\currentversion\\" );
+        StringCchCat( wszRegPath, MAX_PATH, ( dwVer >= MAKEIMEVERSION( 5, 1 ) ) ? L"MSTCIPH" : L"TINTLGNT" );
+        LONG lRc = RegOpenKeyExW( HKEY_CURRENT_USER, wszRegPath, 0, KEY_READ, &hKey );
+        if (lRc == ERROR_SUCCESS)
+        {
+            DWORD dwSize = sizeof(DWORD), dwMapping, dwType;
+            lRc = RegQueryValueExW( hKey, L"Keyboard Mapping", NULL, &dwType, (PBYTE)&dwMapping, &dwSize );
+            if (lRc == ERROR_SUCCESS)
+            {
+                if ( ( dwVer <= MAKEIMEVERSION( 5, 0 ) && 
+                       ( (BYTE)dwMapping == 0x22 || (BYTE)dwMapping == 0x23 ) )
+                     ||
+                     ( ( dwVer == MAKEIMEVERSION( 5, 1 ) || dwVer == MAKEIMEVERSION( 5, 2 ) ) &&
+                       (BYTE)dwMapping >= 0x22 && (BYTE)dwMapping <= 0x24 )
+                   )
+                {
+                    s_bHorizontalReading = true;
+                }
+            }
+            RegCloseKey( hKey );
+        }
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+// Obtain the reading string upon WM_IME_NOTIFY/INM_PRIVATE notification.
+void CDXUTIMEEditBox::GetPrivateReadingString()
+{
+    DWORD dwId = GetImeId();
+    if( !dwId )
+    {
+        s_bShowReadingWindow = false;
+        return;
+    }
+
+    HIMC hImc;
+    hImc = _ImmGetContext( DXUTGetHWND() );
+    if( !hImc )
+    {
+        s_bShowReadingWindow = false;
+        return;
+    }
+
+    DWORD dwReadingStrLen = 0;
+    DWORD dwErr = 0;
+    WCHAR *pwszReadingStringBuffer = NULL;  // Buffer for when the IME supports GetReadingString()
+    WCHAR *wstr = 0;
+    bool bUnicodeIme = false;  // Whether the IME context component is Unicode.
+    INPUTCONTEXT *lpIC = NULL;
+
+    if( _GetReadingString )
+    {
+        UINT uMaxUiLen;
+        BOOL bVertical;
+        // Obtain the reading string size
+        dwReadingStrLen = _GetReadingString( hImc, 0, NULL, (PINT)&dwErr, &bVertical, &uMaxUiLen );
+        if( dwReadingStrLen )
+        {
+            wstr = pwszReadingStringBuffer = (LPWSTR)HeapAlloc( GetProcessHeap(), 0, sizeof(WCHAR) * dwReadingStrLen );
+            if( !pwszReadingStringBuffer )
+            {
+                // Out of memory. Exit.
+                _ImmReleaseContext( DXUTGetHWND(), hImc );
+                return;
+            }
+
+            // Obtain the reading string
+            dwReadingStrLen = _GetReadingString( hImc, dwReadingStrLen, wstr, (PINT)&dwErr, &bVertical, &uMaxUiLen );
+        }
+
+        s_bHorizontalReading = !bVertical;
+        bUnicodeIme = true;
+    }
+    else
+    {
+        // IMEs that doesn't implement Reading String API
+
+        lpIC = _ImmLockIMC( hImc );
+        
+        LPBYTE p = 0;
+        switch( dwId )
+        {
+            case IMEID_CHT_VER42: // New(Phonetic/ChanJie)IME98  : 4.2.x.x // Win98
+            case IMEID_CHT_VER43: // New(Phonetic/ChanJie)IME98a : 4.3.x.x // WinMe, Win2k
+            case IMEID_CHT_VER44: // New ChanJie IME98b          : 4.4.x.x // WinXP
+                p = *(LPBYTE *)((LPBYTE)_ImmLockIMCC( lpIC->hPrivate ) + 24 );
+                if( !p ) break;
+                dwReadingStrLen = *(DWORD *)( p + 7 * 4 + 32 * 4 );
+                dwErr = *(DWORD *)( p + 8 * 4 + 32 * 4 );
+                wstr = (WCHAR *)( p + 56 );
+                bUnicodeIme = true;
+                break;
+
+            case IMEID_CHT_VER50: // 5.0.x.x // WinME
+                p = *(LPBYTE *)( (LPBYTE)_ImmLockIMCC( lpIC->hPrivate ) + 3 * 4 );
+                if( !p ) break;
+                p = *(LPBYTE *)( (LPBYTE)p + 1*4 + 5*4 + 4*2 );
+                if( !p ) break;
+                dwReadingStrLen = *(DWORD *)(p + 1*4 + (16*2+2*4) + 5*4 + 16);
+                dwErr = *(DWORD *)(p + 1*4 + (16*2+2*4) + 5*4 + 16 + 1*4);
+                wstr = (WCHAR *)(p + 1*4 + (16*2+2*4) + 5*4);
+                bUnicodeIme = false;
+                break;
+
+            case IMEID_CHT_VER51: // 5.1.x.x // IME2002(w/OfficeXP)
+            case IMEID_CHT_VER52: // 5.2.x.x // (w/whistler)
+            case IMEID_CHS_VER53: // 5.3.x.x // SCIME2k or MSPY3 (w/OfficeXP and Whistler)
+                p = *(LPBYTE *)((LPBYTE)_ImmLockIMCC( lpIC->hPrivate ) + 4);
+                if( !p ) break;
+                p = *(LPBYTE *)((LPBYTE)p + 1*4 + 5*4);
+                if( !p ) break;
+                dwReadingStrLen = *(DWORD *)(p + 1*4 + (16*2+2*4) + 5*4 + 16 * 2);
+                dwErr = *(DWORD *)(p + 1*4 + (16*2+2*4) + 5*4 + 16 * 2 + 1*4);
+                wstr  = (WCHAR *) (p + 1*4 + (16*2+2*4) + 5*4);
+                bUnicodeIme = true;
+                break;
+
+            // the code tested only with Win 98 SE (MSPY 1.5/ ver 4.1.0.21)
+            case IMEID_CHS_VER41:
+            {
+                int nOffset;
+                nOffset = ( GetImeId( 1 ) >= 0x00000002 ) ? 8 : 7;
+
+                p = *(LPBYTE *)((LPBYTE)_ImmLockIMCC( lpIC->hPrivate ) + nOffset * 4);
+                if( !p ) break;
+                dwReadingStrLen = *(DWORD *)(p + 7*4 + 16*2*4);
+                dwErr = *(DWORD *)(p + 8*4 + 16*2*4);
+                dwErr = __min( dwErr, dwReadingStrLen );
+                wstr = (WCHAR *)(p + 6*4 + 16*2*1);
+                bUnicodeIme = true;
+                break;
+            }
+
+            case IMEID_CHS_VER42: // 4.2.x.x // SCIME98 or MSPY2 (w/Office2k, Win2k, WinME, etc)
+            {
+                OSVERSIONINFOW osi;
+                osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW);
+                GetVersionExW( &osi );
+
+                int nTcharSize = ( osi.dwPlatformId == VER_PLATFORM_WIN32_NT ) ? sizeof(WCHAR) : sizeof(char);
+                p = *(LPBYTE *)((LPBYTE)_ImmLockIMCC( lpIC->hPrivate ) + 1*4 + 1*4 + 6*4);
+                if( !p ) break;
+                dwReadingStrLen = *(DWORD *)(p + 1*4 + (16*2+2*4) + 5*4 + 16 * nTcharSize);
+                dwErr = *(DWORD *)(p + 1*4 + (16*2+2*4) + 5*4 + 16 * nTcharSize + 1*4);
+                wstr  = (WCHAR *) (p + 1*4 + (16*2+2*4) + 5*4);
+                bUnicodeIme = ( osi.dwPlatformId == VER_PLATFORM_WIN32_NT ) ? true : false;
+            }
+        }   // switch
+    }
+
+    // Copy the reading string to the candidate list first
+    s_CandList.awszCandidate[0][0] = 0;
+    s_CandList.awszCandidate[1][0] = 0;
+    s_CandList.awszCandidate[2][0] = 0;
+    s_CandList.awszCandidate[3][0] = 0;
+    s_CandList.dwCount = dwReadingStrLen;
+    s_CandList.dwSelection = (DWORD)-1; // do not select any char
+    if( bUnicodeIme )
+    {
+        UINT i;
+        for( i = 0; i < dwReadingStrLen; ++i ) // dwlen > 0, if known IME
+        {
+            if( dwErr <= i && s_CandList.dwSelection == (DWORD)-1 )
+            {
+                // select error char
+                s_CandList.dwSelection = i;
+            }
+
+            s_CandList.awszCandidate[i][0] = wstr[i];
+            s_CandList.awszCandidate[i][1] = 0;
+        }
+        s_CandList.awszCandidate[i][0] = 0;
+    }
+    else
+    {
+        char *p = (char *)wstr;
+        DWORD i, j;
+        for( i = 0, j = 0; i < dwReadingStrLen; ++i, ++j ) // dwlen > 0, if known IME
+        {
+            if( dwErr <= i && s_CandList.dwSelection == (DWORD)-1 )
+            {
+                s_CandList.dwSelection = j;
+            }
+            // Obtain the current code page
+            WCHAR wszCodePage[8];
+            UINT uCodePage = CP_ACP;  // Default code page
+            if( GetLocaleInfoW( MAKELCID( GetLanguage(), SORT_DEFAULT ),
+                                LOCALE_IDEFAULTANSICODEPAGE,
+                                wszCodePage,
+                                sizeof(wszCodePage)/sizeof(wszCodePage[0]) ) )
+            {
+                uCodePage = wcstoul( wszCodePage, NULL, 0 );
+            }
+            MultiByteToWideChar( uCodePage, 0, p + i, IsDBCSLeadByteEx( uCodePage, p[i] ) ? 2 : 1,
+                                 s_CandList.awszCandidate[j], 1 );
+            if( IsDBCSLeadByteEx( uCodePage, p[i] ) )
+                ++i;
+        }
+        s_CandList.awszCandidate[j][0] = 0;
+        s_CandList.dwCount = j;
+    }
+    if( !_GetReadingString )
+    {
+        _ImmUnlockIMCC( lpIC->hPrivate );
+        _ImmUnlockIMC( hImc );
+        GetReadingWindowOrientation( dwId );
+    }
+    _ImmReleaseContext( DXUTGetHWND(), hImc );
+
+    if( pwszReadingStringBuffer )
+        HeapFree( GetProcessHeap(), 0, pwszReadingStringBuffer );
+
+    // Copy the string to the reading string buffer
+    if( s_CandList.dwCount > 0 )
+        s_bShowReadingWindow = true;
+    else
+        s_bShowReadingWindow = false;
+    if( s_bHorizontalReading )
+    {
+        s_CandList.nReadingError = -1;
+        s_wszReadingString[0] = 0;
+        for( UINT i = 0; i < s_CandList.dwCount; ++i )
+        {
+            if( s_CandList.dwSelection == i )
+                s_CandList.nReadingError = lstrlen( s_wszReadingString );
+            StringCchCat( s_wszReadingString, 32, s_CandList.awszCandidate[i] );
+        }
+    }
+
+    s_CandList.dwPageSize = MAX_CANDLIST;
+}
+
+
+//--------------------------------------------------------------------------------------
+// This function is used only briefly in CHT IME handling,
+// so accelerator isn't processed.
+void CDXUTIMEEditBox::PumpMessage()
+{
+    MSG msg;
+
+    while( PeekMessageW( &msg, NULL, 0, 0, PM_NOREMOVE ) )
+    {
+        if( !GetMessageW( &msg, NULL, 0, 0 ) )
+        {
+            PostQuitMessage( (int)msg.wParam );
+            return;
+        }
+        TranslateMessage( &msg );
+        DispatchMessageA( &msg );
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTIMEEditBox::OnFocusIn()
+{
+    CDXUTEditBox::OnFocusIn();
+
+    if( s_bEnableImeSystem )
+    {
+        _ImmAssociateContext( DXUTGetHWND(), s_hImcDef );
+        CheckToggleState();
+    } else
+        _ImmAssociateContext( DXUTGetHWND(), NULL );
+
+    //
+    // Set up the IME global state according to the current instance state
+    //
+    HIMC hImc;
+    if( NULL != ( hImc = _ImmGetContext( DXUTGetHWND() ) ) ) 
+    {
+        if( !s_bEnableImeSystem )
+            s_ImeState = IMEUI_STATE_OFF;
+
+        _ImmReleaseContext( DXUTGetHWND(), hImc );
+        CheckToggleState();
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTIMEEditBox::OnFocusOut()
+{
+    CDXUTEditBox::OnFocusOut();
+
+    FinalizeString( false );  // Don't send the comp string as to match RichEdit behavior
+
+    _ImmAssociateContext( DXUTGetHWND(), NULL );
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTIMEEditBox::StaticMsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    HIMC hImc;
+
+    if( !s_bEnableImeSystem )
+        return false;
+
+#if defined(DEBUG) || defined(_DEBUG)
+    m_bIMEStaticMsgProcCalled = true;
+#endif
+
+    switch( uMsg )
+    {
+        case WM_ACTIVATEAPP:
+            if( wParam )
+            {
+                // Populate s_Locale with the list of keyboard layouts.
+                UINT cKL = GetKeyboardLayoutList( 0, NULL );
+                s_Locale.RemoveAll();
+                HKL *phKL = new HKL[cKL];
+                if( phKL )
+                {
+                    GetKeyboardLayoutList( cKL, phKL );
+                    for( UINT i = 0; i < cKL; ++i )
+                    {
+                        CInputLocale Locale;
+
+                        // Filter out East Asian languages that are not IME.
+                        if( ( PRIMARYLANGID( LOWORD( phKL[i] ) ) == LANG_CHINESE ||
+                              PRIMARYLANGID( LOWORD( phKL[i] ) ) == LANG_JAPANESE ||
+                              PRIMARYLANGID( LOWORD( phKL[i] ) ) == LANG_KOREAN ) &&
+                              !_ImmIsIME( phKL[i] ) )
+                              continue;
+
+                        // If this language is already in the list, don't add it again.
+                        bool bBreak = false;
+                        for( int e = 0; e < s_Locale.GetSize(); ++e )
+                            if( LOWORD( s_Locale.GetAt( e ).m_hKL ) ==
+                                LOWORD( phKL[i] ) )
+                            {
+                                bBreak = true;
+                                break;
+                            }
+                        if( bBreak )
+                            break;
+
+                        Locale.m_hKL = phKL[i];
+                        WCHAR wszDesc[128] = L"";
+                        switch( PRIMARYLANGID( LOWORD( phKL[i] ) ) )
+                        {
+                            // Simplified Chinese
+                            case LANG_CHINESE:
+                                switch( SUBLANGID( LOWORD( phKL[i] ) ) )
+                                {
+                                    case SUBLANG_CHINESE_SIMPLIFIED:
+                                        StringCchCopy( Locale.m_wszLangAbb, 3, s_aszIndicator[INDICATOR_CHS] );
+                                        break;
+                                    case SUBLANG_CHINESE_TRADITIONAL:
+                                        StringCchCopy( Locale.m_wszLangAbb, 3, s_aszIndicator[INDICATOR_CHT] );
+                                        break;
+                                    default:    // unsupported sub-language
+                                        GetLocaleInfoW( MAKELCID( LOWORD( phKL[i] ), SORT_DEFAULT ), LOCALE_SABBREVLANGNAME, wszDesc, 128 );
+                                        Locale.m_wszLangAbb[0] = wszDesc[0];
+                                        Locale.m_wszLangAbb[1] = towlower( wszDesc[1] );
+                                        Locale.m_wszLangAbb[2] = L'\0';
+                                        break;
+                                }
+                                break;
+                            // Korean
+                            case LANG_KOREAN:
+                                StringCchCopy( Locale.m_wszLangAbb, 3, s_aszIndicator[INDICATOR_KOREAN] );
+                                break;
+                            // Japanese
+                            case LANG_JAPANESE:
+                                StringCchCopy( Locale.m_wszLangAbb, 3, s_aszIndicator[INDICATOR_JAPANESE] );
+                                break;         
+                            default:
+                                // A non-IME language.  Obtain the language abbreviation
+                                // and store it for rendering the indicator later.
+                                GetLocaleInfoW( MAKELCID( LOWORD( phKL[i] ), SORT_DEFAULT ), LOCALE_SABBREVLANGNAME, wszDesc, 128 );
+                                Locale.m_wszLangAbb[0] = wszDesc[0];
+                                Locale.m_wszLangAbb[1] = towlower( wszDesc[1] );
+                                Locale.m_wszLangAbb[2] = L'\0';
+                                break;
+                        }
+
+                        GetLocaleInfoW( MAKELCID( LOWORD( phKL[i] ), SORT_DEFAULT ), LOCALE_SLANGUAGE, wszDesc, 128 );
+                        StringCchCopy( Locale.m_wszLang, 64, wszDesc );
+
+                        s_Locale.Add( Locale );
+                    }
+                    delete[] phKL;
+                }
+            }
+            break;
+
+        case WM_INPUTLANGCHANGE:
+            DXUTTRACE( L"WM_INPUTLANGCHANGE\n" );
+            {
+                UINT uLang = GetPrimaryLanguage();
+                CheckToggleState();
+                if ( uLang != GetPrimaryLanguage() )
+                {
+                    // Korean IME always inserts on keystroke.  Other IMEs do not.
+                    s_bInsertOnType = ( GetPrimaryLanguage() == LANG_KOREAN );
+                }
+
+                // IME changed.  Setup the new IME.
+                SetupImeApi();
+                if( _ShowReadingWindow )
+                {
+                    if ( NULL != ( hImc = _ImmGetContext( DXUTGetHWND() ) ) )
+                    {
+                        _ShowReadingWindow( hImc, false );
+                        _ImmReleaseContext( DXUTGetHWND(), hImc );
+                    }
+                }
+            }
+            return true;
+
+        case WM_IME_SETCONTEXT:
+            DXUTTRACE( L"WM_IME_SETCONTEXT\n" );
+            //
+            // We don't want anything to display, so we have to clear this
+            //
+            lParam = 0;
+            return false;
+
+        // Handle WM_IME_STARTCOMPOSITION here since
+        // we do not want the default IME handler to see
+        // this when our fullscreen app is running.
+        case WM_IME_STARTCOMPOSITION:
+            DXUTTRACE( L"WM_IME_STARTCOMPOSITION\n" );
+            ResetCompositionString();
+            // Since the composition string has its own caret, we don't render
+            // the edit control's own caret to avoid double carets on screen.
+            s_bHideCaret = true;
+            return true;
+
+        case WM_IME_COMPOSITION:
+            DXUTTRACE( L"WM_IME_COMPOSITION\n" );
+            return false;
+    }
+
+    return false;
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTIMEEditBox::HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam )
+{
+    if( !m_bEnabled || !m_bVisible )
+        return false;
+
+    switch( uMsg )
+    {
+        case WM_LBUTTONDOWN:
+        case WM_LBUTTONDBLCLK:
+        {
+            DXUTFontNode* pFont = m_pDialog->GetFont( m_Elements.GetAt( 9 )->iFont );
+
+            // Check if this click is on top of the composition string
+            int nCompStrWidth;
+            s_CompString.CPtoX( s_CompString.GetTextSize(), FALSE, &nCompStrWidth );
+
+            if( s_ptCompString.x <= pt.x &&
+                s_ptCompString.y <= pt.y &&
+                s_ptCompString.x + nCompStrWidth > pt.x &&
+                s_ptCompString.y + pFont->nHeight > pt.y )
+            {
+                int nCharBodyHit, nCharHit;
+                int nTrail;
+
+                // Determine the character clicked on.
+                s_CompString.XtoCP( pt.x - s_ptCompString.x, &nCharBodyHit, &nTrail );
+                if( nTrail && nCharBodyHit < s_CompString.GetTextSize() )
+                    nCharHit = nCharBodyHit + 1;
+                else
+                    nCharHit = nCharBodyHit;
+
+                // Now generate keypress events to move the comp string cursor
+                // to the click point.  First, if the candidate window is displayed,
+                // send Esc to close it.
+                HIMC hImc = _ImmGetContext( DXUTGetHWND() );
+                if( !hImc )
+                    return true;
+
+                _ImmNotifyIME( hImc, NI_CLOSECANDIDATE, 0, 0 );
+                _ImmReleaseContext( DXUTGetHWND(), hImc );
+
+                switch( GetPrimaryLanguage() )
+                {
+                    case LANG_JAPANESE:
+                        // For Japanese, there are two cases.  If s_nFirstTargetConv is
+                        // -1, the comp string hasn't been converted yet, and we use
+                        // s_nCompCaret.  For any other value of s_nFirstTargetConv,
+                        // the string has been converted, so we use clause information.
+
+                        if( s_nFirstTargetConv != -1 )
+                        {
+                            int nClauseClicked = 0;
+                            while( (int)s_adwCompStringClause[nClauseClicked + 1] <= nCharBodyHit )
+                                ++nClauseClicked;
+
+                            int nClauseSelected = 0;
+                            while( (int)s_adwCompStringClause[nClauseSelected + 1] <= s_nFirstTargetConv )
+                                ++nClauseSelected;
+
+                            BYTE nVirtKey = nClauseClicked > nClauseSelected ? VK_RIGHT : VK_LEFT;
+                            int nSendCount = abs( nClauseClicked - nClauseSelected );
+                            while( nSendCount-- > 0 )
+                                SendKey( nVirtKey );
+
+                            return true;
+                        }
+
+                        // Not converted case. Fall thru to Chinese case.
+
+                    case LANG_CHINESE:
+                    {
+                        // For Chinese, use s_nCompCaret.
+                        BYTE nVirtKey = nCharHit > s_nCompCaret ? VK_RIGHT : VK_LEFT;
+                        int nSendCount = abs( nCharHit - s_nCompCaret );
+                        while( nSendCount-- > 0 )
+                            SendKey( nVirtKey );
+                        break;
+                    }
+                }
+
+                return true;
+            }
+
+            // Check if the click is on top of the candidate window
+            if( s_CandList.bShowWindow && PtInRect( &s_CandList.rcCandidate, pt ) )
+            {
+                if( s_bVerticalCand )
+                {
+                    // Vertical candidate window
+
+                    // Compute the row the click is on
+                    int nRow = ( pt.y - s_CandList.rcCandidate.top ) / pFont->nHeight;
+
+                    if( nRow < (int)s_CandList.dwCount )
+                    {
+                        // nRow is a valid entry.
+                        // Now emulate keystrokes to select the candidate at this row.
+                        switch( GetPrimaryLanguage() )
+                        {
+                            case LANG_CHINESE:
+                            case LANG_KOREAN:
+                                // For Chinese and Korean, simply send the number keystroke.
+                                SendKey( (BYTE) ('0' + nRow + 1) );
+                                break;
+
+                            case LANG_JAPANESE:
+                                // For Japanese, move the selection to the target row,
+                                // then send Right, then send Left.
+
+                                BYTE nVirtKey;
+                                if( nRow > (int)s_CandList.dwSelection )
+                                    nVirtKey = VK_DOWN;
+                                else
+                                    nVirtKey = VK_UP;
+                                int nNumToHit = abs( int( nRow - s_CandList.dwSelection ) );
+                                for( int nStrike = 0; nStrike < nNumToHit; ++nStrike )
+                                    SendKey( nVirtKey );
+
+                                // Do this to close the candidate window without ending composition.
+                                SendKey( VK_RIGHT );
+                                SendKey( VK_LEFT );
+
+                                break;
+                        }
+                    }
+                } else
+                {
+                    // Horizontal candidate window
+
+                    // Determine which the character the click has hit.
+                    int nCharHit;
+                    int nTrail;
+                    s_CandList.HoriCand.XtoCP( pt.x - s_CandList.rcCandidate.left, &nCharHit, &nTrail );
+
+                    // Determine which candidate string the character belongs to.
+                    int nCandidate = s_CandList.dwCount - 1;
+
+                    int nEntryStart = 0;
+                    for( UINT i = 0; i < s_CandList.dwCount; ++i )
+                    {
+                        if( nCharHit >= nEntryStart )
+                        {
+                            // Haven't found it.
+                            nEntryStart += lstrlenW( s_CandList.awszCandidate[i] ) + 1;  // plus space separator
+                        } else
+                        {
+                            // Found it.  This entry starts at the right side of the click point,
+                            // so the char belongs to the previous entry.
+                            nCandidate = i - 1;
+                            break;
+                        }
+                    }
+
+                    // Now emulate keystrokes to select the candidate entry.
+                    switch( GetPrimaryLanguage() )
+                    {
+                        case LANG_CHINESE:
+                        case LANG_KOREAN:
+                            // For Chinese and Korean, simply send the number keystroke.
+                            SendKey( (BYTE) ('0' + nCandidate + 1) );
+                            break;
+                    }
+                }
+
+                return true;
+            }
+        }
+    }
+
+    // If we didn't care for the msg, let the parent process it.
+    return CDXUTEditBox::HandleMouse( uMsg, pt, wParam, lParam );
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CDXUTIMEEditBox::MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    if( !m_bEnabled || !m_bVisible )
+        return false;
+
+#if defined(DEBUG) || defined(_DEBUG)
+    // DXUT.cpp used to call CDXUTIMEEditBox::StaticMsgProc() so that, but now
+    // this is the application's responsiblity.  To do this, call 
+    // CDXUTDialogResourceManager::MsgProc() before calling this function.
+    assert( m_bIMEStaticMsgProcCalled && L"To fix, call CDXUTDialogResourceManager::MsgProc() first" );
+#endif
+
+    bool trappedData;
+    bool *trapped = &trappedData;
+
+    HIMC hImc;
+    static LPARAM lAlt = 0x80000000, lCtrl = 0x80000000, lShift = 0x80000000;
+
+    *trapped = false;
+    if( !s_bEnableImeSystem )
+        return CDXUTEditBox::MsgProc( uMsg, wParam, lParam );
+
+    switch( uMsg )
+    {
+        //
+        //  IME Handling
+        //
+        case WM_IME_COMPOSITION:
+            DXUTTRACE( L"WM_IME_COMPOSITION\n" );
+            {
+                LONG lRet;  // Returned count in CHARACTERS
+                WCHAR wszCompStr[MAX_COMPSTRING_SIZE];
+
+                *trapped = true;
+                if( NULL == ( hImc = _ImmGetContext( DXUTGetHWND() ) ) )
+                {
+                    break;
+                }
+
+                // Get the caret position in composition string
+                if ( lParam & GCS_CURSORPOS )
+                {
+                    s_nCompCaret = _ImmGetCompositionStringW( hImc, GCS_CURSORPOS, NULL, 0 );
+                    if( s_nCompCaret < 0 )
+                        s_nCompCaret = 0; // On error, set caret to pos 0.
+                }
+
+                // ResultStr must be processed before composition string.
+                //
+                // This is because for some IMEs, such as CHT, pressing Enter
+                // to complete the composition sends WM_IME_COMPOSITION with both
+                // GCS_RESULTSTR and GCS_COMPSTR.  Retrieving the result string
+                // gives the correct string, while retrieving the comp string
+                // (GCS_COMPSTR) gives empty string.  GCS_RESULTSTR should be
+                // handled first so that the application receives the string.  Then
+                // GCS_COMPSTR can be handled to clear the comp string buffer.
+
+                if ( lParam & GCS_RESULTSTR )
+                {
+                    DXUTTRACE( L"  GCS_RESULTSTR\n" );
+                    lRet = _ImmGetCompositionStringW( hImc, GCS_RESULTSTR, wszCompStr, sizeof( wszCompStr ) );
+                    if( lRet > 0 )
+                    {
+                        lRet /= sizeof(WCHAR);
+                        wszCompStr[lRet] = 0;  // Force terminate
+                        TruncateCompString( false, (int)wcslen( wszCompStr ) );
+                        s_CompString.SetText( wszCompStr );
+                        SendCompString();
+                        ResetCompositionString();
+                    }
+                }
+
+                //
+                // Reads in the composition string.
+                //
+                if ( lParam & GCS_COMPSTR )
+                {
+                    DXUTTRACE( L"  GCS_COMPSTR\n" );
+                    //////////////////////////////////////////////////////
+                    // Retrieve the latest user-selected IME candidates
+                    lRet = _ImmGetCompositionStringW( hImc, GCS_COMPSTR, wszCompStr, sizeof( wszCompStr ) );
+                    if( lRet > 0 )
+                    {
+                        lRet /= sizeof(WCHAR);  // Convert size in byte to size in char
+                        wszCompStr[lRet] = 0;  // Force terminate
+                        //
+                        // Remove the whole of the string
+                        //
+                        TruncateCompString( false, (int)wcslen( wszCompStr ) );
+
+                        s_CompString.SetText( wszCompStr );
+
+                        // Older CHT IME uses composition string for reading string
+                        if ( GetLanguage() == LANG_CHT && !GetImeId() )
+                        {
+                            if( lstrlen( s_CompString.GetBuffer() ) )
+                            {
+                                s_CandList.dwCount = 4;             // Maximum possible length for reading string is 4
+                                s_CandList.dwSelection = (DWORD)-1; // don't select any candidate
+
+                                // Copy the reading string to the candidate list
+                                for( int i = 3; i >= 0; --i )
+                                {
+                                    if( i > lstrlen( s_CompString.GetBuffer() ) - 1 )
+                                        s_CandList.awszCandidate[i][0] = 0;  // Doesn't exist
+                                    else
+                                    {
+                                        s_CandList.awszCandidate[i][0] = s_CompString[i];
+                                        s_CandList.awszCandidate[i][1] = 0;
+                                    }
+                                }
+                                s_CandList.dwPageSize = MAX_CANDLIST;
+                                // Clear comp string after we are done copying
+                                ZeroMemory( (LPVOID)s_CompString.GetBuffer(), 4 * sizeof(WCHAR) );
+                                s_bShowReadingWindow = true;
+                                GetReadingWindowOrientation( 0 );
+                                if( s_bHorizontalReading )
+                                {
+                                    s_CandList.nReadingError = -1;  // Clear error
+
+                                    // Create a string that consists of the current
+                                    // reading string.  Since horizontal reading window
+                                    // is used, we take advantage of this by rendering
+                                    // one string instead of several.
+                                    //
+                                    // Copy the reading string from the candidate list
+                                    // to the reading string buffer.
+                                    s_wszReadingString[0] = 0;
+                                    for( UINT i = 0; i < s_CandList.dwCount; ++i )
+                                    {
+                                        if( s_CandList.dwSelection == i )
+                                            s_CandList.nReadingError = lstrlen( s_wszReadingString );
+                                        StringCchCat( s_wszReadingString, 32, s_CandList.awszCandidate[i] );
+                                    }
+                                }
+                            }
+                            else
+                            {
+                                s_CandList.dwCount = 0;
+                                s_bShowReadingWindow = false;
+                            }
+                        }
+
+                        if( s_bInsertOnType )
+                        {
+                            // Send composition string to the edit control
+                            SendCompString();
+                            // Restore the caret to the correct location.
+                            // It's at the end right now, so compute the number
+                            // of times left arrow should be pressed to
+                            // send it to the original position.
+                            int nCount = lstrlen( s_CompString.GetBuffer() + s_nCompCaret );
+                            // Send left keystrokes
+                            for( int i = 0; i < nCount; ++i )
+                                SendMessage( DXUTGetHWND(), WM_KEYDOWN, VK_LEFT, 0 );
+                            SendMessage( DXUTGetHWND(), WM_KEYUP, VK_LEFT, 0 );
+                        }
+                    }
+
+                    ResetCaretBlink();
+                }
+
+                // Retrieve comp string attributes
+                if( lParam & GCS_COMPATTR )
+                {
+                    lRet = _ImmGetCompositionStringW( hImc, GCS_COMPATTR, s_abCompStringAttr, sizeof( s_abCompStringAttr ) );
+                    if( lRet > 0 )
+                        s_abCompStringAttr[lRet] = 0;  // ??? Is this needed for attributes?
+                }
+
+                // Retrieve clause information
+                if( lParam & GCS_COMPCLAUSE )
+                {
+                    lRet = _ImmGetCompositionStringW(hImc, GCS_COMPCLAUSE, s_adwCompStringClause, sizeof( s_adwCompStringClause ) );
+                    s_adwCompStringClause[lRet / sizeof(DWORD)] = 0;  // Terminate
+                }
+
+                _ImmReleaseContext( DXUTGetHWND(), hImc );
+            }
+            break;
+
+        case WM_IME_ENDCOMPOSITION:
+            DXUTTRACE( L"WM_IME_ENDCOMPOSITION\n" );
+            TruncateCompString();
+            ResetCompositionString();
+            // We can show the edit control's caret again.
+            s_bHideCaret = false;
+            // Hide reading window
+            s_bShowReadingWindow = false;
+            break;
+
+        case WM_IME_NOTIFY:
+            DXUTTRACE( L"WM_IME_NOTIFY %u\n", wParam );
+            switch( wParam )
+            {
+                case IMN_SETCONVERSIONMODE:
+                    DXUTTRACE( L"  IMN_SETCONVERSIONMODE\n" );
+                case IMN_SETOPENSTATUS:
+                    DXUTTRACE( L"  IMN_SETOPENSTATUS\n" );
+                    CheckToggleState();
+                    break;
+
+                case IMN_OPENCANDIDATE:
+                case IMN_CHANGECANDIDATE:
+                {
+                    DXUTTRACE( wParam == IMN_CHANGECANDIDATE ? L"  IMN_CHANGECANDIDATE\n" : L"  IMN_OPENCANDIDATE\n" );
+
+                    s_CandList.bShowWindow = true;
+                    *trapped = true;
+                    if( NULL == ( hImc = _ImmGetContext( DXUTGetHWND() ) ) )
+                        break;
+
+                    LPCANDIDATELIST lpCandList = NULL;
+                    DWORD dwLenRequired;
+
+                    s_bShowReadingWindow = false;
+                    // Retrieve the candidate list
+                    dwLenRequired = _ImmGetCandidateListW( hImc, 0, NULL, 0 );
+                    if( dwLenRequired )
+                    {
+                        lpCandList = (LPCANDIDATELIST)HeapAlloc( GetProcessHeap(), 0, dwLenRequired );
+                        dwLenRequired = _ImmGetCandidateListW( hImc, 0, lpCandList, dwLenRequired );
+                    }
+
+                    if( lpCandList )
+                    {
+                        // Update candidate list data
+                        s_CandList.dwSelection = lpCandList->dwSelection;
+                        s_CandList.dwCount = lpCandList->dwCount;
+
+                        int nPageTopIndex = 0;
+                        s_CandList.dwPageSize = __min( lpCandList->dwPageSize, MAX_CANDLIST );
+                        if( GetPrimaryLanguage() == LANG_JAPANESE )
+                        {
+                            // Japanese IME organizes its candidate list a little
+                            // differently from the other IMEs.
+                            nPageTopIndex = ( s_CandList.dwSelection / s_CandList.dwPageSize ) * s_CandList.dwPageSize;
+                        }
+                        else
+                            nPageTopIndex = lpCandList->dwPageStart;
+
+                        // Make selection index relative to first entry of page
+                        s_CandList.dwSelection = ( GetLanguage() == LANG_CHS && !GetImeId() ) ? (DWORD)-1
+                                                 : s_CandList.dwSelection - nPageTopIndex;
+
+                        ZeroMemory( s_CandList.awszCandidate, sizeof(s_CandList.awszCandidate) );
+                        for( UINT i = nPageTopIndex, j = 0;
+                            (DWORD)i < lpCandList->dwCount && j < s_CandList.dwPageSize;
+                            i++, j++ )
+                        {
+                            // Initialize the candidate list strings
+                            LPWSTR pwsz = s_CandList.awszCandidate[j];
+                            // For every candidate string entry,
+                            // write [index] + Space + [String] if vertical,
+                            // write [index] + [String] + Space if horizontal.
+                            *pwsz++ = (WCHAR)( L'0' + ( (j + 1) % 10 ) );  // Index displayed is 1 based
+                            if( s_bVerticalCand )
+                                *pwsz++ = L' ';
+                            WCHAR *pwszNewCand = (LPWSTR)( (LPBYTE)lpCandList + lpCandList->dwOffset[i] );
+                            while ( *pwszNewCand )
+                                *pwsz++ = *pwszNewCand++;
+                            if( !s_bVerticalCand )
+                                *pwsz++ = L' ';
+                            *pwsz = 0;  // Terminate
+                        }
+
+                        // Make dwCount in s_CandList be number of valid entries in the page.
+                        s_CandList.dwCount = lpCandList->dwCount - lpCandList->dwPageStart;
+                        if( s_CandList.dwCount > lpCandList->dwPageSize )
+                            s_CandList.dwCount = lpCandList->dwPageSize;
+
+                        HeapFree( GetProcessHeap(), 0, lpCandList );
+                        _ImmReleaseContext( DXUTGetHWND(), hImc );
+
+                        // Korean and old Chinese IME can't have selection.
+                        // User must use the number hotkey or Enter to select
+                        // a candidate.
+                        if( GetPrimaryLanguage() == LANG_KOREAN ||
+                            GetLanguage() == LANG_CHT && !GetImeId() )
+                        {
+                            s_CandList.dwSelection = (DWORD)-1;
+                        }
+
+                        // Initialize s_CandList.HoriCand if we have a
+                        // horizontal candidate window.
+                        if( !s_bVerticalCand )
+                        {
+                            WCHAR wszCand[256] = L"";
+
+                            s_CandList.nFirstSelected = 0;
+                            s_CandList.nHoriSelectedLen = 0;
+                            for( UINT i = 0; i < MAX_CANDLIST; ++i )
+                            {
+                                if( s_CandList.awszCandidate[i][0] == L'\0' )
+                                    break;
+
+                                WCHAR wszEntry[32];
+                                StringCchPrintf( wszEntry, 32, L"%s ", s_CandList.awszCandidate[i] );
+                                // If this is the selected entry, mark its char position.
+                                if( s_CandList.dwSelection == i )
+                                {
+                                    s_CandList.nFirstSelected = lstrlen( wszCand );
+                                    s_CandList.nHoriSelectedLen = lstrlen( wszEntry ) - 1;  // Minus space
+                                }
+                                StringCchCat( wszCand, 256, wszEntry );
+                            }
+                            wszCand[lstrlen(wszCand) - 1] = L'\0';  // Remove the last space
+                            s_CandList.HoriCand.SetText( wszCand );
+                        }
+                    }
+                    break;
+                }
+
+                case IMN_CLOSECANDIDATE:
+                {
+                    DXUTTRACE( L"  IMN_CLOSECANDIDATE\n" );
+                    s_CandList.bShowWindow = false;
+                    if( !s_bShowReadingWindow )
+                    {
+                        s_CandList.dwCount = 0;
+                        ZeroMemory( s_CandList.awszCandidate, sizeof(s_CandList.awszCandidate) );
+                    }
+                    *trapped = true;
+                    break;
+                }
+
+                case IMN_PRIVATE:
+                    DXUTTRACE( L"  IMN_PRIVATE\n" );
+                    {
+                        if( !s_CandList.bShowWindow )
+                            GetPrivateReadingString();
+
+                        // Trap some messages to hide reading window
+                        DWORD dwId = GetImeId();
+                        switch( dwId )
+                        {
+                            case IMEID_CHT_VER42:
+                            case IMEID_CHT_VER43:
+                            case IMEID_CHT_VER44:
+                            case IMEID_CHS_VER41:
+                            case IMEID_CHS_VER42:
+                                if( ( lParam == 1 ) || ( lParam == 2 ) )
+                                {
+                                    *trapped = true;
+                                }
+                                break;
+
+                            case IMEID_CHT_VER50:
+                            case IMEID_CHT_VER51:
+                            case IMEID_CHT_VER52:
+                            case IMEID_CHT_VER60:
+                            case IMEID_CHS_VER53:
+                                if( (lParam == 16) || (lParam == 17) || (lParam == 26) || (lParam == 27) || (lParam == 28) )
+                                {
+                                    *trapped = true;
+                                }
+                                break;
+                        }
+                    }
+                    break;
+
+                default:
+                    *trapped = true;
+                    break;
+            }
+            break;
+
+        // When Text Service Framework is installed in Win2K, Alt+Shift and Ctrl+Shift combination (to switch input
+        // locale / keyboard layout) doesn't send WM_KEYUP message for the key that is released first. We need to check
+        // if these keys are actually up whenever we receive key up message for other keys.
+        case WM_KEYUP:
+        case WM_SYSKEYUP:
+            if ( !( lAlt & 0x80000000 ) && wParam != VK_MENU && ( GetAsyncKeyState( VK_MENU ) & 0x8000 ) == 0 )
+            {
+                PostMessageW( GetFocus(), WM_KEYUP, (WPARAM)VK_MENU, ( lAlt & 0x01ff0000 ) | 0xC0000001 );
+            }   
+            else if ( !( lCtrl & 0x80000000 ) && wParam != VK_CONTROL && ( GetAsyncKeyState( VK_CONTROL ) & 0x8000 ) == 0 )
+            {
+                PostMessageW( GetFocus(), WM_KEYUP, (WPARAM)VK_CONTROL, ( lCtrl & 0x01ff0000 ) | 0xC0000001 );
+            }
+            else if ( !( lShift & 0x80000000 ) && wParam != VK_SHIFT && ( GetAsyncKeyState( VK_SHIFT ) & 0x8000 ) == 0 )
+            {
+                PostMessageW( GetFocus(), WM_KEYUP, (WPARAM)VK_SHIFT, ( lShift & 0x01ff0000 ) | 0xC0000001 );
+            }
+            // fall through WM_KEYDOWN / WM_SYSKEYDOWN
+        case WM_KEYDOWN:
+        case WM_SYSKEYDOWN:
+            switch ( wParam )
+            {
+                case VK_MENU:
+                    lAlt = lParam;
+                    break;
+                case VK_SHIFT:
+                    lShift = lParam;
+                    break;
+                case VK_CONTROL:
+                    lCtrl = lParam;
+                    break;
+            }
+            //break;
+            // Fall through to default case
+            // so we invoke the parent.
+
+        default:
+            // Let the parent handle the message that we
+            // don't handle.
+            return CDXUTEditBox::MsgProc( uMsg, wParam, lParam );
+
+    }  // switch
+
+    return *trapped;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTIMEEditBox::RenderCandidateReadingWindow( IDirect3DDevice9* pd3dDevice, float fElapsedTime, bool bReading )
+{
+    RECT rc;
+    UINT nNumEntries = bReading ? 4 : MAX_CANDLIST;
+    D3DCOLOR TextColor, TextBkColor, SelTextColor, SelBkColor;
+    int nX, nXFirst, nXComp;
+    m_Buffer.CPtoX( m_nCaret, FALSE, &nX );
+    m_Buffer.CPtoX( m_nFirstVisible, FALSE, &nXFirst );
+
+    if( bReading )
+    {
+        TextColor = m_ReadingColor;
+        TextBkColor = m_ReadingWinColor;
+        SelTextColor = m_ReadingSelColor;
+        SelBkColor = m_ReadingSelBkColor;
+    } else
+    {
+        TextColor = m_CandidateColor;
+        TextBkColor = m_CandidateWinColor;
+        SelTextColor = m_CandidateSelColor;
+        SelBkColor = m_CandidateSelBkColor;
+    }
+
+    // For Japanese IME, align the window with the first target converted character.
+    // For all other IMEs, align with the caret.  This is because the caret
+    // does not move for Japanese IME.
+    if ( GetLanguage() == LANG_CHT && !GetImeId() )
+        nXComp = 0;
+    else
+    if( GetPrimaryLanguage() == LANG_JAPANESE )
+        s_CompString.CPtoX( s_nFirstTargetConv, FALSE, &nXComp );
+    else
+        s_CompString.CPtoX( s_nCompCaret, FALSE, &nXComp );
+
+    // Compute the size of the candidate window
+    int nWidthRequired = 0;
+    int nHeightRequired = 0;
+    int nSingleLineHeight = 0;
+
+    if( ( s_bVerticalCand && !bReading ) ||
+        ( !s_bHorizontalReading && bReading ) )
+    {
+        // Vertical window
+        for( UINT i = 0; i < nNumEntries; ++i )
+        {
+            if( s_CandList.awszCandidate[i][0] == L'\0' )
+                break;
+            SetRect( &rc, 0, 0, 0, 0 );
+            m_pDialog->CalcTextRect( s_CandList.awszCandidate[i], m_Elements.GetAt( 1 ), &rc );
+            nWidthRequired = __max( nWidthRequired, rc.right - rc.left );
+            nSingleLineHeight = __max( nSingleLineHeight, rc.bottom - rc.top );
+        }
+        nHeightRequired = nSingleLineHeight * nNumEntries;
+    } else
+    {
+        // Horizontal window
+        SetRect( &rc, 0, 0, 0, 0 );
+        if( bReading )
+            m_pDialog->CalcTextRect( s_wszReadingString, m_Elements.GetAt( 1 ), &rc );
+        else
+            m_pDialog->CalcTextRect( s_CandList.HoriCand.GetBuffer(), m_Elements.GetAt( 1 ), &rc );
+        nWidthRequired = rc.right - rc.left;
+        nSingleLineHeight = nHeightRequired = rc.bottom - rc.top;
+    }
+
+    // Now that we have the dimension, calculate the location for the candidate window.
+    // We attempt to fit the window in this order:
+    // bottom, top, right, left.
+
+    bool bHasPosition = false;
+
+    // Bottom
+    SetRect( &rc, s_ptCompString.x + nXComp, s_ptCompString.y + m_rcText.bottom - m_rcText.top,
+                  s_ptCompString.x + nXComp + nWidthRequired, s_ptCompString.y + m_rcText.bottom - m_rcText.top + nHeightRequired );
+    // if the right edge is cut off, move it left.
+    if( rc.right > m_pDialog->GetWidth() )
+    {
+        rc.left -= rc.right - m_pDialog->GetWidth();
+        rc.right = m_pDialog->GetWidth();
+    }
+    if( rc.bottom <= m_pDialog->GetHeight() )
+        bHasPosition = true;
+
+    // Top
+    if( !bHasPosition )
+    {
+        SetRect( &rc, s_ptCompString.x + nXComp, s_ptCompString.y - nHeightRequired,
+                      s_ptCompString.x + nXComp + nWidthRequired, s_ptCompString.y );
+        // if the right edge is cut off, move it left.
+        if( rc.right > m_pDialog->GetWidth() )
+        {
+            rc.left -= rc.right - m_pDialog->GetWidth();
+            rc.right = m_pDialog->GetWidth();
+        }
+        if( rc.top >= 0 )
+            bHasPosition = true;
+    }
+
+    // Right
+    if( !bHasPosition )
+    {
+        int nXCompTrail;
+        s_CompString.CPtoX( s_nCompCaret, TRUE, &nXCompTrail );
+        SetRect( &rc, s_ptCompString.x + nXCompTrail, 0,
+                      s_ptCompString.x + nXCompTrail + nWidthRequired, nHeightRequired );
+        if( rc.right <= m_pDialog->GetWidth() )
+            bHasPosition = true;
+    }
+
+    // Left
+    if( !bHasPosition )
+    {
+        SetRect( &rc, s_ptCompString.x + nXComp - nWidthRequired, 0,
+                      s_ptCompString.x + nXComp, nHeightRequired );
+        if( rc.right >= 0 )
+            bHasPosition = true;
+    }
+
+    if( !bHasPosition )
+    {
+        // The dialog is too small for the candidate window.
+        // Fall back to render at 0, 0.  Some part of the window
+        // will be cut off.
+        rc.left = 0;
+        rc.right = nWidthRequired;
+    }
+
+    // If we are rendering the candidate window, save the position
+    // so that mouse clicks are checked properly.
+    if( !bReading )
+        s_CandList.rcCandidate = rc;
+
+    // Render the elements
+    m_pDialog->DrawRect( &rc, TextBkColor );
+    if( ( s_bVerticalCand && !bReading ) ||
+        ( !s_bHorizontalReading && bReading ) )
+    {
+        // Vertical candidate window
+        for( UINT i = 0; i < nNumEntries; ++i )
+        {
+            // Here we are rendering one line at a time
+            rc.bottom = rc.top + nSingleLineHeight;
+            // Use a different color for the selected string
+            if( s_CandList.dwSelection == i )
+            {
+                m_pDialog->DrawRect( &rc, SelBkColor );
+                m_Elements.GetAt( 1 )->FontColor.Current = SelTextColor;
+            } else
+                m_Elements.GetAt( 1 )->FontColor.Current = TextColor;
+
+            m_pDialog->DrawText( s_CandList.awszCandidate[i], m_Elements.GetAt( 1 ), &rc );
+
+            rc.top += nSingleLineHeight;
+        }
+    } else
+    {
+        // Horizontal candidate window
+        m_Elements.GetAt( 1 )->FontColor.Current = TextColor;
+        if( bReading )
+            m_pDialog->DrawText( s_wszReadingString, m_Elements.GetAt( 1 ), &rc );
+        else
+            m_pDialog->DrawText( s_CandList.HoriCand.GetBuffer(), m_Elements.GetAt( 1 ), &rc );
+
+        // Render the selected entry differently
+        if( !bReading )
+        {
+            int nXLeft, nXRight;
+            s_CandList.HoriCand.CPtoX( s_CandList.nFirstSelected, FALSE, &nXLeft );
+            s_CandList.HoriCand.CPtoX( s_CandList.nFirstSelected + s_CandList.nHoriSelectedLen, FALSE, &nXRight );
+
+            rc.right = rc.left + nXRight;
+            rc.left += nXLeft;
+            m_pDialog->DrawRect( &rc, SelBkColor );
+            m_Elements.GetAt( 1 )->FontColor.Current = SelTextColor;
+            m_pDialog->DrawText( s_CandList.HoriCand.GetBuffer() + s_CandList.nFirstSelected,
+                                m_Elements.GetAt( 1 ), &rc, false, s_CandList.nHoriSelectedLen );
+        }
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTIMEEditBox::RenderComposition( IDirect3DDevice9* pd3dDevice, float fElapsedTime )
+{
+    RECT rcCaret = { 0, 0, 0, 0 };
+    int nX, nXFirst;
+    m_Buffer.CPtoX( m_nCaret, FALSE, &nX );
+    m_Buffer.CPtoX( m_nFirstVisible, FALSE, &nXFirst );
+    CDXUTElement *pElement = m_Elements.GetAt( 1 );
+
+    // Get the required width
+    RECT rc = { m_rcText.left + nX - nXFirst, m_rcText.top,
+                m_rcText.left + nX - nXFirst, m_rcText.bottom };
+    m_pDialog->CalcTextRect( s_CompString.GetBuffer(), pElement, &rc );
+
+    // If the composition string is too long to fit within
+    // the text area, move it to below the current line.
+    // This matches the behavior of the default IME.
+    if( rc.right > m_rcText.right )
+        OffsetRect( &rc, m_rcText.left - rc.left, rc.bottom - rc.top );
+
+    // Save the rectangle position for processing highlighted text.
+    RECT rcFirst = rc;
+
+    // Update s_ptCompString for RenderCandidateReadingWindow().
+    s_ptCompString.x = rc.left; s_ptCompString.y = rc.top;
+
+    D3DCOLOR TextColor = m_CompColor;
+    // Render the window and string.
+    // If the string is too long, we must wrap the line.
+    pElement->FontColor.Current = TextColor;
+    const WCHAR *pwszComp = s_CompString.GetBuffer();
+    int nCharLeft = s_CompString.GetTextSize();
+    for( ; ; )
+    {
+        // Find the last character that can be drawn on the same line.
+        int nLastInLine;
+        int bTrail;
+        s_CompString.XtoCP( m_rcText.right - rc.left, &nLastInLine, &bTrail );
+        int nNumCharToDraw = __min( nCharLeft, nLastInLine );
+        m_pDialog->CalcTextRect( pwszComp, pElement, &rc, nNumCharToDraw );
+
+        // Draw the background
+        // For Korean IME, blink the composition window background as if it
+        // is a cursor.
+        if( GetPrimaryLanguage() == LANG_KOREAN )
+        {
+            if( m_bCaretOn )
+            {
+                m_pDialog->DrawRect( &rc, m_CompWinColor );
+            }
+            else
+            {
+                // Not drawing composition string background. We
+                // use the editbox's text color for composition
+                // string text.
+                TextColor = m_Elements.GetAt(0)->FontColor.States[DXUT_STATE_NORMAL];
+            }
+        } else
+        {
+            // Non-Korean IME. Always draw composition background.
+            m_pDialog->DrawRect( &rc, m_CompWinColor );
+        }
+
+        // Draw the text
+        pElement->FontColor.Current = TextColor;
+        m_pDialog->DrawText( pwszComp, pElement, &rc, false, nNumCharToDraw );
+
+        // Advance pointer and counter
+        nCharLeft -= nNumCharToDraw;
+        pwszComp += nNumCharToDraw;
+        if( nCharLeft <= 0 )
+            break;
+
+        // Advance rectangle coordinates to beginning of next line
+        OffsetRect( &rc, m_rcText.left - rc.left, rc.bottom - rc.top );
+    }
+
+    // Load the rect for the first line again.
+    rc = rcFirst;
+
+    // Inspect each character in the comp string.
+    // For target-converted and target-non-converted characters,
+    // we display a different background color so they appear highlighted.
+    int nCharFirst = 0;
+    nXFirst = 0;
+    s_nFirstTargetConv = -1;
+    BYTE *pAttr;
+    const WCHAR *pcComp;
+    for( pcComp = s_CompString.GetBuffer(), pAttr = s_abCompStringAttr;
+          *pcComp != L'\0'; ++pcComp, ++pAttr )
+    {
+        D3DCOLOR bkColor;
+
+        // Render a different background for this character
+        int nXLeft, nXRight;
+        s_CompString.CPtoX( int(pcComp - s_CompString.GetBuffer()), FALSE, &nXLeft );
+        s_CompString.CPtoX( int(pcComp - s_CompString.GetBuffer()), TRUE, &nXRight );
+
+        // Check if this character is off the right edge and should
+        // be wrapped to the next line.
+        if( nXRight - nXFirst > m_rcText.right - rc.left )
+        {
+            // Advance rectangle coordinates to beginning of next line
+            OffsetRect( &rc, m_rcText.left - rc.left, rc.bottom - rc.top );
+
+            // Update the line's first character information
+            nCharFirst = int(pcComp - s_CompString.GetBuffer());
+            s_CompString.CPtoX( nCharFirst, FALSE, &nXFirst );
+        }
+
+        // If the caret is on this character, save the coordinates
+        // for drawing the caret later.
+        if( s_nCompCaret == int(pcComp - s_CompString.GetBuffer()) )
+        {
+            rcCaret = rc;
+            rcCaret.left += nXLeft - nXFirst - 1;
+            rcCaret.right = rcCaret.left + 2;
+        }
+
+        // Set up color based on the character attribute
+        if( *pAttr == ATTR_TARGET_CONVERTED )
+        {
+            pElement->FontColor.Current = m_CompTargetColor;
+            bkColor = m_CompTargetBkColor;
+        }
+        else
+        if( *pAttr == ATTR_TARGET_NOTCONVERTED )
+        {
+            pElement->FontColor.Current = m_CompTargetNonColor;
+            bkColor = m_CompTargetNonBkColor;
+        }
+        else
+        {
+            continue;
+        }
+
+        RECT rcTarget = { rc.left + nXLeft - nXFirst, rc.top, rc.left + nXRight - nXFirst, rc.bottom };
+        m_pDialog->DrawRect( &rcTarget, bkColor );
+        m_pDialog->DrawText( pcComp, pElement, &rcTarget, false, 1 );
+
+        // Record the first target converted character's index
+        if( -1 == s_nFirstTargetConv )
+            s_nFirstTargetConv = int(pAttr - s_abCompStringAttr);
+    }
+
+    // Render the composition caret
+    if( m_bCaretOn )
+    {
+        // If the caret is at the very end, its position would not have
+        // been computed in the above loop.  We compute it here.
+        if( s_nCompCaret == s_CompString.GetTextSize() )
+        {
+            s_CompString.CPtoX( s_nCompCaret, FALSE, &nX );
+            rcCaret = rc;
+            rcCaret.left += nX - nXFirst - 1;
+            rcCaret.right = rcCaret.left + 2;
+        }
+
+        m_pDialog->DrawRect( &rcCaret, m_CompCaretColor );
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTIMEEditBox::RenderIndicator( IDirect3DDevice9* pd3dDevice, float fElapsedTime )
+{
+    CDXUTElement *pElement = m_Elements.GetAt( 9 );
+    pElement->TextureColor.Blend( DXUT_STATE_NORMAL, fElapsedTime );
+
+    m_pDialog->DrawSprite( pElement, &m_rcIndicator );
+    RECT rc = m_rcIndicator;
+    InflateRect( &rc, -m_nSpacing, -m_nSpacing );
+    pElement->FontColor.Current = s_ImeState == IMEUI_STATE_ON && s_bEnableImeSystem ? m_IndicatorImeColor : m_IndicatorEngColor;
+    RECT rcCalc = { 0, 0, 0, 0 };
+    // If IME system is off, draw English indicator.
+    WCHAR *pwszIndicator = s_bEnableImeSystem ? s_wszCurrIndicator : s_aszIndicator[0];
+
+    m_pDialog->CalcTextRect( pwszIndicator, pElement, &rcCalc );
+    m_pDialog->DrawText( pwszIndicator, pElement, &rc );
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTIMEEditBox::Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime )
+{
+    if( m_bVisible == false )
+        return;
+
+    // If we have not computed the indicator symbol width,
+    // do it.
+    if( !m_nIndicatorWidth )
+    {
+        for( int i = 0; i < 5; ++i )
+        {
+            RECT rc = { 0, 0, 0, 0 };
+            m_pDialog->CalcTextRect( s_aszIndicator[i], m_Elements.GetAt( 9 ), &rc );
+            m_nIndicatorWidth = __max( m_nIndicatorWidth, rc.right - rc.left );
+        }
+        // Update the rectangles now that we have the indicator's width
+        UpdateRects();
+    }
+
+    // Let the parent render first (edit control)
+    CDXUTEditBox::Render( pd3dDevice, fElapsedTime );
+
+    CDXUTElement* pElement = GetElement( 1 );
+    if( pElement )
+    {
+        s_CompString.SetFontNode( m_pDialog->GetFont( pElement->iFont ) );
+        s_CandList.HoriCand.SetFontNode( m_pDialog->GetFont( pElement->iFont ) );
+    }
+
+    //
+    // Now render the IME elements
+    //
+    if( m_bHasFocus )
+    {
+        // Render the input locale indicator
+        RenderIndicator( pd3dDevice, fElapsedTime );
+
+        // Display the composition string.
+        // This method should also update s_ptCompString
+        // for RenderCandidateReadingWindow.
+        RenderComposition( pd3dDevice, fElapsedTime );
+
+        // Display the reading/candidate window. RenderCandidateReadingWindow()
+        // uses s_ptCompString to position itself.  s_ptCompString must have
+        // been filled in by RenderComposition().
+        if( s_bShowReadingWindow )
+            // Reading window
+            RenderCandidateReadingWindow( pd3dDevice, fElapsedTime, true );
+        else
+        if( s_CandList.bShowWindow )
+            // Candidate list window
+            RenderCandidateReadingWindow( pd3dDevice, fElapsedTime, false );
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+void CUniBuffer::Initialize()
+{
+    if( s_hDll ) // Only need to do once
+        return;
+
+    WCHAR wszPath[MAX_PATH+1];
+    if( !::GetSystemDirectory( wszPath, MAX_PATH+1 ) )
+        return;
+
+    // Verify whether it is safe to concatenate these strings
+    int len1 = lstrlen(wszPath);
+    int len2 = lstrlen(UNISCRIBE_DLLNAME);
+    if (len1 + len2 > MAX_PATH)
+    {
+        return;
+    }
+
+    // We have verified that the concatenated string will fit into wszPath,
+    // so it is safe to concatenate them.
+    StringCchCat( wszPath, MAX_PATH, UNISCRIBE_DLLNAME );
+
+    s_hDll = LoadLibrary( wszPath );
+    if( s_hDll )
+    {
+        FARPROC Temp;
+        GETPROCADDRESS( s_hDll, ScriptApplyDigitSubstitution, Temp );
+        GETPROCADDRESS( s_hDll, ScriptStringAnalyse, Temp );
+        GETPROCADDRESS( s_hDll, ScriptStringCPtoX, Temp );
+        GETPROCADDRESS( s_hDll, ScriptStringXtoCP, Temp );
+        GETPROCADDRESS( s_hDll, ScriptStringFree, Temp );
+        GETPROCADDRESS( s_hDll, ScriptString_pLogAttr, Temp );
+        GETPROCADDRESS( s_hDll, ScriptString_pcOutChars, Temp );
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+void CUniBuffer::Uninitialize()
+{
+    if( s_hDll )
+    {
+        PLACEHOLDERPROC( ScriptApplyDigitSubstitution );
+        PLACEHOLDERPROC( ScriptStringAnalyse );
+        PLACEHOLDERPROC( ScriptStringCPtoX );
+        PLACEHOLDERPROC( ScriptStringXtoCP );
+        PLACEHOLDERPROC( ScriptStringFree );
+        PLACEHOLDERPROC( ScriptString_pLogAttr );
+        PLACEHOLDERPROC( ScriptString_pcOutChars );
+
+        FreeLibrary( s_hDll );
+        s_hDll = NULL;
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CUniBuffer::SetBufferSize( int nNewSize )
+{
+    // If the current size is already the maximum allowed,
+    // we can't possibly allocate more.
+    if( m_nBufferSize == DXUT_MAX_EDITBOXLENGTH )
+        return false;
+
+    int nAllocateSize = ( nNewSize == -1 || nNewSize < m_nBufferSize * 2 ) ? ( m_nBufferSize ? m_nBufferSize * 2 : 256 ) : nNewSize * 2;
+
+    // Cap the buffer size at the maximum allowed.
+    if( nAllocateSize > DXUT_MAX_EDITBOXLENGTH )
+        nAllocateSize = DXUT_MAX_EDITBOXLENGTH;
+
+    WCHAR *pTempBuffer = new WCHAR[nAllocateSize];
+    if( !pTempBuffer )
+        return false;
+    if( m_pwszBuffer )
+    {
+        CopyMemory( pTempBuffer, m_pwszBuffer, m_nBufferSize * sizeof(WCHAR) );
+        delete[] m_pwszBuffer;
+    }
+    else
+    {
+        ZeroMemory( pTempBuffer, sizeof(WCHAR) * nAllocateSize );
+    }
+
+    m_pwszBuffer = pTempBuffer;
+    m_nBufferSize = nAllocateSize;
+    return true;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Uniscribe -- Analyse() analyses the string in the buffer
+//--------------------------------------------------------------------------------------
+HRESULT CUniBuffer::Analyse()
+{
+    if( m_Analysis )
+        _ScriptStringFree( &m_Analysis );
+
+    SCRIPT_CONTROL ScriptControl; // For uniscribe
+    SCRIPT_STATE   ScriptState;   // For uniscribe
+    ZeroMemory( &ScriptControl, sizeof(ScriptControl) );
+    ZeroMemory( &ScriptState, sizeof(ScriptState) );
+    _ScriptApplyDigitSubstitution ( NULL, &ScriptControl, &ScriptState );
+
+    if( !m_pFontNode )
+        return E_FAIL;
+
+    HRESULT hr = _ScriptStringAnalyse( m_pFontNode->pFont ? m_pFontNode->pFont->GetDC() : NULL,
+                                       m_pwszBuffer,
+                                       lstrlenW( m_pwszBuffer ) + 1,  // NULL is also analyzed.
+                                       lstrlenW( m_pwszBuffer ) * 3 / 2 + 16,
+                                       -1,
+                                       SSA_BREAK | SSA_GLYPHS | SSA_FALLBACK | SSA_LINK,
+                                       0,
+                                       &ScriptControl,
+                                       &ScriptState,
+                                       NULL,
+                                       NULL,
+                                       NULL,
+                                       &m_Analysis );
+    if( SUCCEEDED( hr ) )
+        m_bAnalyseRequired = false;  // Analysis is up-to-date
+    return hr;
+}
+
+
+//--------------------------------------------------------------------------------------
+CUniBuffer::CUniBuffer( int nInitialSize )
+{
+    CUniBuffer::Initialize();  // ensure static vars are properly init'ed first
+
+    m_nBufferSize = 0;
+    m_pwszBuffer = NULL;
+    m_bAnalyseRequired = true;
+    m_Analysis = NULL;
+    m_pFontNode = NULL;
+    
+    if( nInitialSize > 0 )
+        SetBufferSize( nInitialSize );
+}
+
+
+//--------------------------------------------------------------------------------------
+CUniBuffer::~CUniBuffer()
+{
+    delete[] m_pwszBuffer;
+    if( m_Analysis )
+        _ScriptStringFree( &m_Analysis );
+}
+
+
+//--------------------------------------------------------------------------------------
+WCHAR& CUniBuffer::operator[]( int n )  // No param checking
+{
+    // This version of operator[] is called only
+    // if we are asking for write access, so
+    // re-analysis is required.
+    m_bAnalyseRequired = true;
+    return m_pwszBuffer[n];
+}
+
+
+//--------------------------------------------------------------------------------------
+void CUniBuffer::Clear()
+{
+    *m_pwszBuffer = L'\0';
+    m_bAnalyseRequired = true;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Inserts the char at specified index.
+// If nIndex == -1, insert to the end.
+//--------------------------------------------------------------------------------------
+bool CUniBuffer::InsertChar( int nIndex, WCHAR wChar )
+{
+    assert( nIndex >= 0 );
+
+    if( nIndex < 0 || nIndex > lstrlenW( m_pwszBuffer ) )
+        return false;  // invalid index
+
+    // Check for maximum length allowed
+    if( GetTextSize() + 1 >= DXUT_MAX_EDITBOXLENGTH )
+        return false;
+
+    if( lstrlenW( m_pwszBuffer ) + 1 >= m_nBufferSize )
+    {
+        if( !SetBufferSize( -1 ) )
+            return false;  // out of memory
+    }
+
+    assert( m_nBufferSize >= 2 );
+
+    // Shift the characters after the index, start by copying the null terminator
+    WCHAR* dest = m_pwszBuffer + lstrlenW(m_pwszBuffer)+1;
+    WCHAR* stop = m_pwszBuffer + nIndex;
+    WCHAR* src = dest - 1;
+
+    while( dest > stop )
+    {
+        *dest-- = *src--;
+    }
+
+    // Set new character
+    m_pwszBuffer[ nIndex ] = wChar;
+    m_bAnalyseRequired = true;
+
+    return true;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Removes the char at specified index.
+// If nIndex == -1, remove the last char.
+//--------------------------------------------------------------------------------------
+bool CUniBuffer::RemoveChar( int nIndex )
+{
+    if( !lstrlenW( m_pwszBuffer ) || nIndex < 0 || nIndex >= lstrlenW( m_pwszBuffer ) )
+        return false;  // Invalid index
+
+    MoveMemory( m_pwszBuffer + nIndex, m_pwszBuffer + nIndex + 1, sizeof(WCHAR) * ( lstrlenW( m_pwszBuffer ) - nIndex ) );
+    m_bAnalyseRequired = true;
+    return true;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Inserts the first nCount characters of the string pStr at specified index.
+// If nCount == -1, the entire string is inserted.
+// If nIndex == -1, insert to the end.
+//--------------------------------------------------------------------------------------
+bool CUniBuffer::InsertString( int nIndex, const WCHAR *pStr, int nCount )
+{
+    assert( nIndex >= 0 );
+
+    if( nIndex > lstrlenW( m_pwszBuffer ) )
+        return false;  // invalid index
+
+    if( -1 == nCount )
+        nCount = lstrlenW( pStr );
+
+    // Check for maximum length allowed
+    if( GetTextSize() + nCount >= DXUT_MAX_EDITBOXLENGTH )
+        return false;
+
+    if( lstrlenW( m_pwszBuffer ) + nCount >= m_nBufferSize )
+    {
+        if( !SetBufferSize( lstrlenW( m_pwszBuffer ) + nCount + 1 ) )
+            return false;  // out of memory
+    }
+
+    MoveMemory( m_pwszBuffer + nIndex + nCount, m_pwszBuffer + nIndex, sizeof(WCHAR) * ( lstrlenW( m_pwszBuffer ) - nIndex + 1 ) );
+    CopyMemory( m_pwszBuffer + nIndex, pStr, nCount * sizeof(WCHAR) );
+    m_bAnalyseRequired = true;
+
+    return true;
+}
+
+
+//--------------------------------------------------------------------------------------
+bool CUniBuffer::SetText( LPCWSTR wszText )
+{
+    assert( wszText != NULL );
+
+    int nRequired = int(wcslen( wszText ) + 1);
+
+    // Check for maximum length allowed
+    if( nRequired >= DXUT_MAX_EDITBOXLENGTH )
+        return false;
+
+    while( GetBufferSize() < nRequired )
+        if( !SetBufferSize( -1 ) )
+            break;
+    // Check again in case out of memory occurred inside while loop.
+    if( GetBufferSize() >= nRequired )
+    {
+        StringCchCopy( m_pwszBuffer, GetBufferSize(), wszText );
+        m_bAnalyseRequired = true;
+        return true;
+    }
+    else
+        return false;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CUniBuffer::CPtoX( int nCP, BOOL bTrail, int *pX )
+{
+    assert( pX );
+    *pX = 0;  // Default
+
+    HRESULT hr = S_OK;
+    if( m_bAnalyseRequired )
+        hr = Analyse();
+
+    if( SUCCEEDED( hr ) )
+        hr = _ScriptStringCPtoX( m_Analysis, nCP, bTrail, pX );
+
+    return hr;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CUniBuffer::XtoCP( int nX, int *pCP, int *pnTrail )
+{
+    assert( pCP && pnTrail );
+    *pCP = 0; *pnTrail = FALSE;  // Default
+
+    HRESULT hr = S_OK;
+    if( m_bAnalyseRequired )
+        hr = Analyse();
+
+    if( SUCCEEDED( hr ) )
+        hr = _ScriptStringXtoCP( m_Analysis, nX, pCP, pnTrail );
+
+    // If the coordinate falls outside the text region, we
+    // can get character positions that don't exist.  We must
+    // filter them here and convert them to those that do exist.
+    if( *pCP == -1 && *pnTrail == TRUE )
+    {
+        *pCP = 0; *pnTrail = FALSE;
+    } else
+    if( *pCP > lstrlenW( m_pwszBuffer ) && *pnTrail == FALSE )
+    {
+        *pCP = lstrlenW( m_pwszBuffer ); *pnTrail = TRUE;
+    }
+
+    return hr;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CUniBuffer::GetPriorItemPos( int nCP, int *pPrior )
+{
+    *pPrior = nCP;  // Default is the char itself
+
+    if( m_bAnalyseRequired )
+        if( FAILED( Analyse() ) )
+            return;
+
+    const SCRIPT_LOGATTR *pLogAttr = _ScriptString_pLogAttr( m_Analysis );
+    if( !pLogAttr )
+        return;
+
+    if( !_ScriptString_pcOutChars( m_Analysis ) )
+        return;
+    int nInitial = *_ScriptString_pcOutChars( m_Analysis );
+    if( nCP - 1 < nInitial )
+        nInitial = nCP - 1;
+    for( int i = nInitial; i > 0; --i )
+        if( pLogAttr[i].fWordStop ||       // Either the fWordStop flag is set
+            ( !pLogAttr[i].fWhiteSpace &&  // Or the previous char is whitespace but this isn't.
+                pLogAttr[i-1].fWhiteSpace ) )
+        {
+            *pPrior = i;
+            return;
+        }
+    // We have reached index 0.  0 is always a break point, so simply return it.
+    *pPrior = 0;
+}
+    
+
+//--------------------------------------------------------------------------------------
+void CUniBuffer::GetNextItemPos( int nCP, int *pPrior )
+{
+    *pPrior = nCP;  // Default is the char itself
+
+    HRESULT hr = S_OK;
+    if( m_bAnalyseRequired )
+        hr = Analyse();
+    if( FAILED( hr ) )
+        return;
+
+    const SCRIPT_LOGATTR *pLogAttr = _ScriptString_pLogAttr( m_Analysis );
+    if( !pLogAttr )
+        return;
+
+    if( !_ScriptString_pcOutChars( m_Analysis ) )
+        return;
+    int nInitial = *_ScriptString_pcOutChars( m_Analysis );
+    if( nCP + 1 < nInitial )
+        nInitial = nCP + 1;
+    for( int i = nInitial; i < *_ScriptString_pcOutChars( m_Analysis ) - 1; ++i )
+    {
+        if( pLogAttr[i].fWordStop )      // Either the fWordStop flag is set
+        {
+            *pPrior = i;
+            return;
+        }
+        else
+        if( pLogAttr[i].fWhiteSpace &&  // Or this whitespace but the next char isn't.
+            !pLogAttr[i+1].fWhiteSpace )
+        {
+            *pPrior = i+1;  // The next char is a word stop
+            return;
+        }
+    }
+    // We have reached the end. It's always a word stop, so simply return it.
+    *pPrior = *_ScriptString_pcOutChars( m_Analysis ) - 1;
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTEditBox::ResetCaretBlink()
+{
+    m_bCaretOn = true;
+    m_dfLastBlink = DXUTGetGlobalTimer()->GetAbsoluteTime();
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTIMEEditBox::Initialize()
+{
+    if( s_hDllImm32 ) // Only need to do once
+        return;
+
+    FARPROC Temp;
+
+    s_CompString.SetBufferSize( MAX_COMPSTRING_SIZE );
+
+    WCHAR wszPath[MAX_PATH+1];
+    if( !::GetSystemDirectory( wszPath, MAX_PATH+1 ) )
+        return;
+    StringCchCat( wszPath, MAX_PATH, IMM32_DLLNAME );
+    s_hDllImm32 = LoadLibrary( wszPath );
+    if( s_hDllImm32 )
+    {
+        GETPROCADDRESS( s_hDllImm32, ImmLockIMC, Temp );
+        GETPROCADDRESS( s_hDllImm32, ImmUnlockIMC, Temp );
+        GETPROCADDRESS( s_hDllImm32, ImmLockIMCC, Temp );
+        GETPROCADDRESS( s_hDllImm32, ImmUnlockIMCC, Temp );
+        GETPROCADDRESS( s_hDllImm32, ImmDisableTextFrameService, Temp );
+        GETPROCADDRESS( s_hDllImm32, ImmGetCompositionStringW, Temp );
+        GETPROCADDRESS( s_hDllImm32, ImmGetCandidateListW, Temp );
+        GETPROCADDRESS( s_hDllImm32, ImmGetContext, Temp );
+        GETPROCADDRESS( s_hDllImm32, ImmReleaseContext, Temp );
+        GETPROCADDRESS( s_hDllImm32, ImmAssociateContext, Temp );
+        GETPROCADDRESS( s_hDllImm32, ImmGetOpenStatus, Temp );
+        GETPROCADDRESS( s_hDllImm32, ImmSetOpenStatus, Temp );
+        GETPROCADDRESS( s_hDllImm32, ImmGetConversionStatus, Temp );
+        GETPROCADDRESS( s_hDllImm32, ImmGetDefaultIMEWnd, Temp );
+        GETPROCADDRESS( s_hDllImm32, ImmGetIMEFileNameA, Temp );
+        GETPROCADDRESS( s_hDllImm32, ImmGetVirtualKey, Temp );
+        GETPROCADDRESS( s_hDllImm32, ImmNotifyIME, Temp );
+        GETPROCADDRESS( s_hDllImm32, ImmSetConversionStatus, Temp );
+        GETPROCADDRESS( s_hDllImm32, ImmSimulateHotKey, Temp );
+        GETPROCADDRESS( s_hDllImm32, ImmIsIME, Temp );
+    }
+
+    if( !::GetSystemDirectory( wszPath, MAX_PATH+1 ) )
+        return;
+    StringCchCat( wszPath, MAX_PATH, VER_DLLNAME );
+    s_hDllVer = LoadLibrary( wszPath );
+    if( s_hDllVer )
+    {
+        GETPROCADDRESS( s_hDllVer, VerQueryValueA, Temp );
+        GETPROCADDRESS( s_hDllVer, GetFileVersionInfoA, Temp );
+        GETPROCADDRESS( s_hDllVer, GetFileVersionInfoSizeA, Temp );
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTIMEEditBox::Uninitialize()
+{
+    if( s_hDllImm32 )
+    {
+        PLACEHOLDERPROC( ImmLockIMC );
+        PLACEHOLDERPROC( ImmUnlockIMC );
+        PLACEHOLDERPROC( ImmLockIMCC );
+        PLACEHOLDERPROC( ImmUnlockIMCC );
+        PLACEHOLDERPROC( ImmDisableTextFrameService );
+        PLACEHOLDERPROC( ImmGetCompositionStringW );
+        PLACEHOLDERPROC( ImmGetCandidateListW );
+        PLACEHOLDERPROC( ImmGetContext );
+        PLACEHOLDERPROC( ImmReleaseContext );
+        PLACEHOLDERPROC( ImmAssociateContext );
+        PLACEHOLDERPROC( ImmGetOpenStatus );
+        PLACEHOLDERPROC( ImmSetOpenStatus );
+        PLACEHOLDERPROC( ImmGetConversionStatus );
+        PLACEHOLDERPROC( ImmGetDefaultIMEWnd );
+        PLACEHOLDERPROC( ImmGetIMEFileNameA );
+        PLACEHOLDERPROC( ImmGetVirtualKey );
+        PLACEHOLDERPROC( ImmNotifyIME );
+        PLACEHOLDERPROC( ImmSetConversionStatus );
+        PLACEHOLDERPROC( ImmSimulateHotKey );
+        PLACEHOLDERPROC( ImmIsIME );
+
+        FreeLibrary( s_hDllImm32 );
+        s_hDllImm32 = NULL;
+    }
+    if( s_hDllIme )
+    {
+        PLACEHOLDERPROC( GetReadingString );
+        PLACEHOLDERPROC( ShowReadingWindow );
+
+        FreeLibrary( s_hDllIme );
+        s_hDllIme = NULL;
+    }
+    if( s_hDllVer )
+    {
+        PLACEHOLDERPROC( VerQueryValueA );
+        PLACEHOLDERPROC( GetFileVersionInfoA );
+        PLACEHOLDERPROC( GetFileVersionInfoSizeA );
+
+        FreeLibrary( s_hDllVer );
+        s_hDllVer = NULL;
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+void DXUTBlendColor::Init( D3DCOLOR defaultColor, D3DCOLOR disabledColor, D3DCOLOR hiddenColor )
+{
+    for( int i=0; i < MAX_CONTROL_STATES; i++ )
+    {
+        States[ i ] = defaultColor;
+    }
+
+    States[ DXUT_STATE_DISABLED ] = disabledColor;
+    States[ DXUT_STATE_HIDDEN ] = hiddenColor;
+    Current = hiddenColor;
+}
+
+
+//--------------------------------------------------------------------------------------
+void DXUTBlendColor::Blend( UINT iState, float fElapsedTime, float fRate )
+{
+    D3DXCOLOR destColor = States[ iState ];
+    D3DXColorLerp( &Current, &Current, &destColor, 1.0f - powf( fRate, 30 * fElapsedTime ) );
+}
+
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTElement::SetTexture( UINT iTexture, RECT* prcTexture, D3DCOLOR defaultTextureColor )
+{
+    this->iTexture = iTexture;
+    
+    if( prcTexture )
+        rcTexture = *prcTexture;
+    else
+        SetRectEmpty( &rcTexture );
+    
+    TextureColor.Init( defaultTextureColor );
+}
+    
+
+//--------------------------------------------------------------------------------------
+void CDXUTElement::SetFont( UINT iFont, D3DCOLOR defaultFontColor, DWORD dwTextFormat )
+{
+    this->iFont = iFont;
+    this->dwTextFormat = dwTextFormat;
+
+    FontColor.Init( defaultFontColor );
+}
+
+
+//--------------------------------------------------------------------------------------
+void CDXUTElement::Refresh()
+{
+    TextureColor.Current = TextureColor.States[ DXUT_STATE_HIDDEN ];
+    FontColor.Current = FontColor.States[ DXUT_STATE_HIDDEN ];
+}
+
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/dxstdafx.h
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/dxstdafx.h	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/dxstdafx.h	(revision 761)
@@ -0,0 +1,131 @@
+//--------------------------------------------------------------------------------------
+// File: DxStdAfx.h
+//
+// Desc: Standard includes and precompiled headers for DXUT
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//--------------------------------------------------------------------------------------
+#pragma once
+#ifndef DXSDK_STDAFX_H
+#define DXSDK_STDAFX_H
+
+#ifndef STRICT
+#define STRICT
+#endif
+
+// If app hasn't choosen, set to work with Windows 98, Windows Me, Windows 2000, Windows XP and beyond
+#ifndef WINVER
+#define WINVER         0x0410
+#endif
+#ifndef _WIN32_WINDOWS
+#define _WIN32_WINDOWS 0x0410 
+#endif
+#ifndef _WIN32_WINNT
+#define _WIN32_WINNT   0x0500 
+#endif
+
+// #define DXUT_AUTOLIB to automatically include the libs needed for DXUT 
+#ifdef DXUT_AUTOLIB
+#pragma comment( lib, "dxerr9.lib" )
+#pragma comment( lib, "dxguid.lib" )
+#if defined(DEBUG) || defined(_DEBUG)
+#pragma comment( lib, "d3dx9d.lib" )
+#else
+#pragma comment( lib, "d3dx9.lib" )
+#endif
+#pragma comment( lib, "d3d9.lib" )
+#pragma comment( lib, "winmm.lib" )
+#pragma comment( lib, "comctl32.lib" )
+#endif
+
+#pragma warning( disable : 4100 ) // disable unreference formal parameter warnings for /W4 builds
+
+#include <windows.h>
+#include <assert.h>
+#include <wchar.h>
+#include <mmsystem.h>
+#include <commctrl.h> // for InitCommonControls() 
+#include <shellapi.h> // for ExtractIcon()
+#include <new.h>      // for placement new
+#include <math.h>      
+#include <limits.h>      
+#include <stdio.h>
+#include <XInput.h> // Header for XInput APIs
+
+// CRT's memory leak detection
+#if defined(DEBUG) || defined(_DEBUG)
+#include <crtdbg.h>
+#endif
+
+// Enable extra D3D debugging in debug builds if using the debug DirectX runtime.  
+// This makes D3D objects work well in the debugger watch window, but slows down 
+// performance slightly.
+#if defined(DEBUG) || defined(_DEBUG)
+#ifndef D3D_DEBUG_INFO
+#define D3D_DEBUG_INFO
+#endif
+#endif
+
+// Direct3D includes
+#include <d3d9.h>
+#include <d3dx9.h>
+#include <dxerr9.h>
+
+// DirectSound includes
+#include <mmsystem.h>
+#include <mmreg.h>
+#include <dsound.h>
+
+// strsafe.h deprecates old unsecure string functions.  If you 
+// really do not want to it to (not recommended), then uncomment the next line 
+//#define STRSAFE_NO_DEPRECATE
+
+#ifndef STRSAFE_NO_DEPRECATE
+#pragma deprecated("strncpy")
+#pragma deprecated("wcsncpy")
+#pragma deprecated("_tcsncpy")
+#pragma deprecated("wcsncat")
+#pragma deprecated("strncat")
+#pragma deprecated("_tcsncat")
+#endif
+
+#pragma warning( disable : 4996 ) // disable deprecated warning 
+#include <strsafe.h>
+#pragma warning( default : 4996 ) 
+
+#include "DXUT.h"
+#include "DXUTmisc.h"
+#include "DXUTenum.h"
+#include "DXUTmesh.h"
+#include "DXUTgui.h"
+#include "DXUTsettingsDlg.h"
+#include "DXUTSound.h"
+#include "DXUTRes.h"
+
+#if defined(DEBUG) || defined(_DEBUG)
+#ifndef V
+#define V(x)           { hr = x; if( FAILED(hr) ) { DXUTTrace( __FILE__, (DWORD)__LINE__, hr, L#x, true ); } }
+#endif
+#ifndef V_RETURN
+#define V_RETURN(x)    { hr = x; if( FAILED(hr) ) { return DXUTTrace( __FILE__, (DWORD)__LINE__, hr, L#x, true ); } }
+#endif
+#else
+#ifndef V
+#define V(x)           { hr = x; }
+#endif
+#ifndef V_RETURN
+#define V_RETURN(x)    { hr = x; if( FAILED(hr) ) { return hr; } }
+#endif
+#endif
+
+#ifndef SAFE_DELETE
+#define SAFE_DELETE(p)       { if(p) { delete (p);     (p)=NULL; } }
+#endif    
+#ifndef SAFE_DELETE_ARRAY
+#define SAFE_DELETE_ARRAY(p) { if(p) { delete[] (p);   (p)=NULL; } }
+#endif    
+#ifndef SAFE_RELEASE
+#define SAFE_RELEASE(p)      { if(p) { (p)->Release(); (p)=NULL; } }
+#endif
+
+#endif // !defined(DXSDK_STDAFX_H)
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTSettingsDlg.cpp
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTSettingsDlg.cpp	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTSettingsDlg.cpp	(revision 761)
@@ -0,0 +1,1365 @@
+//--------------------------------------------------------------------------------------
+// File: DXUTSettingsDlg.cpp
+//
+// Dialog for selection of device settings 
+//
+// Copyright (c) Microsoft Corporation. All rights reserved
+//--------------------------------------------------------------------------------------
+#include "dxstdafx.h"
+#include "DXUTgui.h"
+#include "DXUTsettingsDlg.h"
+#undef min // use __min instead
+#undef max // use __max instead
+
+
+//--------------------------------------------------------------------------------------
+// Internal functions forward declarations
+//--------------------------------------------------------------------------------------
+WCHAR* DXUTPresentIntervalToString( UINT pi );
+WCHAR* DXUTMultisampleTypeToString(D3DMULTISAMPLE_TYPE MultiSampleType);
+WCHAR* DXUTD3DDeviceTypeToString(D3DDEVTYPE devType);
+WCHAR* DXUTVertexProcessingTypeToString(DWORD vpt);
+
+
+//--------------------------------------------------------------------------------------
+// Global state
+//--------------------------------------------------------------------------------------
+DXUTDeviceSettings g_DeviceSettings;
+
+CD3DSettingsDlg* DXUTGetSettingsDialog()
+{
+    // Using an accessor function gives control of the construction order
+    static CD3DSettingsDlg dlg;
+    return &dlg;
+}
+
+
+//--------------------------------------------------------------------------------------
+CD3DSettingsDlg::CD3DSettingsDlg()
+{
+    m_pStateBlock = NULL;
+    m_bActive = false;
+}
+
+
+//--------------------------------------------------------------------------------------
+CD3DSettingsDlg::~CD3DSettingsDlg()
+{
+    OnDestroyDevice();
+}
+
+
+//--------------------------------------------------------------------------------------
+void CD3DSettingsDlg::Init( CDXUTDialogResourceManager* pManager )
+{
+    assert( pManager );
+    m_Dialog.Init( pManager, false );  // Don't register this dialog.
+    CreateControls();
+}
+
+
+//--------------------------------------------------------------------------------------
+void CD3DSettingsDlg::Init( CDXUTDialogResourceManager* pManager, LPCWSTR szControlTextureFileName )
+{
+    assert( pManager );
+    m_Dialog.Init( pManager, false, szControlTextureFileName );  // Don't register this dialog.
+    CreateControls();
+}
+
+
+//--------------------------------------------------------------------------------------
+void CD3DSettingsDlg::Init( CDXUTDialogResourceManager* pManager, LPCWSTR pszControlTextureResourcename, HMODULE hModule )
+{
+    assert( pManager );
+    m_Dialog.Init( pManager, false, pszControlTextureResourcename, hModule );  // Don't register this dialog.
+    CreateControls();
+}
+
+
+//--------------------------------------------------------------------------------------
+void CD3DSettingsDlg::CreateControls()
+{
+    m_Dialog.EnableKeyboardInput( true );
+    m_Dialog.SetFont( 0, L"Arial", 15, FW_NORMAL );
+    m_Dialog.SetFont( 1, L"Arial", 28, FW_BOLD );
+
+    // Right-justify static controls
+    CDXUTElement* pElement = m_Dialog.GetDefaultElement( DXUT_CONTROL_STATIC, 0 );
+    if( pElement )
+    {
+        pElement->dwTextFormat = DT_VCENTER | DT_RIGHT;
+        
+        // Title
+        CDXUTStatic* pStatic = NULL;
+        m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Direct3D Settings", 10, 5, 400, 50, false, &pStatic );
+        pElement = pStatic->GetElement( 0 );
+        pElement->iFont = 1;
+        pElement->dwTextFormat = DT_TOP | DT_LEFT;
+    }
+
+    // DXUTSETTINGSDLG_ADAPTER
+    m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Display Adapter", 10, 50, 180, 23 );
+    m_Dialog.AddComboBox( DXUTSETTINGSDLG_ADAPTER, 200, 50, 300, 23 );
+
+    // DXUTSETTINGSDLG_DEVICE_TYPE
+    m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Render Device", 10, 75, 180, 23 );
+    m_Dialog.AddComboBox( DXUTSETTINGSDLG_DEVICE_TYPE, 200, 75, 300, 23 );
+
+    // DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_FULLSCREEN
+    m_Dialog.AddRadioButton( DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_WINDOWED_GROUP, L"Windowed", 240, 105, 300, 16 );
+    m_Dialog.AddCheckBox( DXUTSETTINGSDLG_DEVICECLIP, L"Clip to device when window spans across multiple monitors", 250, 126, 400, 16 );
+    m_Dialog.AddRadioButton( DXUTSETTINGSDLG_FULLSCREEN, DXUTSETTINGSDLG_WINDOWED_GROUP, L"Full Screen", 240, 147, 300, 16 );
+
+    // DXUTSETTINGSDLG_ADAPTER_FORMAT
+    m_Dialog.AddStatic( DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL, L"Adapter Format", 10, 180, 180, 23 );
+    m_Dialog.AddComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT, 200, 180, 300, 23 );
+
+    // DXUTSETTINGSDLG_RESOLUTION
+    m_Dialog.AddStatic( DXUTSETTINGSDLG_RESOLUTION_LABEL, L"Resolution", 10, 205, 180, 23 );
+    m_Dialog.AddComboBox( DXUTSETTINGSDLG_RESOLUTION, 200, 205, 200, 23 );
+    m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION )->SetDropHeight( 106 );
+
+    // DXUTSETTINGSDLG_RES_SHOW_ALL
+    m_Dialog.AddCheckBox( DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL, L"Show All Aspect Ratios", 420, 205, 200, 23, false );
+
+    // DXUTSETTINGSDLG_REFRESH_RATE
+    m_Dialog.AddStatic( DXUTSETTINGSDLG_REFRESH_RATE_LABEL, L"Refresh Rate", 10, 230, 180, 23 );
+    m_Dialog.AddComboBox( DXUTSETTINGSDLG_REFRESH_RATE, 200, 230, 300, 23 );
+
+    // DXUTSETTINGSDLG_BACK_BUFFER_FORMAT
+    m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Back Buffer Format", 10, 265, 180, 23 );
+    m_Dialog.AddComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT, 200, 265, 300, 23 );
+
+    // DXUTSETTINGSDLG_DEPTH_STENCIL
+    m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Depth/Stencil Format", 10, 290, 180, 23 );
+    m_Dialog.AddComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL, 200, 290, 300, 23 );
+
+    // DXUTSETTINGSDLG_MULTISAMPLE_TYPE
+    m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Multisample Type", 10, 315, 180, 23 );
+    m_Dialog.AddComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE, 200, 315, 300, 23 );
+
+    // DXUTSETTINGSDLG_MULTISAMPLE_QUALITY
+    m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Multisample Quality", 10, 340, 180, 23 );
+    m_Dialog.AddComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY, 200, 340, 300, 23 );
+
+     // DXUTSETTINGSDLG_VERTEX_PROCESSING
+    m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Vertex Processing", 10, 365, 180, 23 );
+    m_Dialog.AddComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING, 200, 365, 300, 23 );
+
+     // DXUTSETTINGSDLG_PRESENT_INTERVAL
+    m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Vertical Sync", 10, 390, 180, 23 );
+    m_Dialog.AddComboBox( DXUTSETTINGSDLG_PRESENT_INTERVAL, 200, 390, 300, 23 );
+    
+    // DXUTSETTINGSDLG_OK, DXUTSETTINGSDLG_CANCEL
+    m_Dialog.AddButton( DXUTSETTINGSDLG_OK, L"OK", 230, 435, 73, 31 );
+    m_Dialog.AddButton( DXUTSETTINGSDLG_CANCEL, L"Cancel", 315, 435, 73, 31, 0, true );
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CD3DSettingsDlg::OnCreateDevice( IDirect3DDevice9* pd3dDevice )
+{
+    if( pd3dDevice == NULL )
+        return DXUT_ERR_MSGBOX( L"CD3DSettingsDlg::OnCreatedDevice", E_INVALIDARG );
+
+    // Create the fonts/textures 
+    m_Dialog.SetCallback( StaticOnEvent, (void*) this );
+  
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+// Changes the UI defaults to the current device settings
+//--------------------------------------------------------------------------------------
+HRESULT CD3DSettingsDlg::Refresh()
+{
+    HRESULT hr = S_OK;
+
+    CD3DEnumeration* pD3DEnum = DXUTGetEnumeration();
+    g_DeviceSettings = DXUTGetDeviceSettings();
+
+    // Fill the UI with the current settings
+    AddDeviceType( g_DeviceSettings.DeviceType );
+    SetWindowed( FALSE != g_DeviceSettings.pp.Windowed );
+    SetDeviceClip( 0 != (g_DeviceSettings.pp.Flags & D3DPRESENTFLAG_DEVICECLIP) );
+    AddAdapterFormat( g_DeviceSettings.AdapterFormat );
+    AddResolution( g_DeviceSettings.pp.BackBufferWidth, g_DeviceSettings.pp.BackBufferHeight );
+    AddRefreshRate( g_DeviceSettings.pp.FullScreen_RefreshRateInHz );
+    AddBackBufferFormat( g_DeviceSettings.pp.BackBufferFormat );
+    AddDepthStencilBufferFormat( g_DeviceSettings.pp.AutoDepthStencilFormat );
+    AddMultisampleType( g_DeviceSettings.pp.MultiSampleType );
+    AddMultisampleQuality( g_DeviceSettings.pp.MultiSampleQuality );
+    
+    if( g_DeviceSettings.BehaviorFlags & D3DCREATE_PUREDEVICE )
+        AddVertexProcessingType( D3DCREATE_PUREDEVICE );
+    else if( g_DeviceSettings.BehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING )
+        AddVertexProcessingType( D3DCREATE_HARDWARE_VERTEXPROCESSING );
+    else if( g_DeviceSettings.BehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING )
+        AddVertexProcessingType( D3DCREATE_SOFTWARE_VERTEXPROCESSING );
+    else if( g_DeviceSettings.BehaviorFlags & D3DCREATE_MIXED_VERTEXPROCESSING )
+        AddVertexProcessingType( D3DCREATE_MIXED_VERTEXPROCESSING );
+
+    CD3DEnumDeviceSettingsCombo* pBestDeviceSettingsCombo = pD3DEnum->GetDeviceSettingsCombo( g_DeviceSettings.AdapterOrdinal, g_DeviceSettings.DeviceType, g_DeviceSettings.AdapterFormat, g_DeviceSettings.pp.BackBufferFormat, (g_DeviceSettings.pp.Windowed != 0) );
+    if( NULL == pBestDeviceSettingsCombo )
+        return DXUT_ERR_MSGBOX( L"GetDeviceSettingsCombo", E_INVALIDARG );    
+
+    // Get the adapters list from CD3DEnumeration object
+    CGrowableArray<CD3DEnumAdapterInfo*>* pAdapterInfoList = pD3DEnum->GetAdapterInfoList();
+
+    if( pAdapterInfoList->GetSize() == 0 )
+        return DXUT_ERR_MSGBOX( L"CD3DSettingsDlg::OnCreatedDevice", DXUTERR_NOCOMPATIBLEDEVICES );
+    
+    CDXUTComboBox* pAdapterCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER );
+    pAdapterCombo->RemoveAllItems();
+
+    // Add adapters
+    for( int iAdapter=0; iAdapter<pAdapterInfoList->GetSize(); iAdapter++ )
+    {          
+        CD3DEnumAdapterInfo* pAdapterInfo = pAdapterInfoList->GetAt(iAdapter);
+        AddAdapter( pAdapterInfo->szUniqueDescription, pAdapterInfo->AdapterOrdinal );
+    }
+    
+    pAdapterCombo->SetSelectedByData( ULongToPtr( g_DeviceSettings.AdapterOrdinal ) );
+
+    hr = OnAdapterChanged();
+    if( FAILED(hr) )
+        return hr;
+
+    //m_Dialog.Refresh();
+    CDXUTDialog::SetRefreshTime( (float) DXUTGetTime() );
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CD3DSettingsDlg::OnResetDevice()
+{
+    const D3DSURFACE_DESC* pDesc = DXUTGetBackBufferSurfaceDesc();
+    m_Dialog.SetLocation( 0, 0 );
+    m_Dialog.SetSize( pDesc->Width, pDesc->Height );
+    m_Dialog.SetBackgroundColors( D3DCOLOR_ARGB(255, 98, 138, 206), 
+                                         D3DCOLOR_ARGB(255, 54, 105, 192),
+                                         D3DCOLOR_ARGB(255, 54, 105, 192),
+                                         D3DCOLOR_ARGB(255, 10,  73, 179) );
+    
+    
+    IDirect3DDevice9* pd3dDevice = DXUTGetD3DDevice();
+    pd3dDevice->BeginStateBlock();
+    pd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID ); 
+    pd3dDevice->EndStateBlock( &m_pStateBlock );
+
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CD3DSettingsDlg::OnRender( float fElapsedTime )
+{
+    IDirect3DDevice9* pd3dDevice = DXUTGetD3DDevice();
+
+    // Clear the render target and the zbuffer 
+    pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, 0x00003F3F, 1.0f, 0);
+
+    // Render the scene
+    if( SUCCEEDED( pd3dDevice->BeginScene() ) )
+    {
+        m_pStateBlock->Capture();
+        pd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID ); 
+        m_Dialog.OnRender( fElapsedTime );    
+        m_pStateBlock->Apply();
+        pd3dDevice->EndScene();
+    }
+    
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+LRESULT CD3DSettingsDlg::MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    m_Dialog.MsgProc( hWnd, uMsg, wParam, lParam );
+    if( uMsg == WM_KEYDOWN && wParam == VK_F2 )
+        SetActive( false );
+    return 0;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CD3DSettingsDlg::OnLostDevice()
+{
+    SAFE_RELEASE( m_pStateBlock );
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+HRESULT CD3DSettingsDlg::OnDestroyDevice()
+{
+    return S_OK;
+}
+
+
+//--------------------------------------------------------------------------------------
+void WINAPI CD3DSettingsDlg::StaticOnEvent( UINT nEvent, int nControlID, 
+                                            CDXUTControl* pControl, void* pUserData )
+{
+    CD3DSettingsDlg* pD3DSettings = (CD3DSettingsDlg*) pUserData;
+    if( pD3DSettings )
+        pD3DSettings->OnEvent( nEvent, nControlID, pControl );
+}
+
+
+//--------------------------------------------------------------------------------------
+void CD3DSettingsDlg::OnEvent( UINT nEvent, int nControlID, 
+                               CDXUTControl* pControl )
+{
+    switch( nControlID )
+    {
+        case DXUTSETTINGSDLG_ADAPTER:               OnAdapterChanged(); break;
+        case DXUTSETTINGSDLG_DEVICE_TYPE:           OnDeviceTypeChanged(); break;
+        case DXUTSETTINGSDLG_WINDOWED:              OnWindowedFullScreenChanged(); break;
+        case DXUTSETTINGSDLG_FULLSCREEN:            OnWindowedFullScreenChanged(); break;
+        case DXUTSETTINGSDLG_ADAPTER_FORMAT:        OnAdapterFormatChanged(); break;
+        case DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL:   OnAdapterFormatChanged(); break;
+        case DXUTSETTINGSDLG_RESOLUTION:            OnResolutionChanged(); break;
+        case DXUTSETTINGSDLG_REFRESH_RATE:          OnRefreshRateChanged(); break;
+        case DXUTSETTINGSDLG_BACK_BUFFER_FORMAT:    OnBackBufferFormatChanged(); break;
+        case DXUTSETTINGSDLG_DEPTH_STENCIL:         OnDepthStencilBufferFormatChanged(); break;
+        case DXUTSETTINGSDLG_MULTISAMPLE_TYPE:      OnMultisampleTypeChanged(); break;
+        case DXUTSETTINGSDLG_MULTISAMPLE_QUALITY:   OnMultisampleQualityChanged(); break;
+        case DXUTSETTINGSDLG_VERTEX_PROCESSING:     OnVertexProcessingChanged(); break;
+        case DXUTSETTINGSDLG_PRESENT_INTERVAL:      OnPresentIntervalChanged(); break;
+        case DXUTSETTINGSDLG_DEVICECLIP:            OnDeviceClipChanged(); break;
+
+        case DXUTSETTINGSDLG_OK:
+        {
+            if( g_DeviceSettings.pp.Windowed )
+            {
+                g_DeviceSettings.pp.FullScreen_RefreshRateInHz = 0;
+
+                RECT rcClient;
+                if( DXUTIsWindowed() )
+                    GetClientRect( DXUTGetHWND(), &rcClient );
+                else
+                    rcClient = DXUTGetWindowClientRectAtModeChange();
+                DWORD dwWindowWidth  = rcClient.right - rcClient.left;
+                DWORD dwWindowHeight = rcClient.bottom - rcClient.top;
+
+                g_DeviceSettings.pp.BackBufferWidth = dwWindowWidth;
+                g_DeviceSettings.pp.BackBufferHeight = dwWindowHeight;
+            }
+
+            if( g_DeviceSettings.pp.MultiSampleType != D3DMULTISAMPLE_NONE )
+            {
+                g_DeviceSettings.pp.Flags &= ~D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
+            }
+
+            DXUTCreateDeviceFromSettings( &g_DeviceSettings );
+
+            SetActive( false );
+            break;
+        }
+
+        case DXUTSETTINGSDLG_CANCEL:                
+        {
+            SetActive( false );
+            break;
+        }
+
+    }
+}
+
+
+//-------------------------------------------------------------------------------------
+HRESULT CD3DSettingsDlg::SetDeviceSettingsFromUI()
+{
+    CDXUTComboBox* pComboBox;
+    CDXUTRadioButton* pRadioButton;
+
+    // DXUTSETTINGSDLG_DEVICE_TYPE
+    pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE );
+    g_DeviceSettings.DeviceType = (D3DDEVTYPE) PtrToUlong( pComboBox->GetSelectedData() );
+    
+    // DXUTSETTINGSDLG_WINDOWED
+    pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_WINDOWED );
+    g_DeviceSettings.pp.Windowed = pRadioButton->GetChecked();
+
+    // DXUTSETTINGSDLG_ADAPTER_FORMAT
+    pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT );
+    g_DeviceSettings.AdapterFormat = (D3DFORMAT) PtrToUlong( pComboBox->GetSelectedData() );
+    
+
+    if( g_DeviceSettings.pp.Windowed )
+    {
+        g_DeviceSettings.pp.BackBufferFormat = D3DFMT_UNKNOWN;
+        g_DeviceSettings.pp.FullScreen_RefreshRateInHz = 0;
+    }
+    else
+    {
+        // DXUTSETTINGSDLG_BACK_BUFFER_FORMAT
+        pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT );
+        g_DeviceSettings.pp.BackBufferFormat = (D3DFORMAT) PtrToUlong( pComboBox->GetSelectedData() );
+    
+        // DXUTSETTINGSDLG_RESOLUTION
+        pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION );
+        DWORD dwResolution = PtrToUlong( pComboBox->GetSelectedData() );
+        g_DeviceSettings.pp.BackBufferWidth = HIWORD( dwResolution );
+        g_DeviceSettings.pp.BackBufferHeight = LOWORD( dwResolution );
+        
+        // DXUTSETTINGSDLG_REFRESH_RATE
+        pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE );
+        g_DeviceSettings.pp.FullScreen_RefreshRateInHz = PtrToUlong( pComboBox->GetSelectedData() );
+    }
+
+    // DXUTSETTINGSDLG_DEPTH_STENCIL
+    pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL );
+    g_DeviceSettings.pp.AutoDepthStencilFormat = (D3DFORMAT) PtrToUlong( pComboBox->GetSelectedData() );
+    
+    return S_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+CD3DEnumAdapterInfo* CD3DSettingsDlg::GetCurrentAdapterInfo()
+{
+    CD3DEnumeration* pD3DEnum = DXUTGetEnumeration();
+    return pD3DEnum->GetAdapterInfo( g_DeviceSettings.AdapterOrdinal );
+}
+
+
+//-------------------------------------------------------------------------------------
+CD3DEnumDeviceInfo* CD3DSettingsDlg::GetCurrentDeviceInfo()
+{
+    CD3DEnumeration* pD3DEnum = DXUTGetEnumeration();
+    return pD3DEnum->GetDeviceInfo( g_DeviceSettings.AdapterOrdinal,
+                                      g_DeviceSettings.DeviceType );
+}
+
+
+//-------------------------------------------------------------------------------------
+CD3DEnumDeviceSettingsCombo* CD3DSettingsDlg::GetCurrentDeviceSettingsCombo()
+{
+    CD3DEnumeration* pD3DEnum = DXUTGetEnumeration();
+    return pD3DEnum->GetDeviceSettingsCombo( g_DeviceSettings.AdapterOrdinal,
+                                             g_DeviceSettings.DeviceType,
+                                             g_DeviceSettings.AdapterFormat,
+                                             g_DeviceSettings.pp.BackBufferFormat,
+                                             (g_DeviceSettings.pp.Windowed == TRUE) );
+}
+
+
+//-------------------------------------------------------------------------------------
+HRESULT CD3DSettingsDlg::OnAdapterChanged()
+{
+    HRESULT hr = S_OK;
+
+    // Store the adapter index
+    g_DeviceSettings.AdapterOrdinal = GetSelectedAdapter();
+    
+    // DXUTSETTINGSDLG_DEVICE_TYPE
+    CDXUTComboBox* pDeviceTypeComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE );
+    pDeviceTypeComboBox->RemoveAllItems();
+ 
+    CD3DEnumAdapterInfo* pAdapterInfo = GetCurrentAdapterInfo();
+    if( pAdapterInfo == NULL )
+        return E_FAIL;
+
+    for( int iDeviceInfo=0; iDeviceInfo < pAdapterInfo->deviceInfoList.GetSize(); iDeviceInfo++ )
+    {
+        CD3DEnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt(iDeviceInfo);
+        AddDeviceType( pDeviceInfo->DeviceType );
+    }
+
+    pDeviceTypeComboBox->SetSelectedByData( ULongToPtr(g_DeviceSettings.DeviceType) );
+
+    hr = OnDeviceTypeChanged();
+    if( FAILED(hr) )
+        return hr;
+
+    return S_OK; 
+}
+
+
+
+//-------------------------------------------------------------------------------------
+HRESULT CD3DSettingsDlg::OnDeviceTypeChanged()
+{
+    HRESULT hr = S_OK;
+    
+    g_DeviceSettings.DeviceType = GetSelectedDeviceType();
+   
+    // Update windowed/full screen radio buttons
+    bool bHasWindowedDeviceCombo = false;
+    bool bHasFullScreenDeviceCombo = false;
+
+    CD3DEnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo();
+    if( pDeviceInfo == NULL )
+        return E_FAIL;
+            
+    for( int idc = 0; idc < pDeviceInfo->deviceSettingsComboList.GetSize(); idc++ )
+    {
+        CD3DEnumDeviceSettingsCombo* pDeviceSettingsCombo = pDeviceInfo->deviceSettingsComboList.GetAt( idc );
+
+        if( pDeviceSettingsCombo->Windowed )
+            bHasWindowedDeviceCombo = true;
+        else
+            bHasFullScreenDeviceCombo = true;
+    }
+
+    // DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_FULLSCREEN
+    m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_WINDOWED, bHasWindowedDeviceCombo );
+    m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_FULLSCREEN, bHasFullScreenDeviceCombo );
+
+    SetWindowed( g_DeviceSettings.pp.Windowed && bHasWindowedDeviceCombo );
+
+    hr = OnWindowedFullScreenChanged();
+    if( FAILED(hr) )
+        return hr;
+
+    return S_OK;
+}
+
+
+
+//-------------------------------------------------------------------------------------
+HRESULT CD3DSettingsDlg::OnWindowedFullScreenChanged()
+{
+    HRESULT hr = S_OK;
+
+    bool bWindowed = IsWindowed();
+    g_DeviceSettings.pp.Windowed = bWindowed;
+
+    m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL, !bWindowed );
+    m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_RESOLUTION_LABEL, !bWindowed );
+    m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_REFRESH_RATE_LABEL, !bWindowed );
+
+    m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_ADAPTER_FORMAT, !bWindowed );
+    m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_RESOLUTION, !bWindowed );
+    m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL, !bWindowed );
+    m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_REFRESH_RATE, !bWindowed );
+    m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_DEVICECLIP, bWindowed );
+
+    bool bDeviceClip = ( 0x0 != (g_DeviceSettings.pp.Flags & D3DPRESENTFLAG_DEVICECLIP) );
+
+    // If windowed, get the appropriate adapter format from Direct3D
+    if( g_DeviceSettings.pp.Windowed )
+    {
+        IDirect3D9* pD3D = DXUTGetD3DObject();
+        if( pD3D == NULL )
+            return DXTRACE_ERR( L"DXUTGetD3DObject", E_FAIL );
+
+        D3DDISPLAYMODE mode;
+        hr = pD3D->GetAdapterDisplayMode( g_DeviceSettings.AdapterOrdinal, &mode );
+        if( FAILED(hr) )
+            return DXTRACE_ERR( L"GetAdapterDisplayMode", hr );
+
+        // Default resolution to the fullscreen res that was last used
+        RECT rc = DXUTGetFullsceenClientRectAtModeChange();
+        if( rc.right == 0 || rc.bottom == 0 )
+        {
+            // If nothing last used, then default to the adapter desktop res
+            g_DeviceSettings.pp.BackBufferWidth = mode.Width;
+            g_DeviceSettings.pp.BackBufferHeight = mode.Height;
+        }
+        else
+        {
+            g_DeviceSettings.pp.BackBufferWidth = rc.right;
+            g_DeviceSettings.pp.BackBufferHeight = rc.bottom;
+        }
+
+        g_DeviceSettings.AdapterFormat = mode.Format;
+        g_DeviceSettings.pp.FullScreen_RefreshRateInHz = mode.RefreshRate;
+    }
+
+    const D3DFORMAT adapterFormat = g_DeviceSettings.AdapterFormat;
+    const DWORD dwWidth = g_DeviceSettings.pp.BackBufferWidth;
+    const DWORD dwHeight = g_DeviceSettings.pp.BackBufferHeight;
+    const DWORD dwRefreshRate = g_DeviceSettings.pp.FullScreen_RefreshRateInHz;
+
+    // DXUTSETTINGSDLG_DEVICECLIP
+    SetDeviceClip( bDeviceClip );
+    
+    // DXUTSETTINGSDLG_ADAPTER_FORMAT
+    CDXUTComboBox* pAdapterFormatComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT );
+    if( pAdapterFormatComboBox == NULL )
+        return E_FAIL;
+    pAdapterFormatComboBox->RemoveAllItems();
+
+    CD3DEnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo();
+    if( pDeviceInfo == NULL )
+        return E_FAIL;
+
+    if( bWindowed )
+    {
+        AddAdapterFormat( adapterFormat );
+    }
+    else
+    {
+        for( int iSettingsCombo=0; iSettingsCombo < pDeviceInfo->deviceSettingsComboList.GetSize(); iSettingsCombo++ )
+        {
+            CD3DEnumDeviceSettingsCombo* pSettingsCombo = pDeviceInfo->deviceSettingsComboList.GetAt(iSettingsCombo);
+            AddAdapterFormat( pSettingsCombo->AdapterFormat );
+        }    
+    }
+
+    pAdapterFormatComboBox->SetSelectedByData( ULongToPtr(adapterFormat) );
+
+    hr = OnAdapterFormatChanged();
+    if( FAILED(hr) )
+        return hr;
+
+    // DXUTSETTINGSDLG_RESOLUTION
+    CDXUTComboBox* pResolutionComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION );
+    
+    if( bWindowed )
+    {
+        pResolutionComboBox->RemoveAllItems();
+        AddResolution( dwWidth, dwHeight );
+    }
+
+    pResolutionComboBox->SetSelectedByData( ULongToPtr( MAKELONG(dwWidth, dwHeight) ) );
+    
+    hr = OnResolutionChanged();
+    if( FAILED(hr) )
+        return hr;
+
+    // DXUTSETTINGSDLG_REFRESH_RATE
+    CDXUTComboBox* pRefreshRateComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE );
+    
+    if( bWindowed )
+    {
+        pRefreshRateComboBox->RemoveAllItems();
+        AddRefreshRate( dwRefreshRate );
+    }
+    
+    pRefreshRateComboBox->SetSelectedByData( ULongToPtr(dwRefreshRate) ); 
+
+    hr = OnRefreshRateChanged();
+    if( FAILED(hr) )
+        return hr;
+
+    return S_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+HRESULT CD3DSettingsDlg::OnAdapterFormatChanged()
+{ 
+    HRESULT hr = S_OK;
+
+    // DXUTSETTINGSDLG_ADAPTER_FORMAT
+    D3DFORMAT adapterFormat = GetSelectedAdapterFormat();
+    g_DeviceSettings.AdapterFormat = adapterFormat;
+
+    // DXUTSETTINGSDLG_RESOLUTION
+    CDXUTComboBox* pResolutionComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION );
+    pResolutionComboBox->RemoveAllItems();
+
+    CD3DEnumAdapterInfo* pAdapterInfo = GetCurrentAdapterInfo();
+    if( pAdapterInfo == NULL )
+        return E_FAIL;
+
+    bool bShowAll = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL )->GetChecked();
+
+    // Get the desktop aspect ratio
+    D3DDISPLAYMODE dmDesktop;
+    DXUTGetDesktopResolution( g_DeviceSettings.AdapterOrdinal, &dmDesktop.Width, &dmDesktop.Height );
+    float fDesktopAspectRatio = dmDesktop.Width / (float)dmDesktop.Height;
+
+    for( int idm = 0; idm < pAdapterInfo->displayModeList.GetSize(); idm++ )
+    {
+        D3DDISPLAYMODE DisplayMode = pAdapterInfo->displayModeList.GetAt( idm );
+        float fAspect = (float)DisplayMode.Width / (float)DisplayMode.Height;
+
+        if( DisplayMode.Format == adapterFormat )
+        {
+            // If "Show All" is not checked, then hide all resolutions
+            // that don't match the aspect ratio of the desktop resolution
+            if( bShowAll || (!bShowAll && fabsf(fDesktopAspectRatio - fAspect) < 0.05f) )
+            {
+                AddResolution( DisplayMode.Width, DisplayMode.Height );    
+            }
+        }
+    }
+
+    const DWORD dwCurResolution = MAKELONG( g_DeviceSettings.pp.BackBufferWidth, 
+                                            g_DeviceSettings.pp.BackBufferHeight );
+
+    pResolutionComboBox->SetSelectedByData( ULongToPtr(dwCurResolution) );
+
+    hr = OnResolutionChanged();
+    if( FAILED(hr) )
+        return hr;
+
+    // DXUTSETTINGSDLG_BACK_BUFFER_FORMAT
+    CDXUTComboBox* pBackBufferFormatComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT );
+    pBackBufferFormatComboBox->RemoveAllItems();
+
+    CD3DEnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo();
+    if( pDeviceInfo == NULL )
+        return E_FAIL;
+
+    const BOOL bWindowed = IsWindowed();
+    bool bHasWindowedBackBuffer = false;
+
+    for( int idc = 0; idc < pDeviceInfo->deviceSettingsComboList.GetSize(); idc++ )
+    {
+        CD3DEnumDeviceSettingsCombo* pDeviceCombo = pDeviceInfo->deviceSettingsComboList.GetAt( idc );
+        if( pDeviceCombo->Windowed == bWindowed &&
+            pDeviceCombo->AdapterFormat == g_DeviceSettings.AdapterFormat )
+        {
+            AddBackBufferFormat( pDeviceCombo->BackBufferFormat );
+            bHasWindowedBackBuffer = true;
+        }
+    }
+
+    pBackBufferFormatComboBox->SetSelectedByData( ULongToPtr(g_DeviceSettings.pp.BackBufferFormat) );
+
+    hr = OnBackBufferFormatChanged();
+    if( FAILED(hr) )
+        return hr;
+
+    if( !bHasWindowedBackBuffer )
+    {
+        m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_WINDOWED, false );
+
+        if( g_DeviceSettings.pp.Windowed )
+        {
+            SetWindowed( false );
+
+            hr = OnWindowedFullScreenChanged();
+            if( FAILED(hr) )
+                return hr;
+        }
+    }
+
+    return S_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+HRESULT CD3DSettingsDlg::OnResolutionChanged()
+{
+    HRESULT hr = S_OK;
+
+    CD3DEnumAdapterInfo* pAdapterInfo = GetCurrentAdapterInfo();
+    if( pAdapterInfo == NULL )
+        return E_FAIL;
+
+    // Set resolution
+    DWORD dwWidth, dwHeight;
+    GetSelectedResolution( &dwWidth, &dwHeight );
+    g_DeviceSettings.pp.BackBufferWidth = dwWidth;
+    g_DeviceSettings.pp.BackBufferHeight = dwHeight;
+
+    DWORD dwRefreshRate = g_DeviceSettings.pp.FullScreen_RefreshRateInHz;
+
+    // Update the refresh rate list
+    CDXUTComboBox* pRefreshRateComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE );
+    pRefreshRateComboBox->RemoveAllItems();
+
+    D3DFORMAT adapterFormat = g_DeviceSettings.AdapterFormat;
+    for( int idm = 0; idm < pAdapterInfo->displayModeList.GetSize(); idm++ )
+    {
+        D3DDISPLAYMODE displayMode = pAdapterInfo->displayModeList.GetAt( idm );
+
+        if( displayMode.Format == adapterFormat &&
+            displayMode.Width == dwWidth &&
+            displayMode.Height == dwHeight )
+        {
+            AddRefreshRate( displayMode.RefreshRate );
+        }
+    }
+
+    pRefreshRateComboBox->SetSelectedByData( ULongToPtr(dwRefreshRate) );
+
+    hr = OnRefreshRateChanged();
+    if( FAILED(hr) )
+        return hr;
+
+    return S_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+HRESULT CD3DSettingsDlg::OnRefreshRateChanged()
+{
+    // Set refresh rate
+    g_DeviceSettings.pp.FullScreen_RefreshRateInHz = GetSelectedRefreshRate();
+
+    return S_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+HRESULT CD3DSettingsDlg::OnBackBufferFormatChanged()
+{
+    HRESULT hr = S_OK;
+
+    g_DeviceSettings.pp.BackBufferFormat = GetSelectedBackBufferFormat();
+    
+    D3DFORMAT adapterFormat = g_DeviceSettings.AdapterFormat;
+    D3DFORMAT backBufferFormat = g_DeviceSettings.pp.BackBufferFormat;
+
+    CD3DEnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo();
+    if( pDeviceInfo == NULL )
+        return E_FAIL;
+
+    bool bAllowSoftwareVP, bAllowHardwareVP, bAllowPureHardwareVP, bAllowMixedVP;
+    DXUTGetEnumeration()->GetPossibleVertexProcessingList( &bAllowSoftwareVP, &bAllowHardwareVP, 
+                                                           &bAllowPureHardwareVP, &bAllowMixedVP );
+    
+    for( int idc=0; idc < pDeviceInfo->deviceSettingsComboList.GetSize(); idc++ )
+    {
+        CD3DEnumDeviceSettingsCombo* pDeviceCombo = pDeviceInfo->deviceSettingsComboList.GetAt( idc );
+
+        if( pDeviceCombo->Windowed == (g_DeviceSettings.pp.Windowed == TRUE) &&
+            pDeviceCombo->AdapterFormat == adapterFormat &&
+            pDeviceCombo->BackBufferFormat == backBufferFormat )
+        {
+            CDXUTComboBox* pDepthStencilComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL );
+            pDepthStencilComboBox->RemoveAllItems();
+            pDepthStencilComboBox->SetEnabled( (g_DeviceSettings.pp.EnableAutoDepthStencil == TRUE) ); 
+
+            if( g_DeviceSettings.pp.EnableAutoDepthStencil )
+            {
+                for( int ifmt=0; ifmt < pDeviceCombo->depthStencilFormatList.GetSize(); ifmt++ )
+                {
+                    D3DFORMAT fmt = pDeviceCombo->depthStencilFormatList.GetAt( ifmt );
+
+                    AddDepthStencilBufferFormat( fmt );
+                }
+
+                pDepthStencilComboBox->SetSelectedByData( ULongToPtr(g_DeviceSettings.pp.AutoDepthStencilFormat) );
+            }
+            else
+            {
+                if( !pDepthStencilComboBox->ContainsItem( L"(not used)" ) )
+                    pDepthStencilComboBox->AddItem( L"(not used)", NULL );
+            }
+
+            hr = OnDepthStencilBufferFormatChanged();
+            if( FAILED(hr) )
+                return hr;
+
+            CDXUTComboBox* pVertexProcessingComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING );
+            pVertexProcessingComboBox->RemoveAllItems();
+
+            // Add valid vertex processing types
+            if( bAllowSoftwareVP )
+                AddVertexProcessingType( D3DCREATE_SOFTWARE_VERTEXPROCESSING );
+
+            if( bAllowHardwareVP && pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )
+                AddVertexProcessingType( D3DCREATE_HARDWARE_VERTEXPROCESSING );
+
+            if( bAllowPureHardwareVP && pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_PUREDEVICE )
+                AddVertexProcessingType( D3DCREATE_PUREDEVICE );
+
+            if( bAllowMixedVP && pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )
+                AddVertexProcessingType( D3DCREATE_MIXED_VERTEXPROCESSING );
+
+            if( g_DeviceSettings.BehaviorFlags & D3DCREATE_PUREDEVICE )
+                pVertexProcessingComboBox->SetSelectedByData( ULongToPtr(D3DCREATE_PUREDEVICE) );
+            else if( g_DeviceSettings.BehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING )
+                pVertexProcessingComboBox->SetSelectedByData( ULongToPtr(D3DCREATE_SOFTWARE_VERTEXPROCESSING) );
+            else if( g_DeviceSettings.BehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING )
+                pVertexProcessingComboBox->SetSelectedByData( ULongToPtr(D3DCREATE_HARDWARE_VERTEXPROCESSING) );
+            else if( g_DeviceSettings.BehaviorFlags & D3DCREATE_MIXED_VERTEXPROCESSING )
+                pVertexProcessingComboBox->SetSelectedByData( ULongToPtr(D3DCREATE_MIXED_VERTEXPROCESSING) );
+
+            hr = OnVertexProcessingChanged();
+            if( FAILED(hr) )
+                return hr;
+
+            CDXUTComboBox* pPresentIntervalComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_PRESENT_INTERVAL );
+            pPresentIntervalComboBox->RemoveAllItems();
+            pPresentIntervalComboBox->AddItem( L"On", ULongToPtr(D3DPRESENT_INTERVAL_DEFAULT) );
+            pPresentIntervalComboBox->AddItem( L"Off", ULongToPtr(D3DPRESENT_INTERVAL_IMMEDIATE) );
+
+            pPresentIntervalComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.pp.PresentationInterval ) );
+        
+            hr = OnPresentIntervalChanged();
+            if( FAILED(hr) )
+                return hr;
+        }
+    }
+
+    return S_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+HRESULT CD3DSettingsDlg::OnDepthStencilBufferFormatChanged()
+{
+    HRESULT hr = S_OK;
+
+    D3DFORMAT depthStencilBufferFormat = GetSelectedDepthStencilBufferFormat();
+
+    if( g_DeviceSettings.pp.EnableAutoDepthStencil )
+        g_DeviceSettings.pp.AutoDepthStencilFormat = depthStencilBufferFormat;
+
+    CD3DEnumDeviceSettingsCombo* pDeviceSettingsCombo = GetCurrentDeviceSettingsCombo();
+    if( pDeviceSettingsCombo == NULL )
+        return E_FAIL;
+    
+    CDXUTComboBox* pMultisampleTypeCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE );
+    pMultisampleTypeCombo->RemoveAllItems();
+
+    for( int ims=0; ims < pDeviceSettingsCombo->multiSampleTypeList.GetSize(); ims++ )
+    {
+        D3DMULTISAMPLE_TYPE msType = pDeviceSettingsCombo->multiSampleTypeList.GetAt( ims );
+
+        bool bConflictFound = false;
+        for( int iConf = 0; iConf < pDeviceSettingsCombo->DSMSConflictList.GetSize(); iConf++ )
+        {
+            CD3DEnumDSMSConflict DSMSConf = pDeviceSettingsCombo->DSMSConflictList.GetAt( iConf );
+            if( DSMSConf.DSFormat == depthStencilBufferFormat &&
+                DSMSConf.MSType == msType )
+            {
+                bConflictFound = true;
+                break;
+            }
+        }
+
+        if( !bConflictFound )
+            AddMultisampleType( msType );
+    }
+
+    CDXUTComboBox* pMultisampleQualityCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE );
+    pMultisampleQualityCombo->SetSelectedByData( ULongToPtr(g_DeviceSettings.pp.MultiSampleType) );
+
+    hr = OnMultisampleTypeChanged();
+    if( FAILED(hr) )
+        return hr;
+
+    return S_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+HRESULT CD3DSettingsDlg::OnMultisampleTypeChanged()
+{
+    HRESULT hr = S_OK;
+
+    D3DMULTISAMPLE_TYPE multisampleType = GetSelectedMultisampleType();
+    g_DeviceSettings.pp.MultiSampleType = multisampleType;
+
+    CD3DEnumDeviceSettingsCombo* pDeviceSettingsCombo = GetCurrentDeviceSettingsCombo();
+    if( pDeviceSettingsCombo == NULL )
+        return E_FAIL;
+
+    DWORD dwMaxQuality = 0;
+    for( int iType = 0; iType < pDeviceSettingsCombo->multiSampleTypeList.GetSize(); iType++ )
+    {
+        D3DMULTISAMPLE_TYPE msType = pDeviceSettingsCombo->multiSampleTypeList.GetAt( iType );
+        if( msType == multisampleType )
+        {
+            dwMaxQuality = pDeviceSettingsCombo->multiSampleQualityList.GetAt( iType );
+            break;
+        }
+    }
+   
+    // DXUTSETTINGSDLG_MULTISAMPLE_QUALITY
+    CDXUTComboBox* pMultisampleQualityCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY );
+    pMultisampleQualityCombo->RemoveAllItems();
+
+    for( UINT iQuality = 0; iQuality < dwMaxQuality; iQuality++ )
+    {
+        AddMultisampleQuality( iQuality );
+    }
+
+    pMultisampleQualityCombo->SetSelectedByData( ULongToPtr(g_DeviceSettings.pp.MultiSampleQuality) );
+
+    hr = OnMultisampleQualityChanged();
+    if( FAILED(hr) )
+        return hr;
+
+    return S_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+HRESULT CD3DSettingsDlg::OnMultisampleQualityChanged()
+{
+    g_DeviceSettings.pp.MultiSampleQuality = GetSelectedMultisampleQuality();
+
+    return S_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+HRESULT CD3DSettingsDlg::OnVertexProcessingChanged()
+{
+    DWORD dwBehavior = g_DeviceSettings.BehaviorFlags;
+
+    // Clear vertex processing flags
+    dwBehavior &= ~D3DCREATE_HARDWARE_VERTEXPROCESSING;
+    dwBehavior &= ~D3DCREATE_SOFTWARE_VERTEXPROCESSING;
+    dwBehavior &= ~D3DCREATE_MIXED_VERTEXPROCESSING;
+    dwBehavior &= ~D3DCREATE_PUREDEVICE;
+
+    // Determine new flags
+    DWORD dwNewFlags = GetSelectedVertexProcessingType();
+    if( dwNewFlags & D3DCREATE_PUREDEVICE )
+        dwNewFlags |= D3DCREATE_HARDWARE_VERTEXPROCESSING;
+
+    // Make changes
+    g_DeviceSettings.BehaviorFlags = dwBehavior | dwNewFlags;
+
+    return S_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+HRESULT CD3DSettingsDlg::OnPresentIntervalChanged()
+{
+    g_DeviceSettings.pp.PresentationInterval = GetSelectedPresentInterval();
+
+    return S_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+HRESULT CD3DSettingsDlg::OnDeviceClipChanged()
+{
+    if( IsDeviceClip() )
+        g_DeviceSettings.pp.Flags |= D3DPRESENTFLAG_DEVICECLIP;
+    else
+        g_DeviceSettings.pp.Flags &= ~D3DPRESENTFLAG_DEVICECLIP;
+
+    return S_OK;
+}
+
+
+//-------------------------------------------------------------------------------------
+void CD3DSettingsDlg::AddAdapter( const WCHAR* strDescription, UINT iAdapter )
+{
+    CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER );
+ 
+    if( !pComboBox->ContainsItem( strDescription ) )
+        pComboBox->AddItem( strDescription, ULongToPtr(iAdapter) );
+}
+
+
+//-------------------------------------------------------------------------------------
+UINT CD3DSettingsDlg::GetSelectedAdapter()
+{
+    CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER );
+
+    return PtrToUlong( pComboBox->GetSelectedData() );  
+}
+
+
+//-------------------------------------------------------------------------------------
+void CD3DSettingsDlg::AddDeviceType( D3DDEVTYPE devType )
+{
+    CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE );
+
+    if( !pComboBox->ContainsItem( DXUTD3DDeviceTypeToString(devType) ) )
+        pComboBox->AddItem( DXUTD3DDeviceTypeToString(devType), ULongToPtr(devType) );
+}
+
+
+//-------------------------------------------------------------------------------------
+D3DDEVTYPE CD3DSettingsDlg::GetSelectedDeviceType()
+{
+    CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE );
+
+    return (D3DDEVTYPE) PtrToUlong( pComboBox->GetSelectedData() );
+}
+
+
+//-------------------------------------------------------------------------------------
+void CD3DSettingsDlg::SetWindowed( bool bWindowed )
+{
+    CDXUTRadioButton* pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_WINDOWED );
+    pRadioButton->SetChecked( bWindowed );
+
+    pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_FULLSCREEN );
+    pRadioButton->SetChecked( !bWindowed );
+}
+
+
+//-------------------------------------------------------------------------------------
+bool CD3DSettingsDlg::IsWindowed()
+{
+    CDXUTRadioButton* pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_WINDOWED );
+    return pRadioButton->GetChecked();
+}
+
+
+//-------------------------------------------------------------------------------------
+void CD3DSettingsDlg::AddAdapterFormat( D3DFORMAT format )
+{
+    CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT );
+    
+    if( !pComboBox->ContainsItem( DXUTD3DFormatToString(format, TRUE) ) )
+        pComboBox->AddItem( DXUTD3DFormatToString(format, TRUE), ULongToPtr( format ) );
+}
+
+
+//-------------------------------------------------------------------------------------
+D3DFORMAT CD3DSettingsDlg::GetSelectedAdapterFormat()
+{
+    CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT );
+  
+    return (D3DFORMAT) PtrToUlong( pComboBox->GetSelectedData() ); 
+}
+
+
+//-------------------------------------------------------------------------------------
+void CD3DSettingsDlg::AddResolution( DWORD dwWidth, DWORD dwHeight )
+{
+    CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION );
+  
+    DWORD dwResolutionData;
+    WCHAR strResolution[50];
+    dwResolutionData = MAKELONG( dwWidth, dwHeight );
+    StringCchPrintf( strResolution, 50, L"%d by %d", dwWidth, dwHeight );
+
+    if( !pComboBox->ContainsItem( strResolution ) )
+        pComboBox->AddItem( strResolution, ULongToPtr( dwResolutionData ) );
+}
+
+
+//-------------------------------------------------------------------------------------
+void CD3DSettingsDlg::GetSelectedResolution( DWORD* pdwWidth, DWORD* pdwHeight )
+{
+    CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION );
+
+    DWORD dwResolution = PtrToUlong( pComboBox->GetSelectedData() );
+
+    *pdwWidth = LOWORD( dwResolution );
+    *pdwHeight = HIWORD( dwResolution );
+}
+
+
+//-------------------------------------------------------------------------------------
+void CD3DSettingsDlg::AddRefreshRate( DWORD dwRate )
+{
+    CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE );
+        
+    WCHAR strRefreshRate[50];
+
+    if( dwRate == 0 )
+        StringCchCopy( strRefreshRate, 50, L"Default Rate" );
+    else
+        StringCchPrintf( strRefreshRate, 50, L"%d Hz", dwRate );
+
+    if( !pComboBox->ContainsItem( strRefreshRate ) )
+        pComboBox->AddItem( strRefreshRate, ULongToPtr(dwRate) );
+}
+
+
+//-------------------------------------------------------------------------------------
+DWORD CD3DSettingsDlg::GetSelectedRefreshRate()
+{
+    CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE );
+    
+    return PtrToUlong( pComboBox->GetSelectedData() );
+}
+
+
+//-------------------------------------------------------------------------------------
+void CD3DSettingsDlg::AddBackBufferFormat( D3DFORMAT format )
+{
+    CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT );
+    
+    if( !pComboBox->ContainsItem( DXUTD3DFormatToString(format, TRUE) ) )
+        pComboBox->AddItem( DXUTD3DFormatToString(format, TRUE), ULongToPtr( format ) );
+}
+
+
+//-------------------------------------------------------------------------------------
+D3DFORMAT CD3DSettingsDlg::GetSelectedBackBufferFormat()
+{
+    CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT );
+    
+    return (D3DFORMAT) PtrToUlong( pComboBox->GetSelectedData() ); 
+}
+
+
+//-------------------------------------------------------------------------------------
+void CD3DSettingsDlg::AddDepthStencilBufferFormat( D3DFORMAT format )
+{
+    CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL );
+    
+    if( !pComboBox->ContainsItem( DXUTD3DFormatToString(format, TRUE) ) )
+        pComboBox->AddItem( DXUTD3DFormatToString(format, TRUE), ULongToPtr(format) );
+}
+
+
+//-------------------------------------------------------------------------------------
+D3DFORMAT CD3DSettingsDlg::GetSelectedDepthStencilBufferFormat()
+{
+    CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL );
+    
+    return (D3DFORMAT) PtrToUlong( pComboBox->GetSelectedData() ); 
+}
+
+
+//-------------------------------------------------------------------------------------
+void CD3DSettingsDlg::AddMultisampleType( D3DMULTISAMPLE_TYPE type )
+{
+    CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE );
+    
+    if( !pComboBox->ContainsItem( DXUTMultisampleTypeToString(type) ) )
+        pComboBox->AddItem( DXUTMultisampleTypeToString(type), ULongToPtr(type) );
+}
+
+
+//-------------------------------------------------------------------------------------
+D3DMULTISAMPLE_TYPE CD3DSettingsDlg::GetSelectedMultisampleType()
+{
+    CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE );
+    
+    return (D3DMULTISAMPLE_TYPE) PtrToUlong( pComboBox->GetSelectedData() ); 
+}
+
+
+//-------------------------------------------------------------------------------------
+void CD3DSettingsDlg::AddMultisampleQuality( DWORD dwQuality )
+{
+    CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY );
+        
+    WCHAR strQuality[50];
+    StringCchPrintf( strQuality, 50, L"%d", dwQuality );
+
+    if( !pComboBox->ContainsItem( strQuality ) )
+        pComboBox->AddItem( strQuality, ULongToPtr(dwQuality) );
+}
+
+
+//-------------------------------------------------------------------------------------
+DWORD CD3DSettingsDlg::GetSelectedMultisampleQuality()
+{
+    CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY );
+    
+    return PtrToUlong( pComboBox->GetSelectedData() ); 
+}
+
+
+//-------------------------------------------------------------------------------------
+void CD3DSettingsDlg::AddVertexProcessingType( DWORD dwType )
+{
+    CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING );
+    
+    if( !pComboBox->ContainsItem( DXUTVertexProcessingTypeToString(dwType) ) )
+        pComboBox->AddItem( DXUTVertexProcessingTypeToString(dwType), ULongToPtr(dwType) );
+}
+
+
+//-------------------------------------------------------------------------------------
+DWORD CD3DSettingsDlg::GetSelectedVertexProcessingType()
+{
+    CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING );
+    
+    return PtrToUlong( pComboBox->GetSelectedData() ); 
+}
+
+
+//-------------------------------------------------------------------------------------
+DWORD CD3DSettingsDlg::GetSelectedPresentInterval()
+{
+    CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_PRESENT_INTERVAL );
+    
+    return PtrToUlong( pComboBox->GetSelectedData() ); 
+}
+
+
+//-------------------------------------------------------------------------------------
+void CD3DSettingsDlg::SetDeviceClip( bool bDeviceClip )
+{
+    CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_DEVICECLIP );
+    pCheckBox->SetChecked( bDeviceClip );
+}
+
+
+//-------------------------------------------------------------------------------------
+bool CD3DSettingsDlg::IsDeviceClip()
+{
+    CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_DEVICECLIP );
+    return pCheckBox->GetChecked();
+}
+
+
+//--------------------------------------------------------------------------------------
+// Returns the string for the given D3DDEVTYPE.
+//--------------------------------------------------------------------------------------
+WCHAR* DXUTD3DDeviceTypeToString(D3DDEVTYPE devType)
+{
+    switch (devType)
+    {
+        case D3DDEVTYPE_HAL:        return L"D3DDEVTYPE_HAL";
+        case D3DDEVTYPE_SW:         return L"D3DDEVTYPE_SW";
+        case D3DDEVTYPE_REF:        return L"D3DDEVTYPE_REF";
+        default:                    return L"Unknown devType";
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+// Returns the string for the given D3DMULTISAMPLE_TYPE.
+//--------------------------------------------------------------------------------------
+WCHAR* DXUTMultisampleTypeToString(D3DMULTISAMPLE_TYPE MultiSampleType)
+{
+    switch (MultiSampleType)
+    {
+    case D3DMULTISAMPLE_NONE:       return L"D3DMULTISAMPLE_NONE";
+    case D3DMULTISAMPLE_NONMASKABLE: return L"D3DMULTISAMPLE_NONMASKABLE";
+    case D3DMULTISAMPLE_2_SAMPLES:  return L"D3DMULTISAMPLE_2_SAMPLES";
+    case D3DMULTISAMPLE_3_SAMPLES:  return L"D3DMULTISAMPLE_3_SAMPLES";
+    case D3DMULTISAMPLE_4_SAMPLES:  return L"D3DMULTISAMPLE_4_SAMPLES";
+    case D3DMULTISAMPLE_5_SAMPLES:  return L"D3DMULTISAMPLE_5_SAMPLES";
+    case D3DMULTISAMPLE_6_SAMPLES:  return L"D3DMULTISAMPLE_6_SAMPLES";
+    case D3DMULTISAMPLE_7_SAMPLES:  return L"D3DMULTISAMPLE_7_SAMPLES";
+    case D3DMULTISAMPLE_8_SAMPLES:  return L"D3DMULTISAMPLE_8_SAMPLES";
+    case D3DMULTISAMPLE_9_SAMPLES:  return L"D3DMULTISAMPLE_9_SAMPLES";
+    case D3DMULTISAMPLE_10_SAMPLES: return L"D3DMULTISAMPLE_10_SAMPLES";
+    case D3DMULTISAMPLE_11_SAMPLES: return L"D3DMULTISAMPLE_11_SAMPLES";
+    case D3DMULTISAMPLE_12_SAMPLES: return L"D3DMULTISAMPLE_12_SAMPLES";
+    case D3DMULTISAMPLE_13_SAMPLES: return L"D3DMULTISAMPLE_13_SAMPLES";
+    case D3DMULTISAMPLE_14_SAMPLES: return L"D3DMULTISAMPLE_14_SAMPLES";
+    case D3DMULTISAMPLE_15_SAMPLES: return L"D3DMULTISAMPLE_15_SAMPLES";
+    case D3DMULTISAMPLE_16_SAMPLES: return L"D3DMULTISAMPLE_16_SAMPLES";
+    default:                        return L"Unknown Multisample Type";
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+// Returns the string for the given vertex processing type
+//--------------------------------------------------------------------------------------
+WCHAR* DXUTVertexProcessingTypeToString(DWORD vpt)
+{
+    switch (vpt)
+    {
+    case D3DCREATE_SOFTWARE_VERTEXPROCESSING: return L"Software vertex processing";
+    case D3DCREATE_MIXED_VERTEXPROCESSING:    return L"Mixed vertex processing";
+    case D3DCREATE_HARDWARE_VERTEXPROCESSING: return L"Hardware vertex processing";
+    case D3DCREATE_PUREDEVICE:                return L"Pure hardware vertex processing";
+    default:                                  return L"Unknown vertex processing type";
+    }
+}
+
+
+//--------------------------------------------------------------------------------------
+// Returns the string for the given present interval.
+//--------------------------------------------------------------------------------------
+WCHAR* DXUTPresentIntervalToString( UINT pi )
+{
+    switch( pi )
+    {
+    case D3DPRESENT_INTERVAL_IMMEDIATE: return L"D3DPRESENT_INTERVAL_IMMEDIATE";
+    case D3DPRESENT_INTERVAL_DEFAULT:   return L"D3DPRESENT_INTERVAL_DEFAULT";
+    case D3DPRESENT_INTERVAL_ONE:       return L"D3DPRESENT_INTERVAL_ONE";
+    case D3DPRESENT_INTERVAL_TWO:       return L"D3DPRESENT_INTERVAL_TWO";
+    case D3DPRESENT_INTERVAL_THREE:     return L"D3DPRESENT_INTERVAL_THREE";
+    case D3DPRESENT_INTERVAL_FOUR:      return L"D3DPRESENT_INTERVAL_FOUR";
+    default:                            return L"Unknown PresentInterval";
+    }
+}
+
+
Index: /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTsound.cpp
===================================================================
--- /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTsound.cpp	(revision 761)
+++ /GTP/trunk/App/Demos/Illum/DepthOfField/Common/DXUTsound.cpp	(revision 761)
@@ -0,0 +1,1576 @@
+//-----------------------------------------------------------------------------
+// File: DXUTsound.cpp
+//
+// Desc: DirectSound framework classes for reading and writing wav files and
+//       playing them in DirectSound buffers. Feel free to use this class
+//       as a starting point for adding extra functionality.
+//
+// Copyright (c) Microsoft Corp. All rights reserved.
+//-----------------------------------------------------------------------------
+#define STRICT
+#include "dxstdafx.h"
+#include <mmsystem.h>
+#include <dsound.h>
+#include "DXUTsound.h"
+#undef min // use __min instead
+#undef max // use __max instead
+
+
+//-----------------------------------------------------------------------------
+// Name: CSoundManager::CSoundManager()
+// Desc: Constructs the class
+//-----------------------------------------------------------------------------
+CSoundManager::CSoundManager()
+{
+    m_pDS = NULL;
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CSoundManager::~CSoundManager()
+// Desc: Destroys the class
+//-----------------------------------------------------------------------------
+CSoundManager::~CSoundManager()
+{
+    SAFE_RELEASE( m_pDS );
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CSoundManager::Initialize()
+// Desc: Initializes the IDirectSound object and also sets the primary buffer
+//       format.  This function must be called before any others.
+//-----------------------------------------------------------------------------
+HRESULT CSoundManager::Initialize( HWND  hWnd,
+                                   DWORD dwCoopLevel )
+{
+    HRESULT             hr;
+
+    SAFE_RELEASE( m_pDS );
+
+    // Create IDirectSound using the primary sound device
+    if( FAILED( hr = DirectSoundCreate8( NULL, &m_pDS, NULL ) ) )
+        return DXUT_ERR( L"DirectSoundCreate8", hr );
+
+    // Set DirectSound coop level
+    if( FAILED( hr = m_pDS->SetCooperativeLevel( hWnd, dwCoopLevel ) ) )
+        return DXUT_ERR( L"SetCooperativeLevel", hr );
+
+    return S_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CSoundManager::SetPrimaryBufferFormat()
+// Desc: Set primary buffer to a specified format
+//       !WARNING! - Setting the primary buffer format and then using this
+//                   same DirectSound object for DirectMusic messes up
+//                   DirectMusic!
+//       For example, to set the primary buffer format to 22kHz stereo, 16-bit
+//       then:   dwPrimaryChannels = 2
+//               dwPrimaryFreq     = 22050,
+//               dwPrimaryBitRate  = 16
+//-----------------------------------------------------------------------------
+HRESULT CSoundManager::SetPrimaryBufferFormat( DWORD dwPrimaryChannels,
+                                               DWORD dwPrimaryFreq,
+                                               DWORD dwPrimaryBitRate )
+{
+    HRESULT             hr;
+    LPDIRECTSOUNDBUFFER pDSBPrimary = NULL;
+
+    if( m_pDS == NULL )
+        return CO_E_NOTINITIALIZED;
+
+    // Get the primary buffer
+    DSBUFFERDESC dsbd;
+    ZeroMemory( &dsbd, sizeof(DSBUFFERDESC) );
+    dsbd.dwSize        = sizeof(DSBUFFERDESC);
+    dsbd.dwFlags       = DSBCAPS_PRIMARYBUFFER;
+    dsbd.dwBufferBytes = 0;
+    dsbd.lpwfxFormat   = NULL;
+
+    if( FAILED( hr = m_pDS->CreateSoundBuffer( &dsbd, &pDSBPrimary, NULL ) ) )
+        return DXUT_ERR( L"CreateSoundBuffer", hr );
+
+    WAVEFORMATEX wfx;
+    ZeroMemory( &wfx, sizeof(WAVEFORMATEX) );
+    wfx.wFormatTag      = (WORD) WAVE_FORMAT_PCM;
+    wfx.nChannels       = (WORD) dwPrimaryChannels;
+    wfx.nSamplesPerSec  = (DWORD) dwPrimaryFreq;
+    wfx.wBitsPerSample  = (WORD) dwPrimaryBitRate;
+    wfx.nBlockAlign     = (WORD) (wfx.wBitsPerSample / 8 * wfx.nChannels);
+    wfx.nAvgBytesPerSec = (DWORD) (wfx.nSamplesPerSec * wfx.nBlockAlign);
+
+    if( FAILED( hr = pDSBPrimary->SetFormat(&wfx) ) )
+        return DXUT_ERR( L"SetFormat", hr );
+
+    SAFE_RELEASE( pDSBPrimary );
+
+    return S_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CSoundManager::Get3DListenerInterface()
+// Desc: Returns the 3D listener interface associated with primary buffer.
+//-----------------------------------------------------------------------------
+HRESULT CSoundManager::Get3DListenerInterface( LPDIRECTSOUND3DLISTENER* ppDSListener )
+{
+    HRESULT             hr;
+    DSBUFFERDESC        dsbdesc;
+    LPDIRECTSOUNDBUFFER pDSBPrimary = NULL;
+
+    if( ppDSListener == NULL )
+        return E_INVALIDARG;
+    if( m_pDS == NULL )
+        return CO_E_NOTINITIALIZED;
+
+    *ppDSListener = NULL;
+
+    // Obtain primary buffer, asking it for 3D control
+    ZeroMemory( &dsbdesc, sizeof(DSBUFFERDESC) );
+    dsbdesc.dwSize = sizeof(DSBUFFERDESC);
+    dsbdesc.dwFlags = DSBCAPS_CTRL3D | DSBCAPS_PRIMARYBUFFER;
+    if( FAILED( hr = m_pDS->CreateSoundBuffer( &dsbdesc, &pDSBPrimary, NULL ) ) )
+        return DXUT_ERR( L"CreateSoundBuffer", hr );
+
+    if( FAILED( hr = pDSBPrimary->QueryInterface( IID_IDirectSound3DListener,
+                                                  (VOID**)ppDSListener ) ) )
+    {
+        SAFE_RELEASE( pDSBPrimary );
+        return DXUT_ERR( L"QueryInterface", hr );
+    }
+
+    // Release the primary buffer, since it is not need anymore
+    SAFE_RELEASE( pDSBPrimary );
+
+    return S_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CSoundManager::Create()
+// Desc:
+//-----------------------------------------------------------------------------
+HRESULT CSoundManager::Create( CSound** ppSound,
+                               LPWSTR strWaveFileName,
+                               DWORD dwCreationFlags,
+                               GUID guid3DAlgorithm,
+                               DWORD dwNumBuffers )
+{
+    HRESULT hr;
+    HRESULT hrRet = S_OK;
+    DWORD   i;
+    LPDIRECTSOUNDBUFFER* apDSBuffer     = NULL;
+    DWORD                dwDSBufferSize = NULL;
+    CWaveFile*           pWaveFile      = NULL;
+
+    if( m_pDS == NULL )
+        return CO_E_NOTINITIALIZED;
+    if( strWaveFileName == NULL || ppSound == NULL || dwNumBuffers < 1 )
+        return E_INVALIDARG;
+
+    apDSBuffer = new LPDIRECTSOUNDBUFFER[dwNumBuffers];
+    if( apDSBuffer == NULL )
+    {
+        hr = E_OUTOFMEMORY;
+        goto LFail;
+    }
+
+    pWaveFile = new CWaveFile();
+    if( pWaveFile == NULL )
+    {
+        hr = E_OUTOFMEMORY;
+        goto LFail;
+    }
+
+    pWaveFile->Open( strWaveFileName, NULL, WAVEFILE_READ );
+
+    if( pWaveFile->GetSize() == 0 )
+    {
+        // Wave is blank, so don't create it.
+        hr = E_FAIL;
+        goto LFail;
+    }
+
+    // Make the DirectSound buffer the same size as the wav file
+    dwDSBufferSize = pWaveFile->GetSize();
+
+    // Create the direct sound buffer, and only request the flags needed
+    // since each requires some overhead and limits if the buffer can
+    // be hardware accelerated
+    DSBUFFERDESC dsbd;
+    ZeroMemory( &dsbd, sizeof(DSBUFFERDESC) );
+    dsbd.dwSize          = sizeof(DSBUFFERDESC);
+    dsbd.dwFlags         = dwCreationFlags;
+    dsbd.dwBufferBytes   = dwDSBufferSize;
+    dsbd.guid3DAlgorithm = guid3DAlgorithm;
+    dsbd.lpwfxFormat     = pWaveFile->m_pwfx;
+
+    // DirectSound is only guarenteed to play PCM data.  Other
+    // formats may or may not work depending the sound card driver.
+    hr = m_pDS->CreateSoundBuffer( &dsbd, &apDSBuffer[0], NULL );
+
+    // Be sure to return this error code if it occurs so the
+    // callers knows this happened.
+    if( hr == DS_NO_VIRTUALIZATION )
+        hrRet = DS_NO_VIRTUALIZATION;
+
+    if( FAILED(hr) )
+    {
+        // DSERR_BUFFERTOOSMALL will be returned if the buffer is
+        // less than DSBSIZE_FX_MIN and the buffer is created
+        // with DSBCAPS_CTRLFX.
+
+        // It might also fail if hardware buffer mixing was requested
+        // on a device that doesn't support it.
+        DXUT_ERR( L"CreateSoundBuffer", hr );
+
+        goto LFail;
+    }
+
+    // Default to use DuplicateSoundBuffer() when created extra buffers since always
+    // create a buffer that uses the same memory however DuplicateSoundBuffer() will fail if
+    // DSBCAPS_CTRLFX is used, so use CreateSoundBuffer() instead in this case.
+    if( (dwCreationFlags & DSBCAPS_CTRLFX) == 0 )
+    {
+        for( i=1; i<dwNumBuffers; i++ )
+        {
+            if( FAILED( hr = m_pDS->DuplicateSoundBuffer( apDSBuffer[0], &apDSBuffer[i] ) ) )
+            {
+                DXUT_ERR( L"DuplicateSoundBuffer", hr );
+                goto LFail;
+            }
+        }
+    }
+    else
+    {
+        for( i=1; i<dwNumBuffers; i++ )
+        {
+            hr = m_pDS->CreateSoundBuffer( &dsbd, &apDSBuffer[i], NULL );
+            if( FAILED(hr) )
+            {
+                DXUT_ERR( L"CreateSoundBuffer", hr );
+                goto LFail;
+            }
+        }
+   }
+
+    // Create the sound
+    *ppSound = new CSound( apDSBuffer, dwDSBufferSize, dwNumBuffers, pWaveFile, dwCreationFlags );
+
+    SAFE_DELETE_ARRAY( apDSBuffer );
+    return hrRet;
+
+LFail:
+    // Cleanup
+    SAFE_DELETE( pWaveFile );
+    SAFE_DELETE_ARRAY( apDSBuffer );
+    return hr;
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CSoundManager::CreateFromMemory()
+// Desc:
+//-----------------------------------------------------------------------------
+HRESULT CSoundManager::CreateFromMemory( CSound** ppSound,
+                                        BYTE* pbData,
+                                        ULONG  ulDataSize,
+                                        LPWAVEFORMATEX pwfx,
+                                        DWORD dwCreationFlags,
+                                        GUID guid3DAlgorithm,
+                                        DWORD dwNumBuffers )
+{
+    HRESULT hr;
+    DWORD   i;
+    LPDIRECTSOUNDBUFFER* apDSBuffer     = NULL;
+    DWORD                dwDSBufferSize = NULL;
+    CWaveFile*           pWaveFile      = NULL;
+
+    if( m_pDS == NULL )
+        return CO_E_NOTINITIALIZED;
+    if( pbData == NULL || ppSound == NULL || dwNumBuffers < 1 )
+        return E_INVALIDARG;
+
+    apDSBuffer = new LPDIRECTSOUNDBUFFER[dwNumBuffers];
+    if( apDSBuffer == NULL )
+    {
+        hr = E_OUTOFMEMORY;
+        goto LFail;
+    }
+
+    pWaveFile = new CWaveFile();
+    if( pWaveFile == NULL )
+    {
+        hr = E_OUTOFMEMORY;
+        goto LFail;
+    }
+
+    pWaveFile->OpenFromMemory( pbData,ulDataSize, pwfx, WAVEFILE_READ );
+
+
+    // Make the DirectSound buffer the same size as the wav file
+    dwDSBufferSize = ulDataSize;
+
+    // Create the direct sound buffer, and only request the flags needed
+    // since each requires some overhead and limits if the buffer can
+    // be hardware accelerated
+    DSBUFFERDESC dsbd;
+    ZeroMemory( &dsbd, sizeof(DSBUFFERDESC) );
+    dsbd.dwSize          = sizeof(DSBUFFERDESC);
+    dsbd.dwFlags         = dwCreationFlags;
+    dsbd.dwBufferBytes   = dwDSBufferSize;
+    dsbd.guid3DAlgorithm = guid3DAlgorithm;
+    dsbd.lpwfxFormat     = pwfx;
+
+    if( FAILED( hr = m_pDS->CreateSoundBuffer( &dsbd, &apDSBuffer[0], NULL ) ) )
+    {
+        DXUT_ERR( L"CreateSoundBuffer", hr );
+        goto LFail;
+    }
+
+    // Default to use DuplicateSoundBuffer() when created extra buffers since always
+    // create a buffer that uses the same memory however DuplicateSoundBuffer() will fail if
+    // DSBCAPS_CTRLFX is used, so use CreateSoundBuffer() instead in this case.
+    if( (dwCreationFlags & DSBCAPS_CTRLFX) == 0 )
+    {
+        for( i=1; i<dwNumBuffers; i++ )
+        {
+            if( FAILED( hr = m_pDS->DuplicateSoundBuffer( apDSBuffer[0], &apDSBuffer[i] ) ) )
+            {
+                DXUT_ERR( L"DuplicateSoundBuffer", hr );
+                goto LFail;
+            }
+        }
+    }
+    else
+    {
+        for( i=1; i<dwNumBuffers; i++ )
+        {
+            hr = m_pDS->CreateSoundBuffer( &dsbd, &apDSBuffer[i], NULL );
+            if( FAILED(hr) )
+            {
+                DXUT_ERR( L"CreateSoundBuffer", hr );
+                goto LFail;
+            }
+        }
+   }
+
+    // Create the sound
+    *ppSound = new CSound( apDSBuffer, dwDSBufferSize, dwNumBuffers, pWaveFile, dwCreationFlags );
+
+    SAFE_DELETE_ARRAY( apDSBuffer );
+    return S_OK;
+
+LFail:
+    // Cleanup
+
+    SAFE_DELETE_ARRAY( apDSBuffer );
+    return hr;
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CSoundManager::CreateStreaming()
+// Desc:
+//-----------------------------------------------------------------------------
+HRESULT CSoundManager::CreateStreaming( CStreamingSound** ppStreamingSound,
+                                        LPWSTR strWaveFileName,
+                                        DWORD dwCreationFlags,
+                                        GUID guid3DAlgorithm,
+                                        DWORD dwNotifyCount,
+                                        DWORD dwNotifySize,
+                                        HANDLE hNotifyEvent )
+{
+    HRESULT hr;
+
+    if( m_pDS == NULL )
+        return CO_E_NOTINITIALIZED;
+    if( strWaveFileName == NULL || ppStreamingSound == NULL || hNotifyEvent == NULL )
+        return E_INVALIDARG;
+
+    LPDIRECTSOUNDBUFFER pDSBuffer      = NULL;
+    DWORD               dwDSBufferSize = NULL;
+    CWaveFile*          pWaveFile      = NULL;
+    DSBPOSITIONNOTIFY*  aPosNotify     = NULL;
+    LPDIRECTSOUNDNOTIFY pDSNotify      = NULL;
+
+    pWaveFile = new CWaveFile();
+    if( pWaveFile == NULL )
+        return E_OUTOFMEMORY;
+    pWaveFile->Open( strWaveFileName, NULL, WAVEFILE_READ );
+
+    // Figure out how big the DirectSound buffer should be
+    dwDSBufferSize = dwNotifySize * dwNotifyCount;
+
+    // Set up the direct sound buffer.  Request the NOTIFY flag, so
+    // that we are notified as the sound buffer plays.  Note, that using this flag
+    // may limit the amount of hardware acceleration that can occur.
+    DSBUFFERDESC dsbd;
+    ZeroMemory( &dsbd, sizeof(DSBUFFERDESC) );
+    dsbd.dwSize          = sizeof(DSBUFFERDESC);
+    dsbd.dwFlags         = dwCreationFlags |
+                           DSBCAPS_CTRLPOSITIONNOTIFY |
+                           DSBCAPS_GETCURRENTPOSITION2;
+    dsbd.dwBufferBytes   = dwDSBufferSize;
+    dsbd.guid3DAlgorithm = guid3DAlgorithm;
+    dsbd.lpwfxFormat     = pWaveFile->m_pwfx;
+
+    if( FAILED( hr = m_pDS->CreateSoundBuffer( &dsbd, &pDSBuffer, NULL ) ) )
+    {
+        // If wave format isn't then it will return
+        // either DSERR_BADFORMAT or E_INVALIDARG
+        if( hr == DSERR_BADFORMAT || hr == E_INVALIDARG )
+            return DXUT_ERR( L"CreateSoundBuffer", hr );
+
+        return DXUT_ERR( L"CreateSoundBuffer", hr );
+    }
+
+    // Create the notification events, so that we know when to fill
+    // the buffer as the sound plays.
+    if( FAILED( hr = pDSBuffer->QueryInterface( IID_IDirectSoundNotify,
+                                                (VOID**)&pDSNotify ) ) )
+    {
+        SAFE_DELETE_ARRAY( aPosNotify );
+        return DXUT_ERR( L"QueryInterface", hr );
+    }
+
+    aPosNotify = new DSBPOSITIONNOTIFY[ dwNotifyCount ];
+    if( aPosNotify == NULL )
+        return E_OUTOFMEMORY;
+
+    for( DWORD i = 0; i < dwNotifyCount; i++ )
+    {
+        aPosNotify[i].dwOffset     = (dwNotifySize * i) + dwNotifySize - 1;
+        aPosNotify[i].hEventNotify = hNotifyEvent;
+    }
+
+    // Tell DirectSound when to notify us. The notification will come in the from
+    // of signaled events that are handled in WinMain()
+    if( FAILED( hr = pDSNotify->SetNotificationPositions( dwNotifyCount,
+                                                          aPosNotify ) ) )
+    {
+        SAFE_RELEASE( pDSNotify );
+        SAFE_DELETE_ARRAY( aPosNotify );
+        return DXUT_ERR( L"SetNotificationPositions", hr );
+    }
+
+    SAFE_RELEASE( pDSNotify );
+    SAFE_DELETE_ARRAY( aPosNotify );
+
+    // Create the sound
+    *ppStreamingSound = new CStreamingSound( pDSBuffer, dwDSBufferSize, pWaveFile, dwNotifySize );
+
+    return S_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CSound::CSound()
+// Desc: Constructs the class
+//-----------------------------------------------------------------------------
+CSound::CSound( LPDIRECTSOUNDBUFFER* apDSBuffer, DWORD dwDSBufferSize,
+                DWORD dwNumBuffers, CWaveFile* pWaveFile, DWORD dwCreationFlags )
+{
+    DWORD i;
+
+    if( dwNumBuffers <= 0 )
+        return;
+
+    m_apDSBuffer = new LPDIRECTSOUNDBUFFER[dwNumBuffers];
+    if( NULL != m_apDSBuffer )
+    {
+        for( i=0; i<dwNumBuffers; i++ )
+            m_apDSBuffer[i] = apDSBuffer[i];
+
+        m_dwDSBufferSize = dwDSBufferSize;
+        m_dwNumBuffers   = dwNumBuffers;
+        m_pWaveFile      = pWaveFile;
+        m_dwCreationFlags = dwCreationFlags;
+
+        FillBufferWithSound( m_apDSBuffer[0], FALSE );
+    }
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CSound::~CSound()
+// Desc: Destroys the class
+//-----------------------------------------------------------------------------
+CSound::~CSound()
+{
+    for( DWORD i=0; i<m_dwNumBuffers; i++ )
+    {
+        SAFE_RELEASE( m_apDSBuffer[i] );
+    }
+
+    SAFE_DELETE_ARRAY( m_apDSBuffer );
+    SAFE_DELETE( m_pWaveFile );
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CSound::FillBufferWithSound()
+// Desc: Fills a DirectSound buffer with a sound file
+//-----------------------------------------------------------------------------
+HRESULT CSound::FillBufferWithSound( LPDIRECTSOUNDBUFFER pDSB, BOOL bRepeatWavIfBufferLarger )
+{
+    HRESULT hr;
+    VOID*   pDSLockedBuffer      = NULL; // Pointer to locked buffer memory
+    DWORD   dwDSLockedBufferSize = 0;    // Size of the locked DirectSound buffer
+    DWORD   dwWavDataRead        = 0;    // Amount of data read from the wav file
+
+    if( pDSB == NULL )
+        return CO_E_NOTINITIALIZED;
+
+    // Make sure we have focus, and we didn't just switch in from
+    // an app which had a DirectSound device
+    if( FAILED( hr = RestoreBuffer( pDSB, NULL ) ) )
+        return DXUT_ERR( L"RestoreBuffer", hr );
+
+    // Lock the buffer down
+    if( FAILED( hr = pDSB->Lock( 0, m_dwDSBufferSize,
+                                 &pDSLockedBuffer, &dwDSLockedBufferSize,
+                                 NULL, NULL, 0L ) ) )
+        return DXUT_ERR( L"Lock", hr );
+
+    // Reset the wave file to the beginning
+    m_pWaveFile->ResetFile();
+
+    if( FAILED( hr = m_pWaveFile->Read( (BYTE*) pDSLockedBuffer,
+                                        dwDSLockedBufferSize,
+                                        &dwWavDataRead ) ) )
+        return DXUT_ERR( L"Read", hr );
+
+    if( dwWavDataRead == 0 )
+    {
+        // Wav is blank, so just fill with silence
+        FillMemory( (BYTE*) pDSLockedBuffer,
+                    dwDSLockedBufferSize,
+                    (BYTE)(m_pWaveFile->m_pwfx->wBitsPerSample == 8 ? 128 : 0 ) );
+    }
+    else if( dwWavDataRead < dwDSLockedBufferSize )
+    {
+        // If the wav file was smaller than the DirectSound buffer,
+        // we need to fill the remainder of the buffer with data
+        if( bRepeatWavIfBufferLarger )
+        {
+            // Reset the file and fill the buffer with wav data
+            DWORD dwReadSoFar = dwWavDataRead;    // From previous call above.
+            while( dwReadSoFar < dwDSLockedBufferSize )
+            {
+                // This will keep reading in until the buffer is full
+                // for very short files
+                if( FAILED( hr = m_pWaveFile->ResetFile() ) )
+                    return DXUT_ERR( L"ResetFile", hr );
+
+                hr = m_pWaveFile->Read( (BYTE*)pDSLockedBuffer + dwReadSoFar,
+                                        dwDSLockedBufferSize - dwReadSoFar,
+                                        &dwWavDataRead );
+                if( FAILED(hr) )
+                    return DXUT_ERR( L"Read", hr );
+
+                dwReadSoFar += dwWavDataRead;
+            }
+        }
+        else
+        {
+            // Don't repeat the wav file, just fill in silence
+            FillMemory( (BYTE*) pDSLockedBuffer + dwWavDataRead,
+                        dwDSLockedBufferSize - dwWavDataRead,
+                        (BYTE)(m_pWaveFile->m_pwfx->wBitsPerSample == 8 ? 128 : 0 ) );
+        }
+    }
+
+    // Unlock the buffer, we don't need it anymore.
+    pDSB->Unlock( pDSLockedBuffer, dwDSLockedBufferSize, NULL, 0 );
+
+    return S_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CSound::RestoreBuffer()
+// Desc: Restores the lost buffer. *pbWasRestored returns TRUE if the buffer was
+//       restored.  It can also NULL if the information is not needed.
+//-----------------------------------------------------------------------------
+HRESULT CSound::RestoreBuffer( LPDIRECTSOUNDBUFFER pDSB, BOOL* pbWasRestored )
+{
+    HRESULT hr;
+
+    if( pDSB == NULL )
+        return CO_E_NOTINITIALIZED;
+    if( pbWasRestored )
+        *pbWasRestored = FALSE;
+
+    DWORD dwStatus;
+    if( FAILED( hr = pDSB->GetStatus( &dwStatus ) ) )
+        return DXUT_ERR( L"GetStatus", hr );
+
+    if( dwStatus & DSBSTATUS_BUFFERLOST )
+    {
+        // Since the app could have just been activated, then
+        // DirectSound may not be giving us control yet, so
+        // the restoring the buffer may fail.
+        // If it does, sleep until DirectSound gives us control.
+        do
+        {
+            hr = pDSB->Restore();
+            if( hr == DSERR_BUFFERLOST )
+                Sleep( 10 );
+        }
+        while( ( hr = pDSB->Restore() ) == DSERR_BUFFERLOST );
+
+        if( pbWasRestored != NULL )
+            *pbWasRestored = TRUE;
+
+        return S_OK;
+    }
+    else
+    {
+        return S_FALSE;
+    }
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CSound::GetFreeBuffer()
+// Desc: Finding the first buffer that is not playing and return a pointer to
+//       it, or if all are playing return a pointer to a randomly selected buffer.
+//-----------------------------------------------------------------------------
+LPDIRECTSOUNDBUFFER CSound::GetFreeBuffer()
+{
+    if( m_apDSBuffer == NULL )
+        return FALSE;
+
+	DWORD i;
+    for( i=0; i<m_dwNumBuffers; i++ )
+    {
+        if( m_apDSBuffer[i] )
+        {
+            DWORD dwStatus = 0;
+            m_apDSBuffer[i]->GetStatus( &dwStatus );
+            if ( ( dwStatus & DSBSTATUS_PLAYING ) == 0 )
+                break;
+        }
+    }
+
+    if( i != m_dwNumBuffers )
+        return m_apDSBuffer[ i ];
+    else
+        return m_apDSBuffer[ rand() % m_dwNumBuffers ];
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CSound::GetBuffer()
+// Desc:
+//-----------------------------------------------------------------------------
+LPDIRECTSOUNDBUFFER CSound::GetBuffer( DWORD dwIndex )
+{
+    if( m_apDSBuffer == NULL )
+        return NULL;
+    if( dwIndex >= m_dwNumBuffers )
+        return NULL;
+
+    return m_apDSBuffer[dwIndex];
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CSound::Get3DBufferInterface()
+// Desc:
+//-----------------------------------------------------------------------------
+HRESULT CSound::Get3DBufferInterface( DWORD dwIndex, LPDIRECTSOUND3DBUFFER* ppDS3DBuffer )
+{
+    if( m_apDSBuffer == NULL )
+        return CO_E_NOTINITIALIZED;
+    if( dwIndex >= m_dwNumBuffers )
+        return E_INVALIDARG;
+
+    *ppDS3DBuffer = NULL;
+
+    return m_apDSBuffer[dwIndex]->QueryInterface( IID_IDirectSound3DBuffer,
+                                                  (VOID**)ppDS3DBuffer );
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CSound::Play()
+// Desc: Plays the sound using voice management flags.  Pass in DSBPLAY_LOOPING
+//       in the dwFlags to loop the sound
+//-----------------------------------------------------------------------------
+HRESULT CSound::Play( DWORD dwPriority, DWORD dwFlags, LONG lVolume, LONG lFrequency, LONG lPan )
+{
+    HRESULT hr;
+    BOOL    bRestored;
+
+    if( m_apDSBuffer == NULL )
+        return CO_E_NOTINITIALIZED;
+
+    LPDIRECTSOUNDBUFFER pDSB = GetFreeBuffer();
+
+    if( pDSB == NULL )
+        return DXUT_ERR( L"GetFreeBuffer", E_FAIL );
+
+    // Restore the buffer if it was lost
+    if( FAILED( hr = RestoreBuffer( pDSB, &bRestored ) ) )
+        return DXUT_ERR( L"RestoreBuffer", hr );
+
+    if( bRestored )
+    {
+        // The buffer was restored, so we need to fill it with new data
+        if( FAILED( hr = FillBufferWithSound( pDSB, FALSE ) ) )
+            return DXUT_ERR( L"FillBufferWithSound", hr );
+    }
+
+    if( m_dwCreationFlags & DSBCAPS_CTRLVOLUME )
+    {
+        pDSB->SetVolume( lVolume );
+    }
+
+    if( lFrequency != -1 &&
+        (m_dwCreationFlags & DSBCAPS_CTRLFREQUENCY) )
+    {
+        pDSB->SetFrequency( lFrequency );
+    }
+
+    if( m_dwCreationFlags & DSBCAPS_CTRLPAN )
+    {
+        pDSB->SetPan( lPan );
+    }
+
+    return pDSB->Play( 0, dwPriority, dwFlags );
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CSound::Play3D()
+// Desc: Plays the sound using voice management flags.  Pass in DSBPLAY_LOOPING
+//       in the dwFlags to loop the sound
+//-----------------------------------------------------------------------------
+HRESULT CSound::Play3D( LPDS3DBUFFER p3DBuffer, DWORD dwPriority, DWORD dwFlags, LONG lFrequency )
+{
+    HRESULT hr;
+    BOOL    bRestored;
+    DWORD   dwBaseFrequency;
+
+    if( m_apDSBuffer == NULL )
+        return CO_E_NOTINITIALIZED;
+
+    LPDIRECTSOUNDBUFFER pDSB = GetFreeBuffer();
+    if( pDSB == NULL )
+        return DXUT_ERR( L"GetFreeBuffer", E_FAIL );
+
+    // Restore the buffer if it was lost
+    if( FAILED( hr = RestoreBuffer( pDSB, &bRestored ) ) )
+        return DXUT_ERR( L"RestoreBuffer", hr );
+
+    if( bRestored )
+    {
+        // The buffer was restored, so we need to fill it with new data
+        if( FAILED( hr = FillBufferWithSound( pDSB, FALSE ) ) )
+            return DXUT_ERR( L"FillBufferWithSound", hr );
+    }
+
+    if( m_dwCreationFlags & DSBCAPS_CTRLFREQUENCY )
+    {
+        pDSB->GetFrequency( &dwBaseFrequency );
+        pDSB->SetFrequency( dwBaseFrequency + lFrequency );
+    }
+
+    // QI for the 3D buffer
+    LPDIRECTSOUND3DBUFFER pDS3DBuffer;
+    hr = pDSB->QueryInterface( IID_IDirectSound3DBuffer, (VOID**) &pDS3DBuffer );
+    if( SUCCEEDED( hr ) )
+    {
+        hr = pDS3DBuffer->SetAllParameters( p3DBuffer, DS3D_IMMEDIATE );
+        if( SUCCEEDED( hr ) )
+        {
+            hr = pDSB->Play( 0, dwPriority, dwFlags );
+        }
+
+        pDS3DBuffer->Release();
+    }
+
+    return hr;
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CSound::Stop()
+// Desc: Stops the sound from playing
+//-----------------------------------------------------------------------------
+HRESULT CSound::Stop()
+{
+    if( m_apDSBuffer == NULL )
+        return CO_E_NOTINITIALIZED;
+
+    HRESULT hr = 0;
+
+    for( DWORD i=0; i<m_dwNumBuffers; i++ )
+        hr |= m_apDSBuffer[i]->Stop();
+
+    return hr;
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CSound::Reset()
+// Desc: Reset all of the sound buffers
+//-----------------------------------------------------------------------------
+HRESULT CSound::Reset()
+{
+    if( m_apDSBuffer == NULL )
+        return CO_E_NOTINITIALIZED;
+
+    HRESULT hr = 0;
+
+    for( DWORD i=0; i<m_dwNumBuffers; i++ )
+        hr |= m_apDSBuffer[i]->SetCurrentPosition( 0 );
+
+    return hr;
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CSound::IsSoundPlaying()
+// Desc: Checks to see if a buffer is playing and returns TRUE if it is.
+//-----------------------------------------------------------------------------
+BOOL CSound::IsSoundPlaying()
+{
+    BOOL bIsPlaying = FALSE;
+
+    if( m_apDSBuffer == NULL )
+        return FALSE;
+
+    for( DWORD i=0; i<m_dwNumBuffers; i++ )
+    {
+        if( m_apDSBuffer[i] )
+        {
+            DWORD dwStatus = 0;
+            m_apDSBuffer[i]->GetStatus( &dwStatus );
+            bIsPlaying |= ( ( dwStatus & DSBSTATUS_PLAYING ) != 0 );
+        }
+    }
+
+    return bIsPlaying;
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CStreamingSound::CStreamingSound()
+// Desc: Setups up a buffer so data can be streamed from the wave file into
+//       a buffer.  This is very useful for large wav files that would take a
+//       while to load.  The buffer is initially filled with data, then
+//       as sound is played the notification events are signaled and more data
+//       is written into the buffer by calling HandleWaveStreamNotification()
+//-----------------------------------------------------------------------------
+CStreamingSound::CStreamingSound( LPDIRECTSOUNDBUFFER pDSBuffer, DWORD dwDSBufferSize,
+                                  CWaveFile* pWaveFile, DWORD dwNotifySize )
+                : CSound( &pDSBuffer, dwDSBufferSize, 1, pWaveFile, 0 )
+{
+    m_dwLastPlayPos     = 0;
+    m_dwPlayProgress    = 0;
+    m_dwNotifySize      = dwNotifySize;
+    m_dwNextWriteOffset = 0;
+    m_bFillNextNotificationWithSilence = FALSE;
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CStreamingSound::~CStreamingSound()
+// Desc: Destroys the class
+//-----------------------------------------------------------------------------
+CStreamingSound::~CStreamingSound()
+{
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CStreamingSound::HandleWaveStreamNotification()
+// Desc: Handle the notification that tells us to put more wav data in the
+//       circular buffer
+//-----------------------------------------------------------------------------
+HRESULT CStreamingSound::HandleWaveStreamNotification( BOOL bLoopedPlay )
+{
+    HRESULT hr;
+    DWORD   dwCurrentPlayPos;
+    DWORD   dwPlayDelta;
+    DWORD   dwBytesWrittenToBuffer;
+    VOID*   pDSLockedBuffer = NULL;
+    VOID*   pDSLockedBuffer2 = NULL;
+    DWORD   dwDSLockedBufferSize;
+    DWORD   dwDSLockedBufferSize2;
+
+    if( m_apDSBuffer == NULL || m_pWaveFile == NULL )
+        return CO_E_NOTINITIALIZED;
+
+    // Restore the buffer if it was lost
+    BOOL bRestored;
+    if( FAILED( hr = RestoreBuffer( m_apDSBuffer[0], &bRestored ) ) )
+        return DXUT_ERR( L"RestoreBuffer", hr );
+
+    if( bRestored )
+    {
+        // The buffer was restored, so we need to fill it with new data
+        if( FAILED( hr = FillBufferWithSound( m_apDSBuffer[0], FALSE ) ) )
+            return DXUT_ERR( L"FillBufferWithSound", hr );
+        return S_OK;
+    }
+
+    // Lock the DirectSound buffer
+    if( FAILED( hr = m_apDSBuffer[0]->Lock( m_dwNextWriteOffset, m_dwNotifySize,
+                                            &pDSLockedBuffer, &dwDSLockedBufferSize,
+                                            &pDSLockedBuffer2, &dwDSLockedBufferSize2, 0L ) ) )
+        return DXUT_ERR( L"Lock", hr );
+
+    // m_dwDSBufferSize and m_dwNextWriteOffset are both multiples of m_dwNotifySize,
+    // it should the second buffer, so it should never be valid
+    if( pDSLockedBuffer2 != NULL )
+        return E_UNEXPECTED;
+
+    if( !m_bFillNextNotificationWithSilence )
+    {
+        // Fill the DirectSound buffer with wav data
+        if( FAILED( hr = m_pWaveFile->Read( (BYTE*) pDSLockedBuffer,
+                                                  dwDSLockedBufferSize,
+                                                  &dwBytesWrittenToBuffer ) ) )
+            return DXUT_ERR( L"Read", hr );
+    }
+    else
+    {
+        // Fill the DirectSound buffer with silence
+        FillMemory( pDSLockedBuffer, dwDSLockedBufferSize,
+                    (BYTE)( m_pWaveFile->m_pwfx->wBitsPerSample == 8 ? 128 : 0 ) );
+        dwBytesWrittenToBuffer = dwDSLockedBufferSize;
+    }
+
+    // If the number of bytes written is less than the
+    // amount we requested, we have a short file.
+    if( dwBytesWrittenToBuffer < dwDSLockedBufferSize )
+    {
+        if( !bLoopedPlay )
+        {
+            // Fill in silence for the rest of the buffer.
+            FillMemory( (BYTE*) pDSLockedBuffer + dwBytesWrittenToBuffer,
+                        dwDSLockedBufferSize - dwBytesWrittenToBuffer,
+                        (BYTE)(m_pWaveFile->m_pwfx->wBitsPerSample == 8 ? 128 : 0 ) );
+
+            // Any future notifications should just fill the buffer with silence
+            m_bFillNextNotificationWithSilence = TRUE;
+        }
+        else
+        {
+            // We are looping, so reset the file and fill the buffer with wav data
+            DWORD dwReadSoFar = dwBytesWrittenToBuffer;    // From previous call above.
+            while( dwReadSoFar < dwDSLockedBufferSize )
+            {
+                // This will keep reading in until the buffer is full (for very short files).
+                if( FAILED( hr = m_pWaveFile->ResetFile() ) )
+                    return DXUT_ERR( L"ResetFile", hr );
+
+                if( FAILED( hr = m_pWaveFile->Read( (BYTE*)pDSLockedBuffer + dwReadSoFar,
+                                                          dwDSLockedBufferSize - dwReadSoFar,
+                                                          &dwBytesWrittenToBuffer ) ) )
+                    return DXUT_ERR( L"Read", hr );
+
+                dwReadSoFar += dwBytesWrittenToBuffer;
+            }
+        }
+    }
+
+    // Unlock the DirectSound buffer
+    m_apDSBuffer[0]->Unlock( pDSLockedBuffer, dwDSLockedBufferSize, NULL, 0 );
+
+    // Figure out how much data has been played so far.  When we have played
+    // past the end of the file, we will either need to start filling the
+    // buffer with silence or starting reading from the beginning of the file,
+    // depending if the user wants to loop the sound
+    if( FAILED( hr = m_apDSBuffer[0]->GetCurrentPosition( &dwCurrentPlayPos, NULL ) ) )
+        return DXUT_ERR( L"GetCurrentPosition", hr );
+
+    // Check to see if the position counter looped
+    if( dwCurrentPlayPos < m_dwLastPlayPos )
+        dwPlayDelta = ( m_dwDSBufferSize - m_dwLastPlayPos ) + dwCurrentPlayPos;
+    else
+        dwPlayDelta = dwCurrentPlayPos - m_dwLastPlayPos;
+
+    m_dwPlayProgress += dwPlayDelta;
+    m_dwLastPlayPos = dwCurrentPlayPos;
+
+    // If we are now filling the buffer with silence, then we have found the end so
+    // check to see if the entire sound has played, if it has then stop the buffer.
+    if( m_bFillNextNotificationWithSilence )
+    {
+        // We don't want to cut off the sound before it's done playing.
+        if( m_dwPlayProgress >= m_pWaveFile->GetSize() )
+        {
+            m_apDSBuffer[0]->Stop();
+        }
+    }
+
+    // Update where the buffer will lock (for next time)
+    m_dwNextWriteOffset += dwDSLockedBufferSize;
+    m_dwNextWriteOffset %= m_dwDSBufferSize; // Circular buffer
+
+    return S_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CStreamingSound::Reset()
+// Desc: Resets the sound so it will begin playing at the beginning
+//-----------------------------------------------------------------------------
+HRESULT CStreamingSound::Reset()
+{
+    HRESULT hr;
+
+    if( m_apDSBuffer[0] == NULL || m_pWaveFile == NULL )
+        return CO_E_NOTINITIALIZED;
+
+    m_dwLastPlayPos     = 0;
+    m_dwPlayProgress    = 0;
+    m_dwNextWriteOffset = 0;
+    m_bFillNextNotificationWithSilence = FALSE;
+
+    // Restore the buffer if it was lost
+    BOOL bRestored;
+    if( FAILED( hr = RestoreBuffer( m_apDSBuffer[0], &bRestored ) ) )
+        return DXUT_ERR( L"RestoreBuffer", hr );
+
+    if( bRestored )
+    {
+        // The buffer was restored, so we need to fill it with new data
+        if( FAILED( hr = FillBufferWithSound( m_apDSBuffer[0], FALSE ) ) )
+            return DXUT_ERR( L"FillBufferWithSound", hr );
+    }
+
+    m_pWaveFile->ResetFile();
+
+    return m_apDSBuffer[0]->SetCurrentPosition( 0L );
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CWaveFile::CWaveFile()
+// Desc: Constructs the class.  Call Open() to open a wave file for reading.
+//       Then call Read() as needed.  Calling the destructor or Close()
+//       will close the file.
+//-----------------------------------------------------------------------------
+CWaveFile::CWaveFile()
+{
+    m_pwfx    = NULL;
+    m_hmmio   = NULL;
+    m_pResourceBuffer = NULL;
+    m_dwSize  = 0;
+    m_bIsReadingFromMemory = FALSE;
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CWaveFile::~CWaveFile()
+// Desc: Destructs the class
+//-----------------------------------------------------------------------------
+CWaveFile::~CWaveFile()
+{
+    Close();
+
+    if( !m_bIsReadingFromMemory )
+        SAFE_DELETE_ARRAY( m_pwfx );
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CWaveFile::Open()
+// Desc: Opens a wave file for reading
+//-----------------------------------------------------------------------------
+HRESULT CWaveFile::Open( LPWSTR strFileName, WAVEFORMATEX* pwfx, DWORD dwFlags )
+{
+    HRESULT hr;
+
+    m_dwFlags = dwFlags;
+    m_bIsReadingFromMemory = FALSE;
+
+    if( m_dwFlags == WAVEFILE_READ )
+    {
+        if( strFileName == NULL )
+            return E_INVALIDARG;
+        SAFE_DELETE_ARRAY( m_pwfx );
+
+        m_hmmio = mmioOpen( strFileName, NULL, MMIO_ALLOCBUF | MMIO_READ );
+
+        if( NULL == m_hmmio )
+        {
+            HRSRC   hResInfo;
+            HGLOBAL hResData;
+            DWORD   dwSize;
+            VOID*   pvRes;
+
+            // Loading it as a file failed, so try it as a resource
+            if( NULL == ( hResInfo = FindResource( NULL, strFileName, L"WAVE" ) ) )
+            {
+                if( NULL == ( hResInfo = FindResource( NULL, strFileName, L"WAV" ) ) )
+                    return DXUT_ERR( L"FindResource", E_FAIL );
+            }
+
+            if( NULL == ( hResData = LoadResource( GetModuleHandle(NULL), hResInfo ) ) )
+                return DXUT_ERR( L"LoadResource", E_FAIL );
+
+            if( 0 == ( dwSize = SizeofResource( GetModuleHandle(NULL), hResInfo ) ) )
+                return DXUT_ERR( L"SizeofResource", E_FAIL );
+
+            if( NULL == ( pvRes = LockResource( hResData ) ) )
+                return DXUT_ERR( L"LockResource", E_FAIL );
+
+            m_pResourceBuffer = new CHAR[ dwSize ];
+            if( m_pResourceBuffer == NULL )
+                return DXUT_ERR( L"new", E_OUTOFMEMORY );
+            memcpy( m_pResourceBuffer, pvRes, dwSize );
+
+            MMIOINFO mmioInfo;
+            ZeroMemory( &mmioInfo, sizeof(mmioInfo) );
+            mmioInfo.fccIOProc = FOURCC_MEM;
+            mmioInfo.cchBuffer = dwSize;
+            mmioInfo.pchBuffer = (CHAR*) m_pResourceBuffer;
+
+            m_hmmio = mmioOpen( NULL, &mmioInfo, MMIO_ALLOCBUF | MMIO_READ );
+        }
+
+        if( FAILED( hr = ReadMMIO() ) )
+        {
+            // ReadMMIO will fail if its an not a wave file
+            mmioClose( m_hmmio, 0 );
+            return DXUT_ERR( L"ReadMMIO", hr );
+        }
+
+        if( FAILED( hr = ResetFile() ) )
+            return DXUT_ERR( L"ResetFile", hr );
+
+        // After the reset, the size of the wav file is m_ck.cksize so store it now
+        m_dwSize = m_ck.cksize;
+    }
+    else
+    {
+        m_hmmio = mmioOpen( strFileName, NULL, MMIO_ALLOCBUF  |
+                                                  MMIO_READWRITE |
+                                                  MMIO_CREATE );
+        if( NULL == m_hmmio )
+            return DXUT_ERR( L"mmioOpen", E_FAIL );
+
+        if( FAILED( hr = WriteMMIO( pwfx ) ) )
+        {
+            mmioClose( m_hmmio, 0 );
+            return DXUT_ERR( L"WriteMMIO", hr );
+        }
+
+        if( FAILED( hr = ResetFile() ) )
+            return DXUT_ERR( L"ResetFile", hr );
+    }
+
+    return hr;
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CWaveFile::OpenFromMemory()
+// Desc: copy data to CWaveFile member variable from memory
+//-----------------------------------------------------------------------------
+HRESULT CWaveFile::OpenFromMemory( BYTE* pbData, ULONG ulDataSize,
+                                   WAVEFORMATEX* pwfx, DWORD dwFlags )
+{
+    m_pwfx       = pwfx;
+    m_ulDataSize = ulDataSize;
+    m_pbData     = pbData;
+    m_pbDataCur  = m_pbData;
+    m_bIsReadingFromMemory = TRUE;
+
+    if( dwFlags != WAVEFILE_READ )
+        return E_NOTIMPL;
+
+    return S_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CWaveFile::ReadMMIO()
+// Desc: Support function for reading from a multimedia I/O stream.
+//       m_hmmio must be valid before calling.  This function uses it to
+//       update m_ckRiff, and m_pwfx.
+//-----------------------------------------------------------------------------
+HRESULT CWaveFile::ReadMMIO()
+{
+    MMCKINFO        ckIn;           // chunk info. for general use.
+    PCMWAVEFORMAT   pcmWaveFormat;  // Temp PCM structure to load in.
+
+    m_pwfx = NULL;
+
+    if( ( 0 != mmioDescend( m_hmmio, &m_ckRiff, NULL, 0 ) ) )
+        return DXUT_ERR( L"mmioDescend", E_FAIL );
+
+    // Check to make sure this is a valid wave file
+    if( (m_ckRiff.ckid != FOURCC_RIFF) ||
+        (m_ckRiff.fccType != mmioFOURCC('W', 'A', 'V', 'E') ) )
+        return DXUT_ERR( L"mmioFOURCC", E_FAIL );
+
+    // Search the input file for for the 'fmt ' chunk.
+    ckIn.ckid = mmioFOURCC('f', 'm', 't', ' ');
+    if( 0 != mmioDescend( m_hmmio, &ckIn, &m_ckRiff, MMIO_FINDCHUNK ) )
+        return DXUT_ERR( L"mmioDescend", E_FAIL );
+
+    // Expect the 'fmt' chunk to be at least as large as <PCMWAVEFORMAT>;
+    // if there are extra parameters at the end, we'll ignore them
+       if( ckIn.cksize < (LONG) sizeof(PCMWAVEFORMAT) )
+           return DXUT_ERR( L"sizeof(PCMWAVEFORMAT)", E_FAIL );
+
+    // Read the 'fmt ' chunk into <pcmWaveFormat>.
+    if( mmioRead( m_hmmio, (HPSTR) &pcmWaveFormat,
+                  sizeof(pcmWaveFormat)) != sizeof(pcmWaveFormat) )
+        return DXUT_ERR( L"mmioRead", E_FAIL );
+
+    // Allocate the waveformatex, but if its not pcm format, read the next
+    // word, and thats how many extra bytes to allocate.
+    if( pcmWaveFormat.wf.wFormatTag == WAVE_FORMAT_PCM )
+    {
+        m_pwfx = (WAVEFORMATEX*)new CHAR[ sizeof(WAVEFORMATEX) ];
+        if( NULL == m_pwfx )
+            return DXUT_ERR( L"m_pwfx", E_FAIL );
+
+        // Copy the bytes from the pcm structure to the waveformatex structure
+        memcpy( m_pwfx, &pcmWaveFormat, sizeof(pcmWaveFormat) );
+        m_pwfx->cbSize = 0;
+    }
+    else
+    {
+        // Read in length of extra bytes.
+        WORD cbExtraBytes = 0L;
+        if( mmioRead( m_hmmio, (CHAR*)&cbExtraBytes, sizeof(WORD)) != sizeof(WORD) )
+            return DXUT_ERR( L"mmioRead", E_FAIL );
+
+        m_pwfx = (WAVEFORMATEX*)new CHAR[ sizeof(WAVEFORMATEX) + cbExtraBytes ];
+        if( NULL == m_pwfx )
+            return DXUT_ERR( L"new", E_FAIL );
+
+        // Copy the bytes from the pcm structure to the waveformatex structure
+        memcpy( m_pwfx, &pcmWaveFormat, sizeof(pcmWaveFormat) );
+        m_pwfx->cbSize = cbExtraBytes;
+
+        // Now, read those extra bytes into the structure, if cbExtraAlloc != 0.
+        if( mmioRead( m_hmmio, (CHAR*)(((BYTE*)&(m_pwfx->cbSize))+sizeof(WORD)),
+                      cbExtraBytes ) != cbExtraBytes )
+        {
+            SAFE_DELETE( m_pwfx );
+            return DXUT_ERR( L"mmioRead", E_FAIL );
+        }
+    }
+
+    // Ascend the input file out of the 'fmt ' chunk.
+    if( 0 != mmioAscend( m_hmmio, &ckIn, 0 ) )
+    {
+        SAFE_DELETE( m_pwfx );
+        return DXUT_ERR( L"mmioAscend", E_FAIL );
+    }
+
+    return S_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CWaveFile::GetSize()
+// Desc: Retuns the size of the read access wave file
+//-----------------------------------------------------------------------------
+DWORD CWaveFile::GetSize()
+{
+    return m_dwSize;
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CWaveFile::ResetFile()
+// Desc: Resets the internal m_ck pointer so reading starts from the
+//       beginning of the file again
+//-----------------------------------------------------------------------------
+HRESULT CWaveFile::ResetFile()
+{
+    if( m_bIsReadingFromMemory )
+    {
+        m_pbDataCur = m_pbData;
+    }
+    else
+    {
+        if( m_hmmio == NULL )
+            return CO_E_NOTINITIALIZED;
+
+        if( m_dwFlags == WAVEFILE_READ )
+        {
+            // Seek to the data
+            if( -1 == mmioSeek( m_hmmio, m_ckRiff.dwDataOffset + sizeof(FOURCC),
+                            SEEK_SET ) )
+                return DXUT_ERR( L"mmioSeek", E_FAIL );
+
+            // Search the input file for the 'data' chunk.
+            m_ck.ckid = mmioFOURCC('d', 'a', 't', 'a');
+            if( 0 != mmioDescend( m_hmmio, &m_ck, &m_ckRiff, MMIO_FINDCHUNK ) )
+              return DXUT_ERR( L"mmioDescend", E_FAIL );
+        }
+        else
+        {
+            // Create the 'data' chunk that holds the waveform samples.
+            m_ck.ckid = mmioFOURCC('d', 'a', 't', 'a');
+            m_ck.cksize = 0;
+
+            if( 0 != mmioCreateChunk( m_hmmio, &m_ck, 0 ) )
+                return DXUT_ERR( L"mmioCreateChunk", E_FAIL );
+
+            if( 0 != mmioGetInfo( m_hmmio, &m_mmioinfoOut, 0 ) )
+                return DXUT_ERR( L"mmioGetInfo", E_FAIL );
+        }
+    }
+
+    return S_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CWaveFile::Read()
+// Desc: Reads section of data from a wave file into pBuffer and returns
+//       how much read in pdwSizeRead, reading not more than dwSizeToRead.
+//       This uses m_ck to determine where to start reading from.  So
+//       subsequent calls will be continue where the last left off unless
+//       Reset() is called.
+//-----------------------------------------------------------------------------
+HRESULT CWaveFile::Read( BYTE* pBuffer, DWORD dwSizeToRead, DWORD* pdwSizeRead )
+{
+    if( m_bIsReadingFromMemory )
+    {
+        if( m_pbDataCur == NULL )
+            return CO_E_NOTINITIALIZED;
+        if( pdwSizeRead != NULL )
+            *pdwSizeRead = 0;
+
+        if( (BYTE*)(m_pbDataCur + dwSizeToRead) >
+            (BYTE*)(m_pbData + m_ulDataSize) )
+        {
+            dwSizeToRead = m_ulDataSize - (DWORD)(m_pbDataCur - m_pbData);
+        }
+
+        CopyMemory( pBuffer, m_pbDataCur, dwSizeToRead );
+
+        if( pdwSizeRead != NULL )
+            *pdwSizeRead = dwSizeToRead;
+
+        return S_OK;
+    }
+    else
+    {
+        MMIOINFO mmioinfoIn; // current status of m_hmmio
+
+        if( m_hmmio == NULL )
+            return CO_E_NOTINITIALIZED;
+        if( pBuffer == NULL || pdwSizeRead == NULL )
+            return E_INVALIDARG;
+
+        if( pdwSizeRead != NULL )
+            *pdwSizeRead = 0;
+
+        if( 0 != mmioGetInfo( m_hmmio, &mmioinfoIn, 0 ) )
+            return DXUT_ERR( L"mmioGetInfo", E_FAIL );
+
+        UINT cbDataIn = dwSizeToRead;
+        if( cbDataIn > m_ck.cksize )
+            cbDataIn = m_ck.cksize;
+
+        m_ck.cksize -= cbDataIn;
+
+        for( DWORD cT = 0; cT < cbDataIn; cT++ )
+        {
+            // Copy the bytes from the io to the buffer.
+            if( mmioinfoIn.pchNext == mmioinfoIn.pchEndRead )
+            {
+                if( 0 != mmioAdvance( m_hmmio, &mmioinfoIn, MMIO_READ ) )
+                    return DXUT_ERR( L"mmioAdvance", E_FAIL );
+
+                if( mmioinfoIn.pchNext == mmioinfoIn.pchEndRead )
+                    return DXUT_ERR( L"mmioinfoIn.pchNext", E_FAIL );
+            }
+
+            // Actual copy.
+            *((BYTE*)pBuffer+cT) = *((BYTE*)mmioinfoIn.pchNext);
+            mmioinfoIn.pchNext++;
+        }
+
+        if( 0 != mmioSetInfo( m_hmmio, &mmioinfoIn, 0 ) )
+            return DXUT_ERR( L"mmioSetInfo", E_FAIL );
+
+        if( pdwSizeRead != NULL )
+            *pdwSizeRead = cbDataIn;
+
+        return S_OK;
+    }
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CWaveFile::Close()
+// Desc: Closes the wave file
+//-----------------------------------------------------------------------------
+HRESULT CWaveFile::Close()
+{
+    if( m_dwFlags == WAVEFILE_READ )
+    {
+        mmioClose( m_hmmio, 0 );
+        m_hmmio = NULL;
+        SAFE_DELETE_ARRAY( m_pResourceBuffer );
+    }
+    else
+    {
+        m_mmioinfoOut.dwFlags |= MMIO_DIRTY;
+
+        if( m_hmmio == NULL )
+            return CO_E_NOTINITIALIZED;
+
+        if( 0 != mmioSetInfo( m_hmmio, &m_mmioinfoOut, 0 ) )
+            return DXUT_ERR( L"mmioSetInfo", E_FAIL );
+
+        // Ascend the output file out of the 'data' chunk -- this will cause
+        // the chunk size of the 'data' chunk to be written.
+        if( 0 != mmioAscend( m_hmmio, &m_ck, 0 ) )
+            return DXUT_ERR( L"mmioAscend", E_FAIL );
+
+        // Do this here instead...
+        if( 0 != mmioAscend( m_hmmio, &m_ckRiff, 0 ) )
+            return DXUT_ERR( L"mmioAscend", E_FAIL );
+
+        mmioSeek( m_hmmio, 0, SEEK_SET );
+
+        if( 0 != (INT)mmioDescend( m_hmmio, &m_ckRiff, NULL, 0 ) )
+            return DXUT_ERR( L"mmioDescend", E_FAIL );
+
+        m_ck.ckid = mmioFOURCC('f', 'a', 'c', 't');
+
+        if( 0 == mmioDescend( m_hmmio, &m_ck, &m_ckRiff, MMIO_FINDCHUNK ) )
+        {
+            DWORD dwSamples = 0;
+            mmioWrite( m_hmmio, (HPSTR)&dwSamples, sizeof(DWORD) );
+            mmioAscend( m_hmmio, &m_ck, 0 );
+        }
+
+        // Ascend the output file out of the 'RIFF' chunk -- this will cause
+        // the chunk size of the 'RIFF' chunk to be written.
+        if( 0 != mmioAscend( m_hmmio, &m_ckRiff, 0 ) )
+            return DXUT_ERR( L"mmioAscend", E_FAIL );
+
+        mmioClose( m_hmmio, 0 );
+        m_hmmio = NULL;
+    }
+
+    return S_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CWaveFile::WriteMMIO()
+// Desc: Support function for reading from a multimedia I/O stream
+//       pwfxDest is the WAVEFORMATEX for this new wave file.
+//       m_hmmio must be valid before calling.  This function uses it to
+//       update m_ckRiff, and m_ck.
+//-----------------------------------------------------------------------------
+HRESULT CWaveFile::WriteMMIO( WAVEFORMATEX *pwfxDest )
+{
+    DWORD    dwFactChunk; // Contains the actual fact chunk. Garbage until WaveCloseWriteFile.
+    MMCKINFO ckOut1;
+
+    dwFactChunk = (DWORD)-1;
+
+    // Create the output file RIFF chunk of form type 'WAVE'.
+    m_ckRiff.fccType = mmioFOURCC('W', 'A', 'V', 'E');
+    m_ckRiff.cksize = 0;
+
+    if( 0 != mmioCreateChunk( m_hmmio, &m_ckRiff, MMIO_CREATERIFF ) )
+        return DXUT_ERR( L"mmioCreateChunk", E_FAIL );
+
+    // We are now descended into the 'RIFF' chunk we just created.
+    // Now create the 'fmt ' chunk. Since we know the size of this chunk,
+    // specify it in the MMCKINFO structure so MMIO doesn't have to seek
+    // back and set the chunk size after ascending from the chunk.
+    m_ck.ckid = mmioFOURCC('f', 'm', 't', ' ');
+    m_ck.cksize = sizeof(PCMWAVEFORMAT);
+
+    if( 0 != mmioCreateChunk( m_hmmio, &m_ck, 0 ) )
+        return DXUT_ERR( L"mmioCreateChunk", E_FAIL );
+
+    // Write the PCMWAVEFORMAT structure to the 'fmt ' chunk if its that type.
+    if( pwfxDest->wFormatTag == WAVE_FORMAT_PCM )
+    {
+        if( mmioWrite( m_hmmio, (HPSTR) pwfxDest,
+                       sizeof(PCMWAVEFORMAT)) != sizeof(PCMWAVEFORMAT))
+            return DXUT_ERR( L"mmioWrite", E_FAIL );
+    }
+    else
+    {
+        // Write the variable length size.
+        if( (UINT)mmioWrite( m_hmmio, (HPSTR) pwfxDest,
+                             sizeof(*pwfxDest) + pwfxDest->cbSize ) !=
+                             ( sizeof(*pwfxDest) + pwfxDest->cbSize ) )
+            return DXUT_ERR( L"mmioWrite", E_FAIL );
+    }
+
+    // Ascend out of the 'fmt ' chunk, back into the 'RIFF' chunk.
+    if( 0 != mmioAscend( m_hmmio, &m_ck, 0 ) )
+        return DXUT_ERR( L"mmioAscend", E_FAIL );
+
+    // Now create the fact chunk, not required for PCM but nice to have.  This is filled
+    // in when the close routine is called.
+    ckOut1.ckid = mmioFOURCC('f', 'a', 'c', 't');
+    ckOut1.cksize = 0;
+
+    if( 0 != mmioCreateChunk( m_hmmio, &ckOut1, 0 ) )
+        return DXUT_ERR( L"mmioCreateChunk", E_FAIL );
+
+    if( mmioWrite( m_hmmio, (HPSTR)&dwFactChunk, sizeof(dwFactChunk)) !=
+                    sizeof(dwFactChunk) )
+         return DXUT_ERR( L"mmioWrite", E_FAIL );
+
+    // Now ascend out of the fact chunk...
+    if( 0 != mmioAscend( m_hmmio, &ckOut1, 0 ) )
+        return DXUT_ERR( L"mmioAscend", E_FAIL );
+
+    return S_OK;
+}
+
+
+//-----------------------------------------------------------------------------
+// Name: CWaveFile::Write()
+// Desc: Writes data to the open wave file
+//-----------------------------------------------------------------------------
+HRESULT CWaveFile::Write( UINT nSizeToWrite, BYTE* pbSrcData, UINT* pnSizeWrote )
+{
+    UINT cT;
+
+    if( m_bIsReadingFromMemory )
+        return E_NOTIMPL;
+    if( m_hmmio == NULL )
+        return CO_E_NOTINITIALIZED;
+    if( pnSizeWrote == NULL || pbSrcData == NULL )
+        return E_INVALIDARG;
+
+    *pnSizeWrote = 0;
+
+    for( cT = 0; cT < nSizeToWrite; cT++ )
+    {
+        if( m_mmioinfoOut.pchNext == m_mmioinfoOut.pchEndWrite )
+        {
+            m_mmioinfoOut.dwFlags |= MMIO_DIRTY;
+            if( 0 != mmioAdvance( m_hmmio, &m_mmioinfoOut, MMIO_WRITE ) )
+                return DXUT_ERR( L"mmioAdvance", E_FAIL );
+        }
+
+        *((BYTE*)m_mmioinfoOut.pchNext) = *((BYTE*)pbSrcData+cT);
+        (BYTE*)m_mmioinfoOut.pchNext++;
+
+        (*pnSizeWrote)++;
+    }
+
+    return S_OK;
+}
