diff --git a/Demos/duidemo/duidemo.cpp b/Demos/duidemo/duidemo.cpp index 87cbf5d5..b4a784b1 100644 --- a/Demos/duidemo/duidemo.cpp +++ b/Demos/duidemo/duidemo.cpp @@ -125,7 +125,7 @@ class CDemoFrame : public CWindowWnd, public INotifyUI, public CWebBrowserEventH CDuiString sName = pControl->GetName(); if(sName.CompareNoCase(_T("homepage_btn")) == 0) { - ShellExecute(NULL, _T("open"), _T("http://www.winradar.com/?f=duidemo"), NULL, NULL, SW_SHOW); + ShellExecute(NULL, _T("open"), _T("https://github.com/duisharp"), NULL, NULL, SW_SHOW); } } diff --git a/Demos/qqsetup/Res/qqsetup.ico b/Demos/qqsetup/Res/qqsetup.ico deleted file mode 100644 index 683ea4d3..00000000 Binary files a/Demos/qqsetup/Res/qqsetup.ico and /dev/null differ diff --git a/Demos/qqsetup/Res/qqsetup.zip b/Demos/qqsetup/Res/qqsetup.zip deleted file mode 100644 index c2193b10..00000000 Binary files a/Demos/qqsetup/Res/qqsetup.zip and /dev/null differ diff --git a/Demos/qqsetup/qqsetup.cpp b/Demos/qqsetup/qqsetup.cpp deleted file mode 100644 index 0a052967..00000000 --- a/Demos/qqsetup/qqsetup.cpp +++ /dev/null @@ -1,301 +0,0 @@ -#include "stdafx.h" -#include -#include -#include "ControlEx.h" -#include "resource.h" -#include -class CMainFrame : public CWindowWnd, public INotifyUI, public CWebBrowserEventHandler -{ -public: - CMainFrame() { - - }; - -public: - void Init() { - m_pCloseBtn = static_cast(m_pm.FindControl(_T("closebtn"))); - m_pMaxBtn = static_cast(m_pm.FindControl(_T("maxbtn"))); - m_pRestoreBtn = static_cast(m_pm.FindControl(_T("restorebtn"))); - m_pMinBtn = static_cast(m_pm.FindControl(_T("minbtn"))); - } - - void OnPrepare() { - - } - - - virtual HRESULT STDMETHODCALLTYPE UpdateUI( void) - { - return S_OK; - } - -public: - LPCTSTR GetWindowClassName() const { return _T("UIMainFrame"); }; - UINT GetClassStyle() const { return CS_DBLCLKS; }; - void OnFinalMessage(HWND /*hWnd*/) { delete this; }; - - void Notify(TNotifyUI& msg) - { - if( msg.sType == _T("windowinit") ) OnPrepare(); - else if( msg.sType == _T("click") ) { - if( msg.pSender == m_pCloseBtn ) { - PostQuitMessage(0); - return; - } - else if( msg.pSender == m_pMinBtn ) { - SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0); return; } - else if( msg.pSender == m_pMaxBtn ) { - SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, 0); return; } - else if( msg.pSender == m_pRestoreBtn ) { - SendMessage(WM_SYSCOMMAND, SC_RESTORE, 0); return; } - - // 按钮消息 - OnLClick(msg.pSender); - } - else if(msg.sType==_T("selectchanged")) - { - CDuiString name = msg.pSender->GetName(); - } - } - - void OnLClick(CControlUI *pControl) - { - CDuiString sName = pControl->GetName(); - if(sName.CompareNoCase(_T("homepage_btn")) == 0) - { - ShellExecute(NULL, _T("open"), _T("http://www.winradar.com/?f=duidemo"), NULL, NULL, SW_SHOW); - } - } - - LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) - { - // ICONS 图标加载 - SetIcon(IDR_MAINFRAME); - - LONG styleValue = ::GetWindowLong(*this, GWL_STYLE); - styleValue &= ~WS_CAPTION; - ::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN); - - m_pm.Init(m_hWnd); - CDialogBuilder builder; - CDialogBuilderCallbackEx cb; - CControlUI* pRoot = builder.Create(_T("skin.xml"), (UINT)0, &cb, &m_pm); - ASSERT(pRoot && "Failed to parse XML"); - m_pm.AttachDialog(pRoot); - m_pm.AddNotifier(this); - - Init(); - return 0; - } - - LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) - { - bHandled = FALSE; - return 0; - } - - LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) - { - ::PostQuitMessage(0L); - - bHandled = FALSE; - return 0; - } - - LRESULT OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) - { - if( ::IsIconic(*this) ) bHandled = FALSE; - return (wParam == 0) ? TRUE : FALSE; - } - - LRESULT OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) - { - return 0; - } - - LRESULT OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) - { - return 0; - } - - LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) - { - POINT pt; pt.x = GET_X_LPARAM(lParam); pt.y = GET_Y_LPARAM(lParam); - ::ScreenToClient(*this, &pt); - - RECT rcClient; - ::GetClientRect(*this, &rcClient); - - if( !::IsZoomed(*this) ) { - RECT rcSizeBox = m_pm.GetSizeBox(); - if( pt.y < rcClient.top + rcSizeBox.top ) { - if( pt.x < rcClient.left + rcSizeBox.left ) return HTTOPLEFT; - if( pt.x > rcClient.right - rcSizeBox.right ) return HTTOPRIGHT; - return HTTOP; - } - else if( pt.y > rcClient.bottom - rcSizeBox.bottom ) { - if( pt.x < rcClient.left + rcSizeBox.left ) return HTBOTTOMLEFT; - if( pt.x > rcClient.right - rcSizeBox.right ) return HTBOTTOMRIGHT; - return HTBOTTOM; - } - if( pt.x < rcClient.left + rcSizeBox.left ) return HTLEFT; - if( pt.x > rcClient.right - rcSizeBox.right ) return HTRIGHT; - } - - RECT rcCaption = m_pm.GetCaptionRect(); - if( pt.x >= rcClient.left + rcCaption.left && pt.x < rcClient.right - rcCaption.right \ - && pt.y >= rcCaption.top && pt.y < rcCaption.bottom ) { - CControlUI* pControl = static_cast(m_pm.FindControl(pt)); - if( pControl && _tcscmp(pControl->GetClass(), _T("ButtonUI")) != 0 && - _tcscmp(pControl->GetClass(), _T("OptionUI")) != 0 && - _tcscmp(pControl->GetClass(), _T("TextUI")) != 0 ) - return HTCAPTION; - } - - return HTCLIENT; - } - - LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) - { - SIZE szRoundCorner = m_pm.GetRoundCorner(); - if( !::IsIconic(*this) && (szRoundCorner.cx != 0 || szRoundCorner.cy != 0) ) { - CDuiRect rcWnd; - ::GetWindowRect(*this, &rcWnd); - rcWnd.Offset(-rcWnd.left, -rcWnd.top); - rcWnd.right++; rcWnd.bottom++; - HRGN hRgn = ::CreateRoundRectRgn(rcWnd.left, rcWnd.top, rcWnd.right, rcWnd.bottom, szRoundCorner.cx, szRoundCorner.cy); - ::SetWindowRgn(*this, hRgn, TRUE); - ::DeleteObject(hRgn); - } - - bHandled = FALSE; - return 0; - } - - LRESULT OnGetMinMaxInfo(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) - { - MONITORINFO oMonitor = {}; - oMonitor.cbSize = sizeof(oMonitor); - ::GetMonitorInfo(::MonitorFromWindow(*this, MONITOR_DEFAULTTOPRIMARY), &oMonitor); - CDuiRect rcWork = oMonitor.rcWork; - rcWork.Offset(-rcWork.left, -rcWork.top); - - LPMINMAXINFO lpMMI = (LPMINMAXINFO) lParam; - lpMMI->ptMaxPosition.x = rcWork.left; - lpMMI->ptMaxPosition.y = rcWork.top; - lpMMI->ptMaxSize.x = rcWork.right; - lpMMI->ptMaxSize.y = rcWork.bottom; - - bHandled = FALSE; - return 0; - } - - LRESULT OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) - { - // 有时会在收到WM_NCDESTROY后收到wParam为SC_CLOSE的WM_SYSCOMMAND - if( wParam == SC_CLOSE ) { - ::PostQuitMessage(0L); - bHandled = TRUE; - return 0; - } - BOOL bZoomed = ::IsZoomed(*this); - LRESULT lRes = CWindowWnd::HandleMessage(uMsg, wParam, lParam); - if( ::IsZoomed(*this) != bZoomed ) { - if( !bZoomed ) { - CControlUI* pControl = static_cast(m_pm.FindControl(_T("maxbtn"))); - if( pControl ) pControl->SetVisible(false); - pControl = static_cast(m_pm.FindControl(_T("restorebtn"))); - if( pControl ) pControl->SetVisible(true); - } - else { - CControlUI* pControl = static_cast(m_pm.FindControl(_T("maxbtn"))); - if( pControl ) pControl->SetVisible(true); - pControl = static_cast(m_pm.FindControl(_T("restorebtn"))); - if( pControl ) pControl->SetVisible(false); - } - } - return lRes; - } - - LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) - { - LRESULT lRes = 0; - BOOL bHandled = TRUE; - switch( uMsg ) { - case WM_CREATE: lRes = OnCreate(uMsg, wParam, lParam, bHandled); break; - case WM_CLOSE: lRes = OnClose(uMsg, wParam, lParam, bHandled); break; - case WM_DESTROY: lRes = OnDestroy(uMsg, wParam, lParam, bHandled); break; - case WM_NCACTIVATE: lRes = OnNcActivate(uMsg, wParam, lParam, bHandled); break; - case WM_NCCALCSIZE: lRes = OnNcCalcSize(uMsg, wParam, lParam, bHandled); break; - case WM_NCPAINT: lRes = OnNcPaint(uMsg, wParam, lParam, bHandled); break; - case WM_NCHITTEST: lRes = OnNcHitTest(uMsg, wParam, lParam, bHandled); break; - case WM_SIZE: lRes = OnSize(uMsg, wParam, lParam, bHandled); break; - case WM_GETMINMAXINFO: lRes = OnGetMinMaxInfo(uMsg, wParam, lParam, bHandled); break; - case WM_SYSCOMMAND: lRes = OnSysCommand(uMsg, wParam, lParam, bHandled); break; - default: - bHandled = FALSE; - } - if( bHandled ) return lRes; - if( m_pm.MessageHandler(uMsg, wParam, lParam, lRes) ) return lRes; - return CWindowWnd::HandleMessage(uMsg, wParam, lParam); - } - -public: - CPaintManagerUI m_pm; - -private: - CButtonUI* m_pCloseBtn; - CButtonUI* m_pMaxBtn; - CButtonUI* m_pRestoreBtn; - CButtonUI* m_pMinBtn; -}; - -static LPBYTE resource_zip_buffer_ = NULL; - -//#define USE_EMBEDED_RESOURCE - -int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int nCmdShow) -{ - CPaintManagerUI::SetInstance(hInstance); - -#ifdef USE_EMBEDED_RESOURCE - HRSRC hResource = ::FindResource(CPaintManagerUI::GetResourceDll(), MAKEINTRESOURCE(IDR_ZIPRES), _T("ZIPRES")); - if( hResource == NULL ) - return 0L; - DWORD dwSize = 0; - HGLOBAL hGlobal = ::LoadResource(CPaintManagerUI::GetResourceDll(), hResource); - if( hGlobal == NULL ) { - FreeResource(hResource); - return 0L; - } - dwSize = ::SizeofResource(CPaintManagerUI::GetResourceDll(), hResource); - if( dwSize == 0 ) - return 0L; - resource_zip_buffer_ = new BYTE[ dwSize ]; - if (resource_zip_buffer_ != NULL) - { - ::CopyMemory(resource_zip_buffer_, (LPBYTE)::LockResource(hGlobal), dwSize); - } - - ::FreeResource(hResource); - CPaintManagerUI::SetResourceZip(resource_zip_buffer_, dwSize); -#else - CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath() + _T("skin\\qqsetup"));// - //CPaintManagerUI::SetResourceZip(_T("gamebox.zip")); -#endif - - - HRESULT Hr = ::CoInitialize(NULL); - if( FAILED(Hr) ) return 0; - - CMainFrame* pFrame = new CMainFrame(); - if( pFrame == NULL ) return 0; - pFrame->Create(NULL, _T("软件选项"), UI_WNDSTYLE_FRAME, 0L, 0, 0, 800, 572); - pFrame->CenterWindow(); - ::ShowWindow(*pFrame, SW_SHOW); - - CPaintManagerUI::MessageLoop(); - - ::CoUninitialize(); - return 0; -} \ No newline at end of file diff --git a/Demos/qqsetup/qqsetup.vcxproj.filters b/Demos/qqsetup/qqsetup.vcxproj.filters deleted file mode 100644 index db89f03a..00000000 --- a/Demos/qqsetup/qqsetup.vcxproj.filters +++ /dev/null @@ -1,123 +0,0 @@ -锘 - - - - {c75b9d7c-452a-4867-a585-e8aee4a05f51} - cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - {249f81db-516d-4a60-9882-d3fd674e412c} - h;hpp;hxx;hm;inl - - - {5323114f-c462-496c-8a26-5f0586629382} - - - {495d8e73-881d-481f-83d1-3ca5ee46318e} - - - {d2f13808-77fd-462b-bab2-501843e85c61} - - - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - - - Resources - - - Resources\images - - - Resources\images - - - Resources\images - - - Resources\images - - - Resources\images - - - Resources\images - - - Resources\images - - - Resources\images - - - Resources\images - - - Resources\images - - - Resources\images - - - Resources\images - - - Resources\images - - - Resources\images - - - Resources\images - - - Resources\images - - - Resources\images - - - Resources\images - - - Resources\images - - - Resources\images - - - Resources\images - - - Resources\images - - - Resources\xmls - - - Resources - - - - - Resources - - - \ No newline at end of file diff --git a/Demos/qqsetup/qqsetup.vcxproj.user b/Demos/transwnd/GameBox.vcxproj.user similarity index 100% rename from Demos/qqsetup/qqsetup.vcxproj.user rename to Demos/transwnd/GameBox.vcxproj.user diff --git a/Demos/transwnd/MainWnd.cpp b/Demos/transwnd/MainWnd.cpp new file mode 100644 index 00000000..3b5671ea --- /dev/null +++ b/Demos/transwnd/MainWnd.cpp @@ -0,0 +1,155 @@ +#include "StdAfx.h" +#include "MainWnd.h" + +#include +////////////////////////////////////////////////////////////////////////// +/// + +DUI_BEGIN_MESSAGE_MAP(CMainWnd, WindowImplBase) + DUI_ON_MSGTYPE(DUI_MSGTYPE_CLICK,OnClick) + DUI_ON_MSGTYPE(DUI_MSGTYPE_ITEMSELECT,OnItemSelect) + DUI_ON_MSGTYPE(DUI_MSGTYPE_SELECTCHANGED,OnSelectChanged) +DUI_END_MESSAGE_MAP() + +CMainWnd::CMainWnd(void) +{ +} + +CMainWnd::~CMainWnd(void) +{ +} + +void CMainWnd::OnFinalMessage( HWND hWnd) +{ + __super::OnFinalMessage(hWnd); + delete this; +} + +DuiLib::CDuiString CMainWnd::GetSkinFolder() +{ +#ifdef _DEBUG + return _T("skin\\transwnd\\"); +#else + return _T("skin\\"); +#endif + +} + +DuiLib::CDuiString CMainWnd::GetSkinFile() +{ + return _T("skin.xml"); +} + +UILIB_RESOURCETYPE CMainWnd::GetResourceType() const +{ +#ifdef _DEBUG + return UILIB_FILE; +#else + return UILIB_ZIPRESOURCE; +#endif +} + +LPCTSTR CMainWnd::GetResourceID() const +{ + return _T("IDR_RES_SKIN"); +} + +DuiLib::CDuiString CMainWnd::GetZIPFileName() const +{ + return _T("skin.zip"); +} + +LPCTSTR CMainWnd::GetWindowClassName( void ) const +{ + return _T("MainWnd"); +} + +void CMainWnd::OnClick( TNotifyUI &msg ) +{ + CDuiString sName = msg.pSender->GetName(); + sName.MakeLower(); + + if( msg.pSender == m_pCloseBtn ) { + PostQuitMessage(0); + return; + } + else if( msg.pSender == m_pMinBtn ) { + SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0); return; } + else if( msg.pSender == m_pMaxBtn ) { + SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, 0); return; } + else if( msg.pSender == m_pRestoreBtn ) { + SendMessage(WM_SYSCOMMAND, SC_RESTORE, 0); return; } + else if( msg.pSender == m_pMenuBtn ) { + } + else if(sName.CompareNoCase(_T("homepage_btn")) == 0) + { + ShellExecute(NULL, _T("open"), _T("https://github.com/duisharp"), NULL, NULL, SW_SHOW); + } +} + +void CMainWnd::OnSelectChanged( TNotifyUI &msg ) +{ + CDuiString sName = msg.pSender->GetName(); + sName.MakeLower(); + +} + +void CMainWnd::OnItemSelect( TNotifyUI &msg ) +{ + CDuiString sName = msg.pSender->GetName(); + sName.MakeLower(); +} + +LRESULT CMainWnd::HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) + { + // 关闭窗口,退出程序 + if(uMsg == WM_DESTROY) + { + ::PostQuitMessage(0L); + bHandled = TRUE; + return 0; + } + bHandled = FALSE; + return 0; + } + +void CMainWnd::Notify( TNotifyUI &msg ) +{ + return WindowImplBase::Notify(msg); +} + +LRESULT CMainWnd::OnSysCommand( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ) +{ + // 有时会在收到WM_NCDESTROY后收到wParam为SC_CLOSE的WM_SYSCOMMAND + if( wParam == SC_CLOSE ) { + ::PostQuitMessage(0L); + bHandled = TRUE; + return 0; + } + BOOL bZoomed = ::IsZoomed(*this); + LRESULT lRes = CWindowWnd::HandleMessage(uMsg, wParam, lParam); + if( ::IsZoomed(*this) != bZoomed ) { + if( !bZoomed ) { + CControlUI* pControl = static_cast(m_PaintManager.FindControl(_T("maxbtn"))); + if( pControl ) pControl->SetVisible(false); + pControl = static_cast(m_PaintManager.FindControl(_T("restorebtn"))); + if( pControl ) pControl->SetVisible(true); + } + else { + CControlUI* pControl = static_cast(m_PaintManager.FindControl(_T("maxbtn"))); + if( pControl ) pControl->SetVisible(true); + pControl = static_cast(m_PaintManager.FindControl(_T("restorebtn"))); + if( pControl ) pControl->SetVisible(false); + } + } + return lRes; +} + +void CMainWnd::InitWindow() +{ + m_pCloseBtn = static_cast(m_PaintManager.FindControl(_T("closebtn"))); + m_pMaxBtn = static_cast(m_PaintManager.FindControl(_T("maxbtn"))); + m_pRestoreBtn = static_cast(m_PaintManager.FindControl(_T("restorebtn"))); + m_pMinBtn = static_cast(m_PaintManager.FindControl(_T("minbtn"))); + m_pMenuBtn = static_cast(m_PaintManager.FindControl(_T("menubtn"))); +} diff --git a/Demos/transwnd/MainWnd.h b/Demos/transwnd/MainWnd.h new file mode 100644 index 00000000..46df35d4 --- /dev/null +++ b/Demos/transwnd/MainWnd.h @@ -0,0 +1,37 @@ +#pragma once + +////////////////////////////////////////////////////////////////////////// +/// + +class CMainWnd : public WindowImplBase +{ +public: + CMainWnd(void); + ~CMainWnd(void); + +public: + virtual void OnFinalMessage( HWND ); + virtual CDuiString GetSkinFolder(); + virtual CDuiString GetSkinFile(); + virtual LPCTSTR GetWindowClassName( void ) const; + virtual void Notify( TNotifyUI &msg ); + virtual void InitWindow(); + virtual UILIB_RESOURCETYPE GetResourceType() const; + virtual LPCTSTR GetResourceID() const; + virtual CDuiString GetZIPFileName() const; + + DUI_DECLARE_MESSAGE_MAP() + virtual void OnClick(TNotifyUI& msg); + virtual void OnSelectChanged( TNotifyUI &msg ); + virtual void OnItemSelect( TNotifyUI &msg ); + + virtual LRESULT OnSysCommand( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ); + LRESULT HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + +private: + CButtonUI* m_pCloseBtn; + CButtonUI* m_pMaxBtn; + CButtonUI* m_pRestoreBtn; + CButtonUI* m_pMinBtn; + CButtonUI* m_pMenuBtn; +}; diff --git a/Demos/qqsetup/ControlEx.h b/Demos/transwnd/MyControls.h similarity index 93% rename from Demos/qqsetup/ControlEx.h rename to Demos/transwnd/MyControls.h index 264c3184..b52ac3f0 100644 --- a/Demos/qqsetup/ControlEx.h +++ b/Demos/transwnd/MyControls.h @@ -4,14 +4,14 @@ #include #include - class CDialogBuilderCallbackEx : public IDialogBuilderCallback { public: CControlUI* CreateControl(LPCTSTR pstrClass) { - return NULL; + return NULL; } }; + #endif __CONTROLEX_H__ diff --git a/Demos/transwnd/Res/transwnd.ico b/Demos/transwnd/Res/transwnd.ico new file mode 100644 index 00000000..75c24464 Binary files /dev/null and b/Demos/transwnd/Res/transwnd.ico differ diff --git a/Demos/transwnd/Res/transwnd.zip b/Demos/transwnd/Res/transwnd.zip new file mode 100644 index 00000000..cd154a2a Binary files /dev/null and b/Demos/transwnd/Res/transwnd.zip differ diff --git a/Demos/qqsetup/StdAfx.cpp b/Demos/transwnd/StdAfx.cpp similarity index 100% rename from Demos/qqsetup/StdAfx.cpp rename to Demos/transwnd/StdAfx.cpp diff --git a/Demos/qqsetup/StdAfx.h b/Demos/transwnd/StdAfx.h similarity index 100% rename from Demos/qqsetup/StdAfx.h rename to Demos/transwnd/StdAfx.h diff --git a/Demos/qqsetup/resource.h b/Demos/transwnd/resource.h similarity index 92% rename from Demos/qqsetup/resource.h rename to Demos/transwnd/resource.h index d1f8f097..96147db3 100644 Binary files a/Demos/qqsetup/resource.h and b/Demos/transwnd/resource.h differ diff --git a/Demos/transwnd/transwnd.cpp b/Demos/transwnd/transwnd.cpp new file mode 100644 index 00000000..e8479ed5 --- /dev/null +++ b/Demos/transwnd/transwnd.cpp @@ -0,0 +1,26 @@ +#include "stdafx.h" +#include "resource.h" +#include "MainWnd.h" + +static LPBYTE resource_zip_buffer_ = NULL; + +//#define USE_EMBEDED_RESOURCE + +int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int nCmdShow) +{ + CPaintManagerUI::SetInstance(hInstance); + + HRESULT Hr = ::CoInitialize(NULL); + if( FAILED(Hr) ) return 0; + + CMainWnd* pFrame = new CMainWnd(); + if( pFrame == NULL ) return 0; + pFrame->Create(NULL, _T("xxplayer"), UI_WNDSTYLE_FRAME, 0L, 0, 0, 990,690); + pFrame->CenterWindow(); + pFrame->ShowModal(); + + CPaintManagerUI::MessageLoop(); + + ::CoUninitialize(); + return 0; +} \ No newline at end of file diff --git a/Demos/qqsetup/qqsetup.rc b/Demos/transwnd/transwnd.rc similarity index 84% rename from Demos/qqsetup/qqsetup.rc rename to Demos/transwnd/transwnd.rc index 773abaa4..7b0b85e9 100644 Binary files a/Demos/qqsetup/qqsetup.rc and b/Demos/transwnd/transwnd.rc differ diff --git a/Demos/qqsetup/qqsetup.vcxproj b/Demos/transwnd/transwnd.vcxproj similarity index 85% rename from Demos/qqsetup/qqsetup.vcxproj rename to Demos/transwnd/transwnd.vcxproj index 61e797df..431399e8 100644 --- a/Demos/qqsetup/qqsetup.vcxproj +++ b/Demos/transwnd/transwnd.vcxproj @@ -19,8 +19,8 @@ - qqsetup - {797901AA-9447-45C6-AF89-5D5DA54C4159} + transwnd + {2C0EADA2-111E-4D58-B171-B1C896D7A0DE} 360 @@ -76,14 +76,14 @@ <_ProjectFileVersion>10.0.40219.1 $(SolutionDir)bin\ $(SolutionDir)bin\ - $(SolutionDir)temp\$(ProjectName)\$(Configuration)\ - $(SolutionDir)temp\$(ProjectName)\$(Configuration)\ + $(SolutionDir)temp\transwnd\$(Configuration)\ + $(SolutionDir)temp\transwnd\$(Configuration)\ true true $(SolutionDir)bin\ $(SolutionDir)bin\ - $(SolutionDir)temp\$(ProjectName)\$(Configuration)\ - $(SolutionDir)temp\$(ProjectName)\$(Configuration)\ + $(SolutionDir)temp\transwnd\$(Configuration)\ + $(SolutionDir)temp\transwnd\$(Configuration)\ false false AllRules.ruleset @@ -109,7 +109,7 @@ true true Win32 - .\Debug/qqsetup.tlb + .\Debug/transwnd.tlb @@ -147,7 +147,7 @@ true true Win32 - .\Debug/qqsetup.tlb + .\Debug/transwnd.tlb @@ -185,7 +185,7 @@ true true Win32 - .\Release/qqsetup.tlb + .\Release/transwnd.tlb @@ -196,7 +196,7 @@ true MultiThreaded true - NotUsing + Use stdafx.h Level3 true @@ -221,7 +221,7 @@ true true Win32 - .\Release/qqsetup.tlb + .\Release/transwnd.tlb @@ -232,7 +232,7 @@ true MultiThreaded true - NotUsing + Use stdafx.h Level3 true @@ -252,7 +252,8 @@ - + + %(PreprocessorDefinitions) %(PreprocessorDefinitions) @@ -265,41 +266,23 @@ - + - - - - - - - - - - - - - - - + Designer - - - - - - - - - - + + + + - + + {e106acd7-4e53-4aee-942b-d0dd426db34e} + diff --git a/Demos/transwnd/transwnd.vcxproj.filters b/Demos/transwnd/transwnd.vcxproj.filters new file mode 100644 index 00000000..eb512872 --- /dev/null +++ b/Demos/transwnd/transwnd.vcxproj.filters @@ -0,0 +1,51 @@ +锘 + + + + {c75b9d7c-452a-4867-a585-e8aee4a05f51} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + {249f81db-516d-4a60-9882-d3fd674e412c} + h;hpp;hxx;hm;inl + + + {057557f5-517e-47cf-a695-8b482beaf54a} + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + Resources + + + Resources + + + + + Resources + + + \ No newline at end of file diff --git a/Demos/transwnd/transwnd.vcxproj.user b/Demos/transwnd/transwnd.vcxproj.user new file mode 100644 index 00000000..ace9a86a --- /dev/null +++ b/Demos/transwnd/transwnd.vcxproj.user @@ -0,0 +1,3 @@ +锘 + + \ No newline at end of file diff --git a/Demos/xlgamebox/Debug/XLGameBox.bsc b/Demos/xlgamebox/Debug/XLGameBox.bsc deleted file mode 100644 index 63b6bf70..00000000 Binary files a/Demos/xlgamebox/Debug/XLGameBox.bsc and /dev/null differ diff --git a/Demos/xlgamebox/MainWnd.cpp b/Demos/xlgamebox/MainWnd.cpp index 0bf634c6..13ba5a3d 100644 --- a/Demos/xlgamebox/MainWnd.cpp +++ b/Demos/xlgamebox/MainWnd.cpp @@ -138,7 +138,7 @@ void CMainWnd::OnFinalMessage( HWND hWnd) DuiLib::CDuiString CMainWnd::GetSkinFolder() { #ifdef _DEBUG - return _T("skin\\XLGameBox\\"); + return _T("skin\\xlgamebox\\"); #else return _T("skin\\"); #endif @@ -153,17 +153,21 @@ DuiLib::CDuiString CMainWnd::GetSkinFile() UILIB_RESOURCETYPE CMainWnd::GetResourceType() const { #ifdef _DEBUG - return UILIB_ZIPRESOURCE; + return UILIB_FILE; #else - return UILIB_ZIP; + return UILIB_ZIPRESOURCE; #endif } +LPCTSTR CMainWnd::GetResourceID() const +{ + return _T("IDR_RES_SKIN"); +} + DuiLib::CDuiString CMainWnd::GetZIPFileName() const { return _T("skin.zip"); } - LPCTSTR CMainWnd::GetWindowClassName( void ) const { return _T("MainWnd"); diff --git a/Demos/xlgamebox/MainWnd.h b/Demos/xlgamebox/MainWnd.h index 9712b43f..f681d04f 100644 --- a/Demos/xlgamebox/MainWnd.h +++ b/Demos/xlgamebox/MainWnd.h @@ -38,10 +38,7 @@ class CMainWnd : public WindowImplBase virtual LRESULT OnMouseHover( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ); virtual LRESULT OnChar( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ); virtual UILIB_RESOURCETYPE GetResourceType() const; - virtual LPCTSTR GetResourceID() const - { - return _T("IDR_RES_SKIN1"); - } + virtual LPCTSTR GetResourceID() const; virtual CDuiString GetZIPFileName() const; DUI_DECLARE_MESSAGE_MAP() diff --git a/Demos/xlgamebox/StdAfx.h b/Demos/xlgamebox/StdAfx.h index 0230dea5..decd8362 100644 --- a/Demos/xlgamebox/StdAfx.h +++ b/Demos/xlgamebox/StdAfx.h @@ -16,17 +16,18 @@ #include "..\..\DuiLib\UIlib.h" using namespace DuiLib; + #ifdef _DEBUG # ifdef _UNICODE -# pragma comment(lib, "..\\..\\lib\\DuiLib_ud.lib") -# else # pragma comment(lib, "..\\..\\lib\\DuiLib_d.lib") +# else +# pragma comment(lib, "..\\..\\lib\\DuiLibA_d.lib") # endif #else # ifdef _UNICODE -# pragma comment(lib, "..\\..\\lib\\DuiLib_u.lib") -# else # pragma comment(lib, "..\\..\\lib\\DuiLib.lib") +# else +# pragma comment(lib, "..\\..\\lib\\DuiLibA.lib") # endif #endif diff --git a/Demos/xlgamebox/XLGameBox.aps b/Demos/xlgamebox/XLGameBox.aps new file mode 100644 index 00000000..7a3c61b6 Binary files /dev/null and b/Demos/xlgamebox/XLGameBox.aps differ diff --git a/Demos/xlgamebox/XLGameBox.rc b/Demos/xlgamebox/XLGameBox.rc index 0cff4e81..b903083d 100644 Binary files a/Demos/xlgamebox/XLGameBox.rc and b/Demos/xlgamebox/XLGameBox.rc differ diff --git a/Demos/xlgamebox/XLGameBox.vcxproj.filters b/Demos/xlgamebox/XLGameBox.vcxproj.filters index 30dfcc34..a61e9609 100644 --- a/Demos/xlgamebox/XLGameBox.vcxproj.filters +++ b/Demos/xlgamebox/XLGameBox.vcxproj.filters @@ -78,7 +78,9 @@ Resources - + + Resources + diff --git a/DuiLib.sln b/DuiLib.sln index b4b74da5..cd07d409 100644 --- a/DuiLib.sln +++ b/DuiLib.sln @@ -11,7 +11,9 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "duidemo", "Demos\duidemo\du EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GameBox", "Demos\gamebox\GameBox.vcxproj", "{3EF9795D-3509-4664-8E73-8D315CC0B944}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "qqsetup", "Demos\qqsetup\qqsetup.vcxproj", "{797901AA-9447-45C6-AF89-5D5DA54C4159}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "transwnd", "Demos\transwnd\transwnd.vcxproj", "{2C0EADA2-111E-4D58-B171-B1C896D7A0DE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XLGameBox", "Demos\xlgamebox\XLGameBox.vcxproj", "{0278E09B-92AA-4C18-ACB5-EEDF958395B1}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -53,14 +55,22 @@ Global {3EF9795D-3509-4664-8E73-8D315CC0B944}.Release|Win32.Build.0 = Release|Win32 {3EF9795D-3509-4664-8E73-8D315CC0B944}.ReleaseA|Win32.ActiveCfg = ReleaseA|Win32 {3EF9795D-3509-4664-8E73-8D315CC0B944}.ReleaseA|Win32.Build.0 = ReleaseA|Win32 - {797901AA-9447-45C6-AF89-5D5DA54C4159}.Debug|Win32.ActiveCfg = Debug|Win32 - {797901AA-9447-45C6-AF89-5D5DA54C4159}.Debug|Win32.Build.0 = Debug|Win32 - {797901AA-9447-45C6-AF89-5D5DA54C4159}.DebugA|Win32.ActiveCfg = DebugA|Win32 - {797901AA-9447-45C6-AF89-5D5DA54C4159}.DebugA|Win32.Build.0 = DebugA|Win32 - {797901AA-9447-45C6-AF89-5D5DA54C4159}.Release|Win32.ActiveCfg = Release|Win32 - {797901AA-9447-45C6-AF89-5D5DA54C4159}.Release|Win32.Build.0 = Release|Win32 - {797901AA-9447-45C6-AF89-5D5DA54C4159}.ReleaseA|Win32.ActiveCfg = ReleaseA|Win32 - {797901AA-9447-45C6-AF89-5D5DA54C4159}.ReleaseA|Win32.Build.0 = ReleaseA|Win32 + {2C0EADA2-111E-4D58-B171-B1C896D7A0DE}.Debug|Win32.ActiveCfg = Debug|Win32 + {2C0EADA2-111E-4D58-B171-B1C896D7A0DE}.Debug|Win32.Build.0 = Debug|Win32 + {2C0EADA2-111E-4D58-B171-B1C896D7A0DE}.DebugA|Win32.ActiveCfg = DebugA|Win32 + {2C0EADA2-111E-4D58-B171-B1C896D7A0DE}.DebugA|Win32.Build.0 = DebugA|Win32 + {2C0EADA2-111E-4D58-B171-B1C896D7A0DE}.Release|Win32.ActiveCfg = Release|Win32 + {2C0EADA2-111E-4D58-B171-B1C896D7A0DE}.Release|Win32.Build.0 = Release|Win32 + {2C0EADA2-111E-4D58-B171-B1C896D7A0DE}.ReleaseA|Win32.ActiveCfg = ReleaseA|Win32 + {2C0EADA2-111E-4D58-B171-B1C896D7A0DE}.ReleaseA|Win32.Build.0 = ReleaseA|Win32 + {0278E09B-92AA-4C18-ACB5-EEDF958395B1}.Debug|Win32.ActiveCfg = Debug|Win32 + {0278E09B-92AA-4C18-ACB5-EEDF958395B1}.Debug|Win32.Build.0 = Debug|Win32 + {0278E09B-92AA-4C18-ACB5-EEDF958395B1}.DebugA|Win32.ActiveCfg = Debug|Win32 + {0278E09B-92AA-4C18-ACB5-EEDF958395B1}.DebugA|Win32.Build.0 = Debug|Win32 + {0278E09B-92AA-4C18-ACB5-EEDF958395B1}.Release|Win32.ActiveCfg = Release|Win32 + {0278E09B-92AA-4C18-ACB5-EEDF958395B1}.Release|Win32.Build.0 = Release|Win32 + {0278E09B-92AA-4C18-ACB5-EEDF958395B1}.ReleaseA|Win32.ActiveCfg = Release|Win32 + {0278E09B-92AA-4C18-ACB5-EEDF958395B1}.ReleaseA|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -69,6 +79,7 @@ Global {565089A1-60C0-4281-99D7-A459E7354EEF} = {D01B5755-53F2-4929-B69C-75C99D151E6F} {54019823-E923-44D0-AD60-8EB636D107DC} = {D01B5755-53F2-4929-B69C-75C99D151E6F} {3EF9795D-3509-4664-8E73-8D315CC0B944} = {D01B5755-53F2-4929-B69C-75C99D151E6F} - {797901AA-9447-45C6-AF89-5D5DA54C4159} = {D01B5755-53F2-4929-B69C-75C99D151E6F} + {2C0EADA2-111E-4D58-B171-B1C896D7A0DE} = {D01B5755-53F2-4929-B69C-75C99D151E6F} + {0278E09B-92AA-4C18-ACB5-EEDF958395B1} = {D01B5755-53F2-4929-B69C-75C99D151E6F} EndGlobalSection EndGlobal diff --git a/DuiLib.suo b/DuiLib.suo index fdb80e1e..e5c4e06f 100644 Binary files a/DuiLib.suo and b/DuiLib.suo differ diff --git a/DuiLib/Core/UIRender.cpp b/DuiLib/Core/UIRender.cpp index e817ae30..e920a82c 100644 --- a/DuiLib/Core/UIRender.cpp +++ b/DuiLib/Core/UIRender.cpp @@ -1210,10 +1210,14 @@ void CRenderEngine::DrawText(HDC hDC, CPaintManagerUI* pManager, RECT& rc, LPCTS if ( pManager->IsBackgroundTransparent() || pManager->IsUseGdiplusText()) { + HFONT hOldFont = (HFONT)::SelectObject(hDC, pManager->GetFont(iFont)); Gdiplus::Graphics graphics( hDC ); - graphics.SetTextRenderingHint(Gdiplus::TextRenderingHintAntiAlias); + Gdiplus::Font font(hDC); + + graphics.SetTextRenderingHint(Gdiplus::TextRenderingHintSystemDefault); + graphics.SetSmoothingMode(Gdiplus::SmoothingModeHighQuality); + graphics.SetInterpolationMode(Gdiplus::InterpolationModeHighQualityBicubic); - Gdiplus::Font font(hDC, pManager->GetFont(iFont)); Gdiplus::RectF rectF((Gdiplus::REAL)rc.left, (Gdiplus::REAL)rc.top, (Gdiplus::REAL)(rc.right - rc.left), (Gdiplus::REAL)(rc.bottom - rc.top)); Gdiplus::SolidBrush brush(Gdiplus::Color(254, GetBValue(dwTextColor), GetGValue(dwTextColor), GetRValue(dwTextColor))); @@ -1294,6 +1298,7 @@ void CRenderEngine::DrawText(HDC hDC, CPaintManagerUI* pManager, RECT& rc, LPCTS delete []pcwszDest; } #endif + ::SelectObject(hDC, hOldFont); } else { diff --git a/bin/skin/qqsetup/button_hover.png b/bin/skin/qqsetup/button_hover.png deleted file mode 100644 index ab93d5d9..00000000 Binary files a/bin/skin/qqsetup/button_hover.png and /dev/null differ diff --git a/bin/skin/qqsetup/button_normal.png b/bin/skin/qqsetup/button_normal.png deleted file mode 100644 index 56b988b4..00000000 Binary files a/bin/skin/qqsetup/button_normal.png and /dev/null differ diff --git a/bin/skin/qqsetup/button_pushed.png b/bin/skin/qqsetup/button_pushed.png deleted file mode 100644 index 9323aee1..00000000 Binary files a/bin/skin/qqsetup/button_pushed.png and /dev/null differ diff --git a/bin/skin/qqsetup/checked.png b/bin/skin/qqsetup/checked.png deleted file mode 100644 index 44ed8c23..00000000 Binary files a/bin/skin/qqsetup/checked.png and /dev/null differ diff --git a/bin/skin/qqsetup/combo.png b/bin/skin/qqsetup/combo.png deleted file mode 100644 index 1d75f1a4..00000000 Binary files a/bin/skin/qqsetup/combo.png and /dev/null differ diff --git a/bin/skin/qqsetup/hor_line.bmp b/bin/skin/qqsetup/hor_line.bmp deleted file mode 100644 index 829076f9..00000000 Binary files a/bin/skin/qqsetup/hor_line.bmp and /dev/null differ diff --git a/bin/skin/qqsetup/icon.png b/bin/skin/qqsetup/icon.png deleted file mode 100644 index 87852c5b..00000000 Binary files a/bin/skin/qqsetup/icon.png and /dev/null differ diff --git a/bin/skin/qqsetup/list_header_bg.png b/bin/skin/qqsetup/list_header_bg.png deleted file mode 100644 index ce79297d..00000000 Binary files a/bin/skin/qqsetup/list_header_bg.png and /dev/null differ diff --git a/bin/skin/qqsetup/list_header_hot.png b/bin/skin/qqsetup/list_header_hot.png deleted file mode 100644 index 98676fd6..00000000 Binary files a/bin/skin/qqsetup/list_header_hot.png and /dev/null differ diff --git a/bin/skin/qqsetup/list_header_pushed.png b/bin/skin/qqsetup/list_header_pushed.png deleted file mode 100644 index bd0dbd6a..00000000 Binary files a/bin/skin/qqsetup/list_header_pushed.png and /dev/null differ diff --git a/bin/skin/qqsetup/list_header_sep.png b/bin/skin/qqsetup/list_header_sep.png deleted file mode 100644 index 575e39c9..00000000 Binary files a/bin/skin/qqsetup/list_header_sep.png and /dev/null differ diff --git a/bin/skin/qqsetup/logo.png b/bin/skin/qqsetup/logo.png deleted file mode 100644 index 355f402b..00000000 Binary files a/bin/skin/qqsetup/logo.png and /dev/null differ diff --git a/bin/skin/qqsetup/scrollbar.bmp b/bin/skin/qqsetup/scrollbar.bmp deleted file mode 100644 index 42be6a08..00000000 Binary files a/bin/skin/qqsetup/scrollbar.bmp and /dev/null differ diff --git a/bin/skin/qqsetup/skin.xml b/bin/skin/qqsetup/skin.xml deleted file mode 100644 index 5716277d..00000000 --- a/bin/skin/qqsetup/skin.xml +++ /dev/null @@ -1,412 +0,0 @@ -PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxXaW5kb3cgc2l6ZT0iNDgw -LDUwMCIgc2l6ZWJveD0iNCw0LDYsNiIgcm91bmRjb3JuZXI9IjUsNSIgY2FwdGlvbj0iMCwwLDAs -MzIiIG1pbmluZm89IjQ4MCw1MDAiPg0KICA8Rm9udCBuYW1lPSLlrovkvZMiIHNpemU9IjEzIiBi -b2xkPSJ0cnVlIiAvPg0KICA8Rm9udCBuYW1lPSLlrovkvZMiIHNpemU9IjEyIiBib2xkPSJ0cnVl -IiB1bmRlcmxpbmU9InRydWUiLz4NCiAgPEZvbnQgbmFtZT0i5a6L5L2TIiBzaXplPSIxMiIgLz4N -CiAgPEZvbnQgbmFtZT0i5a6L5L2TIiBzaXplPSIyMiIgYm9sZD0idHJ1ZSIvPg0KICA8RGVmYXVs -dCBuYW1lPSJWU2Nyb2xsQmFyIiB2YWx1ZT0iYnV0dG9uMW5vcm1hbGltYWdlPSZxdW90O2ZpbGU9 -J3Njcm9sbGJhci5ibXAnIHNvdXJjZT0nMCw5MCwxNiwxMDYnIG1hc2s9JyNGRkZGMDBGRicmcXVv -dDsgYnV0dG9uMWhvdGltYWdlPSZxdW90O2ZpbGU9J3Njcm9sbGJhci5ibXAnIHNvdXJjZT0nMTgs -OTAsMzQsMTA2JyBtYXNrPScjRkZGRjAwRkYnJnF1b3Q7IGJ1dHRvbjFwdXNoZWRpbWFnZT0mcXVv -dDtmaWxlPSdzY3JvbGxiYXIuYm1wJyBzb3VyY2U9JzM2LDkwLDUyLDEwNicgbWFzaz0nI0ZGRkYw -MEZGJyZxdW90OyBidXR0b24xZGlzYWJsZWRpbWFnZT0mcXVvdDtmaWxlPSdzY3JvbGxiYXIuYm1w -JyBzb3VyY2U9JzU0LDkwLDcwLDEwNicgbWFzaz0nI0ZGRkYwMEZGJyZxdW90OyBidXR0b24ybm9y -bWFsaW1hZ2U9JnF1b3Q7ZmlsZT0nc2Nyb2xsYmFyLmJtcCcgc291cmNlPScwLDEwOCwxNiwxMjQn -IG1hc2s9JyNGRkZGMDBGRicmcXVvdDsgYnV0dG9uMmhvdGltYWdlPSZxdW90O2ZpbGU9J3Njcm9s -bGJhci5ibXAnIHNvdXJjZT0nMTgsMTA4LDM0LDEyNCcgbWFzaz0nI0ZGRkYwMEZGJyZxdW90OyBi -dXR0b24ycHVzaGVkaW1hZ2U9JnF1b3Q7ZmlsZT0nc2Nyb2xsYmFyLmJtcCcgc291cmNlPSczNiwx -MDgsNTIsMTI0JyBtYXNrPScjRkZGRjAwRkYnJnF1b3Q7IGJ1dHRvbjJkaXNhYmxlZGltYWdlPSZx -dW90O2ZpbGU9J3Njcm9sbGJhci5ibXAnIHNvdXJjZT0nNTQsMTA4LDcwLDEyNCcgbWFzaz0nI0ZG -RkYwMEZGJyZxdW90OyB0aHVtYm5vcm1hbGltYWdlPSZxdW90O2ZpbGU9J3Njcm9sbGJhci5ibXAn -IHNvdXJjZT0nMCwxMjYsMTYsMTQyJyBjb3JuZXI9JzIsMiwyLDInIG1hc2s9JyNGRkZGMDBGRicm -cXVvdDsgdGh1bWJob3RpbWFnZT0mcXVvdDtmaWxlPSdzY3JvbGxiYXIuYm1wJyBzb3VyY2U9JzE4 -LDEyNiwzNCwxNDInIGNvcm5lcj0nMiwyLDIsMicgbWFzaz0nI0ZGRkYwMEZGJyZxdW90OyB0aHVt -YnB1c2hlZGltYWdlPSZxdW90O2ZpbGU9J3Njcm9sbGJhci5ibXAnIHNvdXJjZT0nMzYsMTI2LDUy -LDE0MicgY29ybmVyPScyLDIsMiwyJyBtYXNrPScjRkZGRjAwRkYnJnF1b3Q7IHRodW1iZGlzYWJs -ZWRpbWFnZT0mcXVvdDtmaWxlPSdzY3JvbGxiYXIuYm1wJyBzb3VyY2U9JzU0LDEyNiw3MCwxNDIn -IGNvcm5lcj0nMiwyLDIsMicgbWFzaz0nI0ZGRkYwMEZGJyZxdW90OyByYWlsbm9ybWFsaW1hZ2U9 -JnF1b3Q7ZmlsZT0nc2Nyb2xsYmFyLmJtcCcgc291cmNlPScwLDE0NCwxNiwxNjAnIGNvcm5lcj0n -MiwyLDIsMicgbWFzaz0nI0ZGRkYwMEZGJyZxdW90OyByYWlsaG90aW1hZ2U9JnF1b3Q7ZmlsZT0n -c2Nyb2xsYmFyLmJtcCcgc291cmNlPScxOCwxNDQsMzQsMTYwJyBjb3JuZXI9JzIsMiwyLDInIG1h -c2s9JyNGRkZGMDBGRicmcXVvdDsgcmFpbHB1c2hlZGltYWdlPSZxdW90O2ZpbGU9J3Njcm9sbGJh -ci5ibXAnIHNvdXJjZT0nMzYsMTQ0LDUyLDE2MCcgY29ybmVyPScyLDIsMiwyJyBtYXNrPScjRkZG -RjAwRkYnJnF1b3Q7IHJhaWxkaXNhYmxlZGltYWdlPSZxdW90O2ZpbGU9J3Njcm9sbGJhci5ibXAn -IHNvdXJjZT0nNTQsMTQ0LDcwLDE2MCcgY29ybmVyPScyLDIsMiwyJyBtYXNrPScjRkZGRjAwRkYn -JnF1b3Q7IGJrbm9ybWFsaW1hZ2U9JnF1b3Q7ZmlsZT0nc2Nyb2xsYmFyLmJtcCcgc291cmNlPScw -LDE2MiwxNiwxNzgnIGNvcm5lcj0nMiwyLDIsMicgbWFzaz0nI0ZGRkYwMEZGJyZxdW90OyBia2hv -dGltYWdlPSZxdW90O2ZpbGU9J3Njcm9sbGJhci5ibXAnIHNvdXJjZT0nMTgsMTYyLDM0LDE3OCcg -Y29ybmVyPScyLDIsMiwyJyBtYXNrPScjRkZGRjAwRkYnJnF1b3Q7IGJrcHVzaGVkaW1hZ2U9JnF1 -b3Q7ZmlsZT0nc2Nyb2xsYmFyLmJtcCcgc291cmNlPSczNiwxNjIsNTIsMTc4JyBjb3JuZXI9JzIs -MiwyLDInIG1hc2s9JyNGRkZGMDBGRicmcXVvdDsgYmtkaXNhYmxlZGltYWdlPSZxdW90O2ZpbGU9 -J3Njcm9sbGJhci5ibXAnIHNvdXJjZT0nNTQsMTYyLDcwLDE3OCcgY29ybmVyPScyLDIsMiwyJyBt -YXNrPScjRkZGRjAwRkYnJnF1b3Q7ICIgLz4NCiAgPERlZmF1bHQgbmFtZT0iSFNjcm9sbEJhciIg -dmFsdWU9ImJ1dHRvbjFub3JtYWxpbWFnZT0mcXVvdDtmaWxlPSdzY3JvbGxiYXIuYm1wJyBzb3Vy -Y2U9JzAsMCwxNiwxNicgbWFzaz0nI0ZGRkYwMEZGJyZxdW90OyBidXR0b24xaG90aW1hZ2U9JnF1 -b3Q7ZmlsZT0nc2Nyb2xsYmFyLmJtcCcgc291cmNlPScxOCwwLDM0LDE2JyBtYXNrPScjRkZGRjAw -RkYnJnF1b3Q7IGJ1dHRvbjFwdXNoZWRpbWFnZT0mcXVvdDtmaWxlPSdzY3JvbGxiYXIuYm1wJyBz -b3VyY2U9JzM2LDAsNTIsMTYnIG1hc2s9JyNGRkZGMDBGRicmcXVvdDsgYnV0dG9uMWRpc2FibGVk -aW1hZ2U9JnF1b3Q7ZmlsZT0nc2Nyb2xsYmFyLmJtcCcgc291cmNlPSc1NCwwLDcwLDE2JyBtYXNr -PScjRkZGRjAwRkYnJnF1b3Q7IGJ1dHRvbjJub3JtYWxpbWFnZT0mcXVvdDtmaWxlPSdzY3JvbGxi -YXIuYm1wJyBzb3VyY2U9JzAsMTgsMTYsMzQnIG1hc2s9JyNGRkZGMDBGRicmcXVvdDsgYnV0dG9u -MmhvdGltYWdlPSZxdW90O2ZpbGU9J3Njcm9sbGJhci5ibXAnIHNvdXJjZT0nMTgsMTgsMzQsMzQn -IG1hc2s9JyNGRkZGMDBGRicmcXVvdDsgYnV0dG9uMnB1c2hlZGltYWdlPSZxdW90O2ZpbGU9J3Nj -cm9sbGJhci5ibXAnIHNvdXJjZT0nMzYsMTgsNTIsMzQnIG1hc2s9JyNGRkZGMDBGRicmcXVvdDsg -YnV0dG9uMmRpc2FibGVkaW1hZ2U9JnF1b3Q7ZmlsZT0nc2Nyb2xsYmFyLmJtcCcgc291cmNlPSc1 -NCwxOCw3MCwzNCcgbWFzaz0nI0ZGRkYwMEZGJyZxdW90OyB0aHVtYm5vcm1hbGltYWdlPSZxdW90 -O2ZpbGU9J3Njcm9sbGJhci5ibXAnIHNvdXJjZT0nMCwzNiwxNiw1MicgY29ybmVyPScyLDIsMiwy -JyBtYXNrPScjRkZGRjAwRkYnJnF1b3Q7IHRodW1iaG90aW1hZ2U9JnF1b3Q7ZmlsZT0nc2Nyb2xs -YmFyLmJtcCcgc291cmNlPScxOCwzNiwzNCw1MicgY29ybmVyPScyLDIsMiwyJyBtYXNrPScjRkZG -RjAwRkYnJnF1b3Q7IHRodW1icHVzaGVkaW1hZ2U9JnF1b3Q7ZmlsZT0nc2Nyb2xsYmFyLmJtcCcg -c291cmNlPSczNiwzNiw1Miw1MicgY29ybmVyPScyLDIsMiwyJyBtYXNrPScjRkZGRjAwRkYnJnF1 -b3Q7IHRodW1iZGlzYWJsZWRpbWFnZT0mcXVvdDtmaWxlPSdzY3JvbGxiYXIuYm1wJyBzb3VyY2U9 -JzU0LDM2LDcwLDUyJyBjb3JuZXI9JzIsMiwyLDInIG1hc2s9JyNGRkZGMDBGRicmcXVvdDsgcmFp -bG5vcm1hbGltYWdlPSZxdW90O2ZpbGU9J3Njcm9sbGJhci5ibXAnIHNvdXJjZT0nMCw1NCwxNiw3 -MCcgY29ybmVyPScyLDIsMiwyJyBtYXNrPScjRkZGRjAwRkYnJnF1b3Q7IHJhaWxob3RpbWFnZT0m -cXVvdDtmaWxlPSdzY3JvbGxiYXIuYm1wJyBzb3VyY2U9JzE4LDU0LDM0LDcwJyBjb3JuZXI9JzIs -MiwyLDInIG1hc2s9JyNGRkZGMDBGRicmcXVvdDsgcmFpbHB1c2hlZGltYWdlPSZxdW90O2ZpbGU9 -J3Njcm9sbGJhci5ibXAnIHNvdXJjZT0nMzYsNTQsNTIsNzAnIGNvcm5lcj0nMiwyLDIsMicgbWFz -az0nI0ZGRkYwMEZGJyZxdW90OyByYWlsZGlzYWJsZWRpbWFnZT0mcXVvdDtmaWxlPSdzY3JvbGxi -YXIuYm1wJyBzb3VyY2U9JzU0LDU0LDcwLDcwJyBjb3JuZXI9JzIsMiwyLDInIG1hc2s9JyNGRkZG -MDBGRicmcXVvdDsgYmtub3JtYWxpbWFnZT0mcXVvdDtmaWxlPSdzY3JvbGxiYXIuYm1wJyBzb3Vy -Y2U9JzAsNzIsMTYsODgnIGNvcm5lcj0nMiwyLDIsMicgbWFzaz0nI0ZGRkYwMEZGJyZxdW90OyBi -a2hvdGltYWdlPSZxdW90O2ZpbGU9J3Njcm9sbGJhci5ibXAnIHNvdXJjZT0nMTgsNzIsMzQsODgn -IGNvcm5lcj0nMiwyLDIsMicgbWFzaz0nI0ZGRkYwMEZGJyZxdW90OyBia3B1c2hlZGltYWdlPSZx -dW90O2ZpbGU9J3Njcm9sbGJhci5ibXAnIHNvdXJjZT0nMzYsNzIsNTIsODgnIGNvcm5lcj0nMiwy -LDIsMicgbWFzaz0nI0ZGRkYwMEZGJyZxdW90OyBia2Rpc2FibGVkaW1hZ2U9JnF1b3Q7ZmlsZT0n -c2Nyb2xsYmFyLmJtcCcgc291cmNlPSc1NCw3Miw3MCw4OCcgY29ybmVyPScyLDIsMiwyJyBtYXNr -PScjRkZGRjAwRkYnJnF1b3Q7ICIgLz4NCg0KICA8VmVydGljYWxMYXlvdXQgYmtpbWFnZT0iZmls -ZT0nYmcucG5nJyBjb3JuZXI9JzYsNiw2LDYnIiA+DQogICAgPEhvcml6b250YWxMYXlvdXQgbmFt -ZT0iaGVhZGVyIiBoZWlnaHQ9IjMyIj4NCiAgICAgIDxCdXR0b24gbmFtZT0iaG9tZXBhZ2VfYnRu -IiB0ZXh0PSLmvJTnpLrlrpjnvZEiIHdpZHRoPSIxMDAiIGJraW1hZ2U9ImZpbGU9J2xvZ28ucG5n -JyBkZXN0PScwLDAsMzIsMzInIiB0ZXh0cGFkZGluZz0iMzgsMCwwLDAiIGFsaWduPSJ2Y2VudGVy -IiBhbGlnbj0ibGVmdCIgdGV4dGNvbG9yPSIjRkYwMDAwMDAiIGhvdHRleHRjb2xvcj0iI0ZGMDAw -MEZGIiBmb250PSIxIiB0b29sdGlwPSLlrpjnvZEiLz4NCiAgICAgIDxIb3Jpem9udGFsTGF5b3V0 -IC8+DQoNCiAgICAgIDxIb3Jpem9udGFsTGF5b3V0IG5hbWU9InN5c2J0biIgd2lkdGg9IjEwMCIg -aGVpZ2h0PSIyNCIgaW5zZXQ9IjAsMSwwLDAiPg0KICAgICAgICA8QnV0dG9uIG5hbWU9Im1pbmJ0 -biIgbWF4d2lkdGg9IjI2IiBtYXhoZWlnaHQ9IjE3IiBub3JtYWxpbWFnZT0iZmlsZT0nc3lzX2Rs -Z19taW4ucG5nJyBzb3VyY2U9JzUyLDAsNzgsMTcnIiBob3RpbWFnZT0iZmlsZT0nc3lzX2RsZ19t -aW4ucG5nJyBzb3VyY2U9JzI2LDAsNTIsMTcnIiBwdXNoZWRpbWFnZT0iZmlsZT0nc3lzX2RsZ19t -aW4ucG5nJyBzb3VyY2U9JzAsMCwyNiwxNyciLz4NCiAgICAgICAgPEJ1dHRvbiBuYW1lPSJtYXhi -dG4iIG1heHdpZHRoPSIyNiIgbWF4aGVpZ2h0PSIxNyIgbm9ybWFsaW1hZ2U9ImZpbGU9J3N5c19k -bGdfbWF4LnBuZycgc291cmNlPSc1MiwwLDc4LDE3JyIgaG90aW1hZ2U9ImZpbGU9J3N5c19kbGdf -bWF4LnBuZycgc291cmNlPScyNiwwLDUyLDE4JyIgcHVzaGVkaW1hZ2U9ImZpbGU9J3N5c19kbGdf -bWF4LnBuZycgc291cmNlPScwLDAsMjYsMTcnIi8+DQogICAgICAgIDxCdXR0b24gbmFtZT0icmVz -dG9yZWJ0biIgdmlzaWJsZT0iZmFsc2UiIG1heHdpZHRoPSIyNiIgbWF4aGVpZ2h0PSIxNyIgbm9y -bWFsaW1hZ2U9ImZpbGU9J3N5c19kbGdfcmVzdG9yZS5wbmcnIHNvdXJjZT0nNTIsMCw3OCwxNyci -IGhvdGltYWdlPSJmaWxlPSdzeXNfZGxnX3Jlc3RvcmUucG5nJyBzb3VyY2U9JzI2LDAsNTIsMTcn -IiBwdXNoZWRpbWFnZT0iZmlsZT0nc3lzX2RsZ19yZXN0b3JlLnBuZycgc291cmNlPScwLDAsMjYs -MTcnIiAvPg0KICAgICAgICA8QnV0dG9uIG5hbWU9ImNsb3NlYnRuIiBtYXh3aWR0aD0iNDUiIG1h -eGhlaWdodD0iMTciIG5vcm1hbGltYWdlPSJmaWxlPSdzeXNfZGxnX2Nsb3NlLnBuZycgc291cmNl -PSc5MCwwLDEzNSwxNyciIGhvdGltYWdlPSJmaWxlPSdzeXNfZGxnX2Nsb3NlLnBuZycgc291cmNl -PSc0NSwwLDkwLDE3JyIgcHVzaGVkaW1hZ2U9ImZpbGU9J3N5c19kbGdfY2xvc2UucG5nJyBzb3Vy -Y2U9JzAsMCw0NSwxNyciLz4NCiAgICAgIDwvSG9yaXpvbnRhbExheW91dD4NCiAgICA8L0hvcml6 -b250YWxMYXlvdXQ+DQogICAgDQogICAgPFZlcnRpY2FsTGF5b3V0IG5hbWU9ImJvZHkiIGluc2V0 -PSIxMiwyLDIsMiIgdnNjcm9sbGJhcj0idHJ1ZSI+DQogICAgICA8VmVydGljYWxMYXlvdXQgaGVp -Z2h0PSI5MDAiPg0KICAgICAgICA8SG9yaXpvbnRhbExheW91dCBoZWlnaHQ9IjE0MCI+DQogICAg -ICAgICAgPExhYmVsIHRleHQ9Iueql+WPo+iuvue9rjoiIGhlaWdodD0iMjAiIHdpZHRoPSIxMjAi -IC8+DQoNCiAgICAgICAgICA8VmVydGljYWxMYXlvdXQgPg0KICAgICAgICAgICAgPE9wdGlvbiBu -YW1lPSJ3aW5kb3dzZXRfMSIgaGVpZ2h0PSIyMCIgd2lkdGg9IjEyNSIgdGV4dD0i5Li76Z2i5p2/ -5oC75Zyo5pyA5YmN6Z2iIiBhbGlnbj0ibGVmdCIgdGV4dHBhZGRpbmc9IjE4LDAsMCwwIiBub3Jt -YWxpbWFnZT0iZmlsZT0ndW5jaGVja2VkLnBuZycgZGVzdD0nMCwyLDE2LDE4JyIgc2VsZWN0ZWRp -bWFnZT0iZmlsZT0nY2hlY2tlZC5wbmcnIGRlc3Q9JzAsMiwxNiwxOCciLz4NCiAgICAgICAgICAg -IDxPcHRpb24gbmFtZT0id2luZG93c2V0XzIiIGhlaWdodD0iMjAiIHdpZHRoPSIxMDAiIHRleHQ9 -IuiHquWKqOW8ueWHuua2iOaBryIgYWxpZ249ImxlZnQiIHRleHRwYWRkaW5nPSIxOCwwLDAsMCIg -bm9ybWFsaW1hZ2U9ImZpbGU9J3VuY2hlY2tlZC5wbmcnIGRlc3Q9JzAsMiwxNiwxOCciIHNlbGVj -dGVkaW1hZ2U9ImZpbGU9J2NoZWNrZWQucG5nJyBkZXN0PScwLDIsMTYsMTgnIi8+DQogICAgICAg -ICAgICA8T3B0aW9uIG5hbWU9IndpbmRvd3NldF8zIiBoZWlnaHQ9IjIwIiB3aWR0aD0iMTEwIiB0 -ZXh0PSLkuLvpnaLmnb/oh6rliqjpmpDol48iIGFsaWduPSJsZWZ0IiB0ZXh0cGFkZGluZz0iMTgs -MCwwLDAiIG5vcm1hbGltYWdlPSJmaWxlPSd1bmNoZWNrZWQucG5nJyBkZXN0PScwLDIsMTYsMTgn -IiBzZWxlY3RlZGltYWdlPSJmaWxlPSdjaGVja2VkLnBuZycgZGVzdD0nMCwyLDE2LDE4JyIvPg0K -ICAgICAgICAgICAgPE9wdGlvbiBuYW1lPSJ3aW5kb3dzZXRfNCIgaGVpZ2h0PSIyMCIgd2lkdGg9 -IjEwMCIgdGV4dD0i5Zyo5Lu75Yqh5qCP5pi+56S6IiBhbGlnbj0ibGVmdCIgdGV4dHBhZGRpbmc9 -IjE4LDAsMCwwIiBub3JtYWxpbWFnZT0iZmlsZT0ndW5jaGVja2VkLnBuZycgZGVzdD0nMCwyLDE2 -LDE4JyIgc2VsZWN0ZWRpbWFnZT0iZmlsZT0nY2hlY2tlZC5wbmcnIGRlc3Q9JzAsMiwxNiwxOCci -Lz4NCiAgICAgICAgICAgIDxIb3Jpem9udGFsTGF5b3V0IGhlaWdodD0iMjIiPg0KICAgICAgICAg -ICAgICA8T3B0aW9uIG5hbWU9IndpbmRvd3NldF81IiBoZWlnaHQ9IjIwIiB3aWR0aD0iODAiIHRl -eHQ9IuiHquWKqOeZu+W9lSIgYWxpZ249ImxlZnQiIHRleHRwYWRkaW5nPSIxOCwwLDAsMCIgbm9y -bWFsaW1hZ2U9ImZpbGU9J3VuY2hlY2tlZC5wbmcnIGRlc3Q9JzAsMiwxNiwxOCciIHNlbGVjdGVk -aW1hZ2U9ImZpbGU9J2NoZWNrZWQucG5nJyBkZXN0PScwLDIsMTYsMTgnIi8+DQogICAgICAgICAg -ICAgIDxDb250cm9sIHdpZHRoPSI2MCIvPg0KICAgICAgICAgICAgICA8TGFiZWwgdGV4dD0i5pi+ -56S65pyA6L+RIiB3aWR0aD0iNTYiLz4NCiAgICAgICAgICAgICAgPENvbWJvIG5hbWU9Imxpbmtf -bnVtYmVyX2NvbWJvIiBkcm9wdHlwZT0iZHJvcGxpc3QiIHdpZHRoPSI0NSIgdGV4dHBhZGRpbmc9 -IjQsMSwxLDEiICBub3JtYWxpbWFnZT0iZmlsZT0nY29tYm8ucG5nJyBzb3VyY2U9JzAsMCwxMDAs -MjInIGNvcm5lcj0nMiwyLDIwLDInIiBob3RpbWFnZT0iZmlsZT0nY29tYm8ucG5nJyBzb3VyY2U9 -JzAsMjIsMTAwLDQ0JyBjb3JuZXI9JzIsMiwyMiwyJyIgcHVzaGVkaW1hZ2U9ImZpbGU9J2NvbWJv -LnBuZycgc291cmNlPScwLDQ0LDEwMCw2NicgY29ybmVyPScyLDIsMjIsMiciPg0KICAgICAgICAg -ICAgICAgIDxMaXN0TGFiZWxFbGVtZW50IHRleHQ9IjUiIHNlbGVjdGVkPSJ0cnVlIiBoZWlnaHQ9 -IjIzIi8+DQogICAgICAgICAgICAgICAgPExpc3RMYWJlbEVsZW1lbnQgdGV4dD0iMTAiIGhlaWdo -dD0iMjMiIC8+DQogICAgICAgICAgICAgICAgPExpc3RMYWJlbEVsZW1lbnQgdGV4dD0iMTUiIGhl -aWdodD0iMjMiIC8+DQogICAgICAgICAgICAgICAgPExpc3RMYWJlbEVsZW1lbnQgdGV4dD0iMjAi -IGhlaWdodD0iMjMiIC8+DQogICAgICAgICAgICAgICAgPExpc3RMYWJlbEVsZW1lbnQgdGV4dD0i -MjUiIGhlaWdodD0iMjMiIC8+DQogICAgICAgICAgICAgIDwvQ29tYm8+DQogICAgICAgICAgICAg -IDxMYWJlbCB0ZXh0PSLkuKrogZTns7vkuroiIHdpZHRoPSI3MCIvPg0KICAgICAgICAgICAgPC9I -b3Jpem9udGFsTGF5b3V0Pg0KICAgICAgICAgICAgPE9wdGlvbiBuYW1lPSJ3aW5kb3dzZXRfNiIg -aGVpZ2h0PSIyMCIgd2lkdGg9IjE2NSIgdGV4dD0i5YWz6Zet5Li76Z2i5p2/5piv6YCA5Ye656iL -5bqPIiBhbGlnbj0ibGVmdCIgdGV4dHBhZGRpbmc9IjE4LDAsMCwwIiBub3JtYWxpbWFnZT0iZmls -ZT0ndW5jaGVja2VkLnBuZycgZGVzdD0nMCwyLDE2LDE4JyIgc2VsZWN0ZWRpbWFnZT0iZmlsZT0n -Y2hlY2tlZC5wbmcnIGRlc3Q9JzAsMiwxNiwxOCciLz4NCg0KICAgICAgICAgIDwvVmVydGljYWxM -YXlvdXQ+DQogICAgICAgIDwvSG9yaXpvbnRhbExheW91dD4NCg0KICAgICAgICA8SG9yaXpvbnRh -bExheW91dCBoZWlnaHQ9IjgwIj4NCiAgICAgICAgICA8TGFiZWwgdGV4dD0i5Y+R6YCB5raI5oGv -OiIgaGVpZ2h0PSIyMCIgd2lkdGg9IjEyMCIgLz4NCg0KICAgICAgICAgIDxWZXJ0aWNhbExheW91 -dCA+DQogICAgICAgICAgICA8TGFiZWwgdGV4dD0i5L2/55So54Ot6ZSuIiBoZWlnaHQ9IjIwIiB3 -aWR0aD0iODAiIC8+DQogICAgICAgICAgICA8T3B0aW9uIG5hbWU9InJlamlhbl8xIiBoZWlnaHQ9 -IjIwIiB3aWR0aD0iMTY1IiBncm91cD0iZ3JvdXBfbXNnX3JlamlhbiIgdGV4dD0i5oyJIEN0cmwr -RW50ZXIg6ZSu5Y+R6YCB5raI5oGvIiBhbGlnbj0ibGVmdCIgdGV4dHBhZGRpbmc9IjE4LDAsMCww -IiBub3JtYWxpbWFnZT0iZmlsZT0ncmFkaW9fdW5jaGVja2VkLnBuZycgZGVzdD0nMCwzLDEzLDE2 -JyIgc2VsZWN0ZWRpbWFnZT0iZmlsZT0ncmFkaW9fY2hlY2tlZC5wbmcnIGRlc3Q9JzAsMywxMywx -NiciLz4NCiAgICAgICAgICAgIDxPcHRpb24gbmFtZT0icmVqaWFuXzIiIGhlaWdodD0iMjAiIHdp -ZHRoPSIxMzUiIGdyb3VwPSJncm91cF9tc2dfcmVqaWFuIiB0ZXh0PSLmjIkgRW50ZXIg6ZSu5Y+R -6YCB5raI5oGvIiBhbGlnbj0ibGVmdCIgdGV4dHBhZGRpbmc9IjE4LDAsMCwwIiBub3JtYWxpbWFn -ZT0iZmlsZT0ncmFkaW9fdW5jaGVja2VkLnBuZycgZGVzdD0nMCwzLDEzLDE2JyIgc2VsZWN0ZWRp -bWFnZT0iZmlsZT0ncmFkaW9fY2hlY2tlZC5wbmcnIGRlc3Q9JzAsMywxMywxNiciLz4NCiAgICAg -ICAgICA8L1ZlcnRpY2FsTGF5b3V0Pg0KICAgICAgICA8L0hvcml6b250YWxMYXlvdXQ+DQoNCiAg -ICAgICAgPEhvcml6b250YWxMYXlvdXQgaGVpZ2h0PSIxMDAiPg0KICAgICAgICAgIDxMYWJlbCB0 -ZXh0PSLoh6rliqjovazmjaLnirbmgIHorr7nva46IiBoZWlnaHQ9IjIwIiB3aWR0aD0iMTIwIiAv -Pg0KDQogICAgICAgICAgPFZlcnRpY2FsTGF5b3V0ID4NCiAgICAgICAgICAgIDxPcHRpb24gbmFt -ZT0ib3B0aW9uMSIgaGVpZ2h0PSIyMCIgd2lkdGg9IjIyMCIgdGV4dD0i5b2T6byg5qCH6ZSu55uY -56m66Zey5pe25YWB6K646Ieq5Yqo6KOF5o2i54q25oCBIiBhbGlnbj0ibGVmdCIgdGV4dHBhZGRp -bmc9IjE4LDAsMCwwIiBub3JtYWxpbWFnZT0iZmlsZT0ndW5jaGVja2VkLnBuZycgZGVzdD0nMCwy -LDE2LDE4JyIgc2VsZWN0ZWRpbWFnZT0iZmlsZT0nY2hlY2tlZC5wbmcnIGRlc3Q9JzAsMiwxNiwx -OCciLz4NCiAgICAgICAgICAgIDxIb3Jpem9udGFsTGF5b3V0IGhlaWdodD0iMjIiPg0KICAgICAg -ICAgICAgICA8TGFiZWwgdGV4dD0i54q25oCB6L2s5o2i5pe26Ze06K6+5a6a77yIMX42MOWIhumS -n++8ie+8miIgd2lkdGg9IjIwMCIvPg0KICAgICAgICAgICAgICA8RWRpdCBuYW1lPSJ6aHVhbmd0 -YWlfZWRpdCIgYm9yZGVyY29sb3I9IiNGRjMzMzMzMyIgYm9yZGVyc2l6ZT0iMSIgd2lkdGg9IjIy -IiB0ZXh0PSIxNSIvPg0KICAgICAgICAgICAgICA8VmVydGljYWxMYXlvdXQ+DQogICAgICAgICAg -ICAgICAgPEJ1dHRvbiBuYW1lPSJ6aHVhbmd0YWlfdXAiIHRleHQ9IuKIpyIgaGVpZ2h0PSIxMSIg -bm9ybWFsaW1hZ2U9InJlcz0nYnV0dG9uX25vcm1hbC5wbmcnIGNvcm5lcj0nNCw0LDQsNCciIGhv -dGltYWdlPSJyZXM9J2J1dHRvbl9ob3Zlci5wbmcnIGNvcm5lcj0nNCw0LDQsNCciIHB1c2hlZGlt -YWdlPSJyZXM9J2J1dHRvbl9wdXNoZWQucG5nJyBjb3JuZXI9JzQsNCw0LDQnIiB3aWR0aD0iMjAi -Lz4NCiAgICAgICAgICAgICAgICA8QnV0dG9uIG5hbWU9InpodWFuZ3RhaV9kb3duIiB0ZXh0PSLi -iKgiIGhlaWdodD0iMTEiIG5vcm1hbGltYWdlPSJyZXM9J2J1dHRvbl9ub3JtYWwucG5nJyBjb3Ju -ZXI9JzQsNCw0LDQnIiBob3RpbWFnZT0icmVzPSdidXR0b25faG92ZXIucG5nJyBjb3JuZXI9JzQs -NCw0LDQnIiBwdXNoZWRpbWFnZT0icmVzPSdidXR0b25fcHVzaGVkLnBuZycgY29ybmVyPSc0LDQs -NCw0JyIgd2lkdGg9IjIwIi8+DQogICAgICAgICAgICAgIDwvVmVydGljYWxMYXlvdXQ+DQogICAg -ICAgICAgICA8L0hvcml6b250YWxMYXlvdXQ+DQoNCiAgICAgICAgICAgIDxPcHRpb24gbmFtZT0i -b3B0aW9uMSIgaGVpZ2h0PSIyMCIgd2lkdGg9IjE0MCIgdGV4dD0i5YWB6K645by55Ye65b6F5Yqe -5b6F6ZiF6YCa55+lIiBhbGlnbj0ibGVmdCIgdGV4dHBhZGRpbmc9IjE4LDAsMCwwIiBub3JtYWxp -bWFnZT0iZmlsZT0ndW5jaGVja2VkLnBuZycgZGVzdD0nMCwyLDE2LDE4JyIgc2VsZWN0ZWRpbWFn -ZT0iZmlsZT0nY2hlY2tlZC5wbmcnIGRlc3Q9JzAsMiwxNiwxOCciLz4NCiAgICAgICAgICAgIDxI -b3Jpem9udGFsTGF5b3V0IGhlaWdodD0iMjIiPg0KICAgICAgICAgICAgICA8T3B0aW9uIG5hbWU9 -Imd1YW5iaV8xIiBoZWlnaHQ9IjIwIiB3aWR0aD0iODAiIGdyb3VwPSJncm91cF9ndWFuYmkiIHRl -eHQ9IuS4jeiHquWKqOWFs+mXrSIgYWxpZ249ImxlZnQiIHRleHRwYWRkaW5nPSIxOCwwLDAsMCIg -bm9ybWFsaW1hZ2U9ImZpbGU9J3JhZGlvX3VuY2hlY2tlZC5wbmcnIGRlc3Q9JzAsMywxMywxNici -IHNlbGVjdGVkaW1hZ2U9ImZpbGU9J3JhZGlvX2NoZWNrZWQucG5nJyBkZXN0PScwLDMsMTMsMTYn -Ii8+DQogICAgICAgICAgICAgIDxPcHRpb24gbmFtZT0iZ3VhbmJpXzIiIGhlaWdodD0iMjAiIHdp -ZHRoPSIxOTAiIGdyb3VwPSJncm91cF9ndWFuYmkiIHRleHQ9IuiHquWKqOWFs+mXreaXtumXtOiu -vuWumu+8iDF+NjDnp5LvvInvvJoiIGFsaWduPSJsZWZ0IiB0ZXh0cGFkZGluZz0iMTgsMCwwLDAi -IG5vcm1hbGltYWdlPSJmaWxlPSdyYWRpb191bmNoZWNrZWQucG5nJyBkZXN0PScwLDMsMTMsMTYn -IiBzZWxlY3RlZGltYWdlPSJmaWxlPSdyYWRpb19jaGVja2VkLnBuZycgZGVzdD0nMCwzLDEzLDE2 -JyIvPg0KICAgICAgICAgICAgICA8RWRpdCBuYW1lPSJndWFuYmlfZWRpdCIgYm9yZGVyY29sb3I9 -IiNGRjMzMzMzMyIgYm9yZGVyc2l6ZT0iMSIgd2lkdGg9IjIyIiB0ZXh0PSIxNSIvPg0KICAgICAg -ICAgICAgICA8VmVydGljYWxMYXlvdXQ+DQogICAgICAgICAgICAgICAgPEJ1dHRvbiBuYW1lPSJn -dWFuYmlfdXAiIHRleHQ9IuKIpyIgaGVpZ2h0PSIxMSIgbm9ybWFsaW1hZ2U9InJlcz0nYnV0dG9u -X25vcm1hbC5wbmcnIGNvcm5lcj0nNCw0LDQsNCciIGhvdGltYWdlPSJyZXM9J2J1dHRvbl9ob3Zl -ci5wbmcnIGNvcm5lcj0nNCw0LDQsNCciIHB1c2hlZGltYWdlPSJyZXM9J2J1dHRvbl9wdXNoZWQu -cG5nJyBjb3JuZXI9JzQsNCw0LDQnIiB3aWR0aD0iMjAiLz4NCiAgICAgICAgICAgICAgICA8QnV0 -dG9uIG5hbWU9Imd1YW5iaV9kb3duIiB0ZXh0PSLiiKgiIGhlaWdodD0iMTEiIG5vcm1hbGltYWdl -PSJyZXM9J2J1dHRvbl9ub3JtYWwucG5nJyBjb3JuZXI9JzQsNCw0LDQnIiBob3RpbWFnZT0icmVz -PSdidXR0b25faG92ZXIucG5nJyBjb3JuZXI9JzQsNCw0LDQnIiBwdXNoZWRpbWFnZT0icmVzPSdi -dXR0b25fcHVzaGVkLnBuZycgY29ybmVyPSc0LDQsNCw0JyIgd2lkdGg9IjIwIi8+DQogICAgICAg -ICAgICAgIDwvVmVydGljYWxMYXlvdXQ+DQogICAgICAgICAgICA8L0hvcml6b250YWxMYXlvdXQ+ -DQogICAgICAgICAgPC9WZXJ0aWNhbExheW91dD4NCiAgICAgICAgPC9Ib3Jpem9udGFsTGF5b3V0 -Pg0KDQogICAgICAgIDxIb3Jpem9udGFsTGF5b3V0IGhlaWdodD0iMTEwIj4NCiAgICAgICAgICA8 -TGFiZWwgdGV4dD0i55WZ6KiA6K6+572uOiIgaGVpZ2h0PSIyMCIgd2lkdGg9IjEyMCIgLz4NCg0K -ICAgICAgICAgIDxWZXJ0aWNhbExheW91dCA+DQogICAgICAgICAgICA8SG9yaXpvbnRhbExheW91 -dCBoZWlnaHQ9IjMwIj4NCiAgICAgICAgICAgICAgPE9wdGlvbiBuYW1lPSJsaXV5YW5fMSIgaGVp -Z2h0PSIyMCIgd2lkdGg9IjExMCIgdGV4dD0i56a75byA5pe26Ieq5Yqo5Zue5aSNIiBhbGlnbj0i -bGVmdCIgdGV4dHBhZGRpbmc9IjE4LDAsMCwwIiBub3JtYWxpbWFnZT0iZmlsZT0ndW5jaGVja2Vk -LnBuZycgZGVzdD0nMCwyLDE2LDE4JyIgc2VsZWN0ZWRpbWFnZT0iZmlsZT0nY2hlY2tlZC5wbmcn -IGRlc3Q9JzAsMiwxNiwxOCciLz4NCiAgICAgICAgICAgICAgPENvbnRyb2wgd2lkdGg9IjYwIi8+ -DQogICAgICAgICAgICAgIDxDb21ibyBuYW1lPSJsaXV5YW5fbnVtYmVyX2NvbWJvIiBoZWlnaHQ9 -IjIyIiBkcm9wdHlwZT0iZHJvcGxpc3QiIHdpZHRoPSI0NSIgdGV4dHBhZGRpbmc9IjQsMSwxLDEi -ICBub3JtYWxpbWFnZT0iZmlsZT0nY29tYm8ucG5nJyBzb3VyY2U9JzAsMCwxMDAsMjInIGNvcm5l -cj0nMiwyLDIwLDInIiBob3RpbWFnZT0iZmlsZT0nY29tYm8ucG5nJyBzb3VyY2U9JzAsMjIsMTAw -LDQ0JyBjb3JuZXI9JzIsMiwyMiwyJyIgcHVzaGVkaW1hZ2U9ImZpbGU9J2NvbWJvLnBuZycgc291 -cmNlPScwLDQ0LDEwMCw2NicgY29ybmVyPScyLDIsMjIsMiciPg0KICAgICAgICAgICAgICAgIDxM -aXN0TGFiZWxFbGVtZW50IHRleHQ9IjUiIHNlbGVjdGVkPSJ0cnVlIiBoZWlnaHQ9IjIzIi8+DQog -ICAgICAgICAgICAgICAgPExpc3RMYWJlbEVsZW1lbnQgdGV4dD0iMTAiIGhlaWdodD0iMjMiIC8+ -DQogICAgICAgICAgICAgICAgPExpc3RMYWJlbEVsZW1lbnQgdGV4dD0iMTUiIGhlaWdodD0iMjMi -IC8+DQogICAgICAgICAgICAgICAgPExpc3RMYWJlbEVsZW1lbnQgdGV4dD0iMjAiIGhlaWdodD0i -MjMiIC8+DQogICAgICAgICAgICAgICAgPExpc3RMYWJlbEVsZW1lbnQgdGV4dD0iMjUiIGhlaWdo -dD0iMjMiIC8+DQogICAgICAgICAgICAgIDwvQ29tYm8+DQogICAgICAgICAgICA8L0hvcml6b250 -YWxMYXlvdXQ+DQoNCiAgICAgICAgICAgIDxIb3Jpem9udGFsTGF5b3V0IGhlaWdodD0iNjAiPg0K -ICAgICAgICAgICAgICA8TGlzdCBuYW1lPSJsaXV5YW5fbGlzdCIgYm9yZGVyY29sb3I9IiNGRjMz -MzMzMyIgYm9yZGVyc2l6ZT0iMSIgaW5zZXQ9IjQsMSwxLDEiIGhlYWRlcj0iaGlkZGVuIiB2c2Ny -b2xsYmFyPSJ0cnVlIiBoc2Nyb2xsYmFyPSJ0cnVlIiBpdGVtdGV4dHN0eWxlPSJsZWZ0Ij4NCiAg -ICAgICAgICAgICAgICA8TGlzdExhYmVsRWxlbWVudCB0ZXh0PSLkvaDlpb3llYoiIHNlbGVjdGVk -PSJ0cnVlIiBoZWlnaHQ9IjIzIi8+DQogICAgICAgICAgICAgICAgPExpc3RMYWJlbEVsZW1lbnQg -dGV4dD0i56a75byA5LqGIiBoZWlnaHQ9IjIzIiAvPg0KICAgICAgICAgICAgICAgIDxMaXN0TGFi -ZWxFbGVtZW50IHRleHQ9IuW/meeijOS6hiIgaGVpZ2h0PSIyMyIgLz4NCiAgICAgICAgICAgICAg -ICA8TGlzdExhYmVsRWxlbWVudCB0ZXh0PSLpmpDouqvkuoYiIGhlaWdodD0iMjMiIC8+DQogICAg -ICAgICAgICAgICAgPExpc3RMYWJlbEVsZW1lbnQgdGV4dD0i6K+35Yu/5omT5omwIiBoZWlnaHQ9 -IjIzIiAvPg0KICAgICAgICAgICAgICA8L0xpc3Q+DQogICAgICAgICAgICAgIDxDb250cm9sIHdp -ZHRoPSIxNSIvPg0KICAgICAgICAgICAgICA8VmVydGljYWxMYXlvdXQ+DQogICAgICAgICAgICAg -ICAgPENvbnRyb2wgLz4NCiAgICAgICAgICAgICAgICA8QnV0dG9uIG5hbWU9ImxpdXlhbl9hZGQi -IHRleHQ9IuWinuWKoCIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjIwIiBub3JtYWxpbWFnZT0icmVzPSdi -dXR0b25fbm9ybWFsLnBuZycgY29ybmVyPSc0LDQsNCw0JyIgaG90aW1hZ2U9InJlcz0nYnV0dG9u -X2hvdmVyLnBuZycgY29ybmVyPSc0LDQsNCw0JyIgcHVzaGVkaW1hZ2U9InJlcz0nYnV0dG9uX3B1 -c2hlZC5wbmcnIGNvcm5lcj0nNCw0LDQsNCciLz4NCiAgICAgICAgICAgICAgICA8QnV0dG9uIG5h -bWU9ImxpdXlhbl9kZWwiIHRleHQ9IuWIoOmZpCIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjIwIiBub3Jt -YWxpbWFnZT0icmVzPSdidXR0b25fbm9ybWFsLnBuZycgY29ybmVyPSc0LDQsNCw0JyIgaG90aW1h -Z2U9InJlcz0nYnV0dG9uX2hvdmVyLnBuZycgY29ybmVyPSc0LDQsNCw0JyIgcHVzaGVkaW1hZ2U9 -InJlcz0nYnV0dG9uX3B1c2hlZC5wbmcnIGNvcm5lcj0nNCw0LDQsNCciLz4NCiAgICAgICAgICAg -ICAgICA8Q29udHJvbCAvPg0KICAgICAgICAgICAgICA8L1ZlcnRpY2FsTGF5b3V0Pg0KICAgICAg -ICAgICAgPC9Ib3Jpem9udGFsTGF5b3V0Pg0KICAgICAgICAgIDwvVmVydGljYWxMYXlvdXQ+DQog -ICAgICAgIDwvSG9yaXpvbnRhbExheW91dD4NCg0KICAgICAgICA8SG9yaXpvbnRhbExheW91dCBo -ZWlnaHQ9IjEwMCI+DQogICAgICAgICAgPExhYmVsIHRleHQ9IuiHquWKqOabtOaWsOiuvue9rjoi -IGhlaWdodD0iMjAiIHdpZHRoPSIxMjAiIC8+DQoNCiAgICAgICAgICA8VmVydGljYWxMYXlvdXQg -Pg0KICAgICAgICAgICAgPExhYmVsIHRleHQ9Iuezu+e7n+iDveaJvuWIsOaCqOeahEVD6ZyA6KaB -55qE5pu05paw5bm26YCa55+l5oKo44CC5Li65LqG5L+d5oyBRUPmnIDmlrDvvIwiIGhlaWdodD0i -MjAiIHdpZHRoPSIzMjAiIC8+DQogICAgICAgICAgICA8TGFiZWwgdGV4dD0i5o6o6I2Q5oKo5ZCv -55So5LiL6Z2i55qE6Ieq5Yqo5pu05paw6YCJ6aG544CCIiBoZWlnaHQ9IjIwIiB3aWR0aD0iMzIw -IiAvPg0KDQogICAgICAgICAgICA8T3B0aW9uIG5hbWU9Imdlbmd4aW5fMSIgaGVpZ2h0PSIyMCIg -d2lkdGg9IjExMCIgZ3JvdXA9Imdyb3VwX2dlbmd4aW4iIHRleHQ9IuS4jeWQr+eUqOiHquWKqOab -tOaWsCIgYWxpZ249ImxlZnQiIHRleHRwYWRkaW5nPSIxOCwwLDAsMCIgbm9ybWFsaW1hZ2U9ImZp -bGU9J3JhZGlvX3VuY2hlY2tlZC5wbmcnIGRlc3Q9JzAsMywxMywxNiciIHNlbGVjdGVkaW1hZ2U9 -ImZpbGU9J3JhZGlvX2NoZWNrZWQucG5nJyBkZXN0PScwLDMsMTMsMTYnIi8+DQogICAgICAgICAg -ICA8T3B0aW9uIG5hbWU9Imdlbmd4aW5fMiIgaGVpZ2h0PSIyMCIgd2lkdGg9IjkwIiBncm91cD0i -Z3JvdXBfZ2VuZ3hpbiIgdGV4dD0i5ZCv55So6Ieq5Yqo5pu05pawIiBhbGlnbj0ibGVmdCIgdGV4 -dHBhZGRpbmc9IjE4LDAsMCwwIiBub3JtYWxpbWFnZT0iZmlsZT0ncmFkaW9fdW5jaGVja2VkLnBu -ZycgZGVzdD0nMCwzLDEzLDE2JyIgc2VsZWN0ZWRpbWFnZT0iZmlsZT0ncmFkaW9fY2hlY2tlZC5w -bmcnIGRlc3Q9JzAsMywxMywxNiciLz4NCiAgICAgICAgICA8L1ZlcnRpY2FsTGF5b3V0Pg0KICAg -ICAgICA8L0hvcml6b250YWxMYXlvdXQ+DQoNCiAgICAgICAgPEhvcml6b250YWxMYXlvdXQgaGVp -Z2h0PSIxMDAiPg0KICAgICAgICAgIDxMYWJlbCB0ZXh0PSLng63plK7orr7nva46IiBoZWlnaHQ9 -IjIwIiB3aWR0aD0iMTIwIiAvPg0KDQogICAgICAgICAgPFZlcnRpY2FsTGF5b3V0ID4NCiAgICAg -ICAgICAgIDxMYWJlbCB0ZXh0PSLns7vnu5/lkbzlh7rng63plK4iIGhlaWdodD0iMjAiIHdpZHRo -PSIzMjAiIC8+DQogICAgICAgICAgICA8SG9yaXpvbnRhbExheW91dCBoZWlnaHQ9IjIyIj4NCiAg -ICAgICAgICAgICAgPE9wdGlvbiBuYW1lPSJodWNodV8xIiBoZWlnaHQ9IjIwIiB3aWR0aD0iNTAi -IHNlbGVjdGVkPSJ0cnVlIiB0ZXh0PSJDdHJsIiBhbGlnbj0ibGVmdCIgdGV4dHBhZGRpbmc9IjE4 -LDAsMCwwIiBub3JtYWxpbWFnZT0iZmlsZT0ndW5jaGVja2VkLnBuZycgZGVzdD0nMCwyLDE2LDE4 -JyIgc2VsZWN0ZWRpbWFnZT0iZmlsZT0nY2hlY2tlZC5wbmcnIGRlc3Q9JzAsMiwxNiwxOCciLz4N -CiAgICAgICAgICAgICAgPE9wdGlvbiBuYW1lPSJodWNodV8yIiBoZWlnaHQ9IjIwIiB3aWR0aD0i -NTAiIHNlbGVjdGVkPSJ0cnVlIiB0ZXh0PSJBdGwiIGFsaWduPSJsZWZ0IiB0ZXh0cGFkZGluZz0i -MTgsMCwwLDAiIG5vcm1hbGltYWdlPSJmaWxlPSd1bmNoZWNrZWQucG5nJyBkZXN0PScwLDIsMTYs -MTgnIiBzZWxlY3RlZGltYWdlPSJmaWxlPSdjaGVja2VkLnBuZycgZGVzdD0nMCwyLDE2LDE4JyIv -Pg0KDQogICAgICAgICAgICAgIDxDb21ibyBuYW1lPSJodWNodV9yZWppYW5fY29tYm8iIHdpZHRo -PSIzNSIgaGVpZ2h0PSIyMiIgZHJvcHR5cGU9ImRyb3BsaXN0IiB0ZXh0cGFkZGluZz0iNCwxLDEs -MSIgIG5vcm1hbGltYWdlPSJmaWxlPSdjb21iby5wbmcnIHNvdXJjZT0nMCwwLDEwMCwyMicgY29y -bmVyPScyLDIsMjAsMiciIGhvdGltYWdlPSJmaWxlPSdjb21iby5wbmcnIHNvdXJjZT0nMCwyMiwx -MDAsNDQnIGNvcm5lcj0nMiwyLDIyLDInIiBwdXNoZWRpbWFnZT0iZmlsZT0nY29tYm8ucG5nJyBz -b3VyY2U9JzAsNDQsMTAwLDY2JyBjb3JuZXI9JzIsMiwyMiwyJyI+DQogICAgICAgICAgICAgICAg -PExpc3RMYWJlbEVsZW1lbnQgdGV4dD0iWCIgc2VsZWN0ZWQ9InRydWUiIGhlaWdodD0iMjMiLz4N -CiAgICAgICAgICAgICAgICA8TGlzdExhYmVsRWxlbWVudCB0ZXh0PSJBIiBoZWlnaHQ9IjIzIiAv -Pg0KICAgICAgICAgICAgICAgIDxMaXN0TGFiZWxFbGVtZW50IHRleHQ9IkIiIGhlaWdodD0iMjMi -IC8+DQogICAgICAgICAgICAgICAgPExpc3RMYWJlbEVsZW1lbnQgdGV4dD0iQyIgaGVpZ2h0PSIy -MyIgLz4NCiAgICAgICAgICAgICAgICA8TGlzdExhYmVsRWxlbWVudCB0ZXh0PSJEIiBoZWlnaHQ9 -IjIzIiAvPg0KICAgICAgICAgICAgICA8L0NvbWJvPg0KICAgICAgICAgICAgPC9Ib3Jpem9udGFs -TGF5b3V0Pg0KICAgICAgICAgICAgPENvbnRyb2wgaGVpZ2h0PSI1Ii8+DQogICAgICAgICAgICA8 -TGFiZWwgdGV4dD0i5bGP5bmV5oiq5Zu+54Ot6ZSuIiBoZWlnaHQ9IjIwIiB3aWR0aD0iMzIwIiAv -Pg0KICAgICAgICAgICAgPEhvcml6b250YWxMYXlvdXQgaGVpZ2h0PSIyMiI+DQogICAgICAgICAg -ICAgIDxPcHRpb24gbmFtZT0iamlldHVfMSIgaGVpZ2h0PSIyMCIgd2lkdGg9IjUwIiBzZWxlY3Rl -ZD0idHJ1ZSIgdGV4dD0iQ3RybCIgYWxpZ249ImxlZnQiIHRleHRwYWRkaW5nPSIxOCwwLDAsMCIg -bm9ybWFsaW1hZ2U9ImZpbGU9J3VuY2hlY2tlZC5wbmcnIGRlc3Q9JzAsMiwxNiwxOCciIHNlbGVj -dGVkaW1hZ2U9ImZpbGU9J2NoZWNrZWQucG5nJyBkZXN0PScwLDIsMTYsMTgnIi8+DQogICAgICAg -ICAgICAgIDxPcHRpb24gbmFtZT0iamlldHVfMiIgaGVpZ2h0PSIyMCIgd2lkdGg9IjUwIiBzZWxl -Y3RlZD0idHJ1ZSIgdGV4dD0iQXRsIiBhbGlnbj0ibGVmdCIgdGV4dHBhZGRpbmc9IjE4LDAsMCww -IiBub3JtYWxpbWFnZT0iZmlsZT0ndW5jaGVja2VkLnBuZycgZGVzdD0nMCwyLDE2LDE4JyIgc2Vs -ZWN0ZWRpbWFnZT0iZmlsZT0nY2hlY2tlZC5wbmcnIGRlc3Q9JzAsMiwxNiwxOCciLz4NCg0KICAg -ICAgICAgICAgICA8Q29tYm8gbmFtZT0iaHVjaHVfamlhbnR1X2NvbWJvIiB3aWR0aD0iMzUiIGhl -aWdodD0iMjIiIGRyb3B0eXBlPSJkcm9wbGlzdCIgdGV4dHBhZGRpbmc9IjQsMSwxLDEiICBub3Jt -YWxpbWFnZT0iZmlsZT0nY29tYm8ucG5nJyBzb3VyY2U9JzAsMCwxMDAsMjInIGNvcm5lcj0nMiwy -LDIwLDInIiBob3RpbWFnZT0iZmlsZT0nY29tYm8ucG5nJyBzb3VyY2U9JzAsMjIsMTAwLDQ0JyBj -b3JuZXI9JzIsMiwyMiwyJyIgcHVzaGVkaW1hZ2U9ImZpbGU9J2NvbWJvLnBuZycgc291cmNlPScw -LDQ0LDEwMCw2NicgY29ybmVyPScyLDIsMjIsMiciPg0KICAgICAgICAgICAgICAgIDxMaXN0TGFi -ZWxFbGVtZW50IHRleHQ9IlMiIHNlbGVjdGVkPSJ0cnVlIiBoZWlnaHQ9IjIzIi8+DQogICAgICAg -ICAgICAgICAgPExpc3RMYWJlbEVsZW1lbnQgdGV4dD0iQSIgaGVpZ2h0PSIyMyIgLz4NCiAgICAg -ICAgICAgICAgICA8TGlzdExhYmVsRWxlbWVudCB0ZXh0PSJCIiBoZWlnaHQ9IjIzIiAvPg0KICAg -ICAgICAgICAgICAgIDxMaXN0TGFiZWxFbGVtZW50IHRleHQ9IkMiIGhlaWdodD0iMjMiIC8+DQog -ICAgICAgICAgICAgICAgPExpc3RMYWJlbEVsZW1lbnQgdGV4dD0iRCIgaGVpZ2h0PSIyMyIgLz4N -CiAgICAgICAgICAgICAgPC9Db21ibz4NCiAgICAgICAgICAgIDwvSG9yaXpvbnRhbExheW91dD4N -Cg0KICAgICAgICAgIDwvVmVydGljYWxMYXlvdXQ+DQogICAgICAgIDwvSG9yaXpvbnRhbExheW91 -dD4NCg0KICAgICAgICA8SG9yaXpvbnRhbExheW91dCBoZWlnaHQ9IjYwIj4NCiAgICAgICAgICA8 -TGFiZWwgdGV4dD0i5Lyg6L6T5paH5Lu26K6+572uOiIgaGVpZ2h0PSIyMCIgd2lkdGg9IjEyMCIg -Lz4NCg0KICAgICAgICAgIDxWZXJ0aWNhbExheW91dCA+DQogICAgICAgICAgICA8TGFiZWwgdGV4 -dD0i6buY6K6k5oqK5o6l5pS25Yiw55qE5paH5Lu25L+d5a2Y5Yiw5q2k5paH5Lu25aS55Lit77ya -IiB3aWR0aD0iMzAwIi8+DQogICAgICAgICAgICA8SG9yaXpvbnRhbExheW91dCBoZWlnaHQ9IjIy -Ij4NCiAgICAgICAgICAgICAgPEVkaXQgbmFtZT0icmVjZWl2ZV9lZGl0IiBib3JkZXJjb2xvcj0i -I0ZGMzMzMzMzIiBib3JkZXJzaXplPSIxIiB3aWR0aD0iMjQwIiB0ZXh0PSIxNSIvPg0KICAgICAg -ICAgICAgICA8QnV0dG9uIG5hbWU9ImNoYW5nZV9wYXRoX2J0biIgdGV4dD0i5pu05pS555uu5b2V -IiB3aWR0aD0iODAiIG5vcm1hbGltYWdlPSJyZXM9J2J1dHRvbl9ub3JtYWwucG5nJyBjb3JuZXI9 -JzQsNCw0LDQnIiBob3RpbWFnZT0icmVzPSdidXR0b25faG92ZXIucG5nJyBjb3JuZXI9JzQsNCw0 -LDQnIiBwdXNoZWRpbWFnZT0icmVzPSdidXR0b25fcHVzaGVkLnBuZycgY29ybmVyPSc0LDQsNCw0 -JyIvPg0KICAgICAgICAgICAgPC9Ib3Jpem9udGFsTGF5b3V0Pg0KICAgICAgICAgIDwvVmVydGlj -YWxMYXlvdXQ+DQogICAgICAgIDwvSG9yaXpvbnRhbExheW91dD4NCg0KICAgICAgICA8SG9yaXpv -bnRhbExheW91dCBoZWlnaHQ9IjgwIj4NCiAgICAgICAgICA8TGFiZWwgdGV4dD0i5aOw6Z+z6K6+ -572uOiIgaGVpZ2h0PSIyMCIgd2lkdGg9IjEyMCIgLz4NCg0KICAgICAgICAgIDxWZXJ0aWNhbExh -eW91dCA+DQogICAgICAgICAgICA8T3B0aW9uIG5hbWU9Im9wZW5fdm9pY2UiIGhlaWdodD0iMjAi -IHNlbGVjdGVkPSJ0cnVlIiB0ZXh0PSLlj5Hlh7rlo7Dpn7MiIGFsaWduPSJsZWZ0IiB0ZXh0cGFk -ZGluZz0iMTgsMCwwLDAiIG5vcm1hbGltYWdlPSJmaWxlPSd1bmNoZWNrZWQucG5nJyBkZXN0PScw -LDIsMTYsMTgnIiBzZWxlY3RlZGltYWdlPSJmaWxlPSdjaGVja2VkLnBuZycgZGVzdD0nMCwyLDE2 -LDE4JyIvPg0KDQogICAgICAgICAgICA8SG9yaXpvbnRhbExheW91dCBoZWlnaHQ9IjIyIj4NCiAg -ICAgICAgICAgICAgPExhYmVsIHRleHQ9IuWjsOmfs+exu+WeizoiIHdpZHRoPSI2MCIgLz4NCiAg -ICAgICAgICAgICAgPENvbWJvIG5hbWU9InZvaWNlX3R5cGVfY29tYm8iIHdpZHRoPSIxODAiIGhl -aWdodD0iMjIiIGRyb3B0eXBlPSJkcm9wbGlzdCIgdGV4dHBhZGRpbmc9IjQsMSwxLDEiICBub3Jt -YWxpbWFnZT0iZmlsZT0nY29tYm8ucG5nJyBzb3VyY2U9JzAsMCwxMDAsMjInIGNvcm5lcj0nMiwy -LDIwLDInIiBob3RpbWFnZT0iZmlsZT0nY29tYm8ucG5nJyBzb3VyY2U9JzAsMjIsMTAwLDQ0JyBj -b3JuZXI9JzIsMiwyMiwyJyIgcHVzaGVkaW1hZ2U9ImZpbGU9J2NvbWJvLnBuZycgc291cmNlPScw -LDQ0LDEwMCw2NicgY29ybmVyPScyLDIsMjIsMiciPg0KICAgICAgICAgICAgICAgIDxMaXN0TGFi -ZWxFbGVtZW50IHRleHQ9IuaZrumAmua2iOaBr+aPkOmGkiIgc2VsZWN0ZWQ9InRydWUiIGhlaWdo -dD0iMjMiLz4NCiAgICAgICAgICAgICAgICA8TGlzdExhYmVsRWxlbWVudCB0ZXh0PSLor7fmsYLm -tojmga/mj5DphpIiIGhlaWdodD0iMjMiIC8+DQogICAgICAgICAgICAgICAgPExpc3RMYWJlbEVs -ZW1lbnQgdGV4dD0i576k5raI5oGv5o+Q6YaSIiBoZWlnaHQ9IjIzIiAvPg0KICAgICAgICAgICAg -ICAgIDxMaXN0TGFiZWxFbGVtZW50IHRleHQ9IuaLkue7nea2iOaBr+aPkOmGkiIgaGVpZ2h0PSIy -MyIgLz4NCiAgICAgICAgICAgICAgICA8TGlzdExhYmVsRWxlbWVudCB0ZXh0PSLor63pn7Pmtojm -ga/mj5DphpIiIGhlaWdodD0iMjMiIC8+DQogICAgICAgICAgICAgIDwvQ29tYm8+DQogICAgICAg -ICAgICAgIDxCdXR0b24gbmFtZT0iY2hhbmdlX3BhdGhfYnRuIiB0ZXh0PSLmkq3mlL4iIHdpZHRo -PSI4MCIgbm9ybWFsaW1hZ2U9InJlcz0nYnV0dG9uX25vcm1hbC5wbmcnIGNvcm5lcj0nNCw0LDQs -NCciIGhvdGltYWdlPSJyZXM9J2J1dHRvbl9ob3Zlci5wbmcnIGNvcm5lcj0nNCw0LDQsNCciIHB1 -c2hlZGltYWdlPSJyZXM9J2J1dHRvbl9wdXNoZWQucG5nJyBjb3JuZXI9JzQsNCw0LDQnIiAvPg0K -ICAgICAgICAgICAgPC9Ib3Jpem9udGFsTGF5b3V0Pg0KDQogICAgICAgICAgICA8SG9yaXpvbnRh -bExheW91dCBoZWlnaHQ9IjIyIj4NCiAgICAgICAgICAgICAgPExhYmVsIHRleHQ9IuWjsOmfs+aW -h+S7tjoiIHdpZHRoPSI2MCIgLz4NCiAgICAgICAgICAgICAgPEVkaXQgbmFtZT0idm9pY2VfZWRp -dCIgYm9yZGVyY29sb3I9IiNGRjMzMzMzMyIgYm9yZGVyc2l6ZT0iMSIgd2lkdGg9IjE4MCIgdGV4 -dD0iMTUiLz4NCiAgICAgICAgICAgICAgPEJ1dHRvbiBuYW1lPSJjaGFuZ2Vfdm9pY2VfcGF0aF9i -dG4iIHRleHQ9Iua1j+iniCIgd2lkdGg9IjgwIiBub3JtYWxpbWFnZT0icmVzPSdidXR0b25fbm9y -bWFsLnBuZycgY29ybmVyPSc0LDQsNCw0JyIgaG90aW1hZ2U9InJlcz0nYnV0dG9uX2hvdmVyLnBu -ZycgY29ybmVyPSc0LDQsNCw0JyIgcHVzaGVkaW1hZ2U9InJlcz0nYnV0dG9uX3B1c2hlZC5wbmcn -IGNvcm5lcj0nNCw0LDQsNCciIC8+DQogICAgICAgICAgICA8L0hvcml6b250YWxMYXlvdXQ+DQog -ICAgICAgICAgICANCiAgICAgICAgICA8L1ZlcnRpY2FsTGF5b3V0Pg0KICAgICAgICA8L0hvcml6 -b250YWxMYXlvdXQ+DQoNCiAgICAgICAgPEhvcml6b250YWxMYXlvdXQgaGVpZ2h0PSIxODAiPg0K -ICAgICAgICAgIDxMYWJlbCB0ZXh0PSLlv6vmjbflm57lpI3orr7nva46IiBoZWlnaHQ9IjIwIiB3 -aWR0aD0iMTIwIiAvPg0KDQogICAgICAgICAgPFZlcnRpY2FsTGF5b3V0ID4NCiAgICAgICAgICAg -IDxIb3Jpem9udGFsTGF5b3V0IGhlaWdodD0iMzAiPg0KICAgICAgICAgICAgICA8TGFiZWwgbmFt -ZT0iaHVpZnVfMSIgaGVpZ2h0PSIyMCIgd2lkdGg9IjgwIiB0ZXh0PSLlv6vmjbflm57lpI0iIC8+ -DQogICAgICAgICAgICAgIDxDb21ibyBuYW1lPSJodWlmdV9udW1iZXJfY29tYm8iIGhlaWdodD0i -MjIiIGRyb3B0eXBlPSJkcm9wbGlzdCIgd2lkdGg9IjQ1IiB0ZXh0cGFkZGluZz0iNCwxLDEsMSIg -IG5vcm1hbGltYWdlPSJmaWxlPSdjb21iby5wbmcnIHNvdXJjZT0nMCwwLDEwMCwyMicgY29ybmVy -PScyLDIsMjAsMiciIGhvdGltYWdlPSJmaWxlPSdjb21iby5wbmcnIHNvdXJjZT0nMCwyMiwxMDAs -NDQnIGNvcm5lcj0nMiwyLDIyLDInIiBwdXNoZWRpbWFnZT0iZmlsZT0nY29tYm8ucG5nJyBzb3Vy -Y2U9JzAsNDQsMTAwLDY2JyBjb3JuZXI9JzIsMiwyMiwyJyI+DQogICAgICAgICAgICAgICAgPExp -c3RMYWJlbEVsZW1lbnQgdGV4dD0iNSIgc2VsZWN0ZWQ9InRydWUiIGhlaWdodD0iMjMiLz4NCiAg -ICAgICAgICAgICAgICA8TGlzdExhYmVsRWxlbWVudCB0ZXh0PSIxMCIgaGVpZ2h0PSIyMyIgLz4N -CiAgICAgICAgICAgICAgICA8TGlzdExhYmVsRWxlbWVudCB0ZXh0PSIxNSIgaGVpZ2h0PSIyMyIg -Lz4NCiAgICAgICAgICAgICAgICA8TGlzdExhYmVsRWxlbWVudCB0ZXh0PSIyMCIgaGVpZ2h0PSIy -MyIgLz4NCiAgICAgICAgICAgICAgICA8TGlzdExhYmVsRWxlbWVudCB0ZXh0PSIyNSIgaGVpZ2h0 -PSIyMyIgLz4NCiAgICAgICAgICAgICAgPC9Db21ibz4NCiAgICAgICAgICAgIDwvSG9yaXpvbnRh -bExheW91dD4NCg0KICAgICAgICAgICAgPEhvcml6b250YWxMYXlvdXQgaGVpZ2h0PSIxMDAiPg0K -ICAgICAgICAgICAgICA8TGlzdCBuYW1lPSJodWlmdV9saXN0IiBib3JkZXJjb2xvcj0iI0ZGMzMz -MzMzIiBib3JkZXJzaXplPSIxIiBpbnNldD0iNCwxLDEsMSIgaGVhZGVyPSJoaWRkZW4iIHZzY3Jv -bGxiYXI9InRydWUiIGhzY3JvbGxiYXI9InRydWUiIGl0ZW10ZXh0c3R5bGU9ImxlZnQiPg0KICAg -ICAgICAgICAgICAgIDxMaXN0TGFiZWxFbGVtZW50IHRleHQ9IuS9oOWlveWViiIgc2VsZWN0ZWQ9 -InRydWUiIGhlaWdodD0iMjMiLz4NCiAgICAgICAgICAgICAgICA8TGlzdExhYmVsRWxlbWVudCB0 -ZXh0PSLnprvlvIDkuoYiIGhlaWdodD0iMjMiIC8+DQogICAgICAgICAgICAgICAgPExpc3RMYWJl -bEVsZW1lbnQgdGV4dD0i5b+Z56KM5LqGIiBoZWlnaHQ9IjIzIiAvPg0KICAgICAgICAgICAgICAg -IDxMaXN0TGFiZWxFbGVtZW50IHRleHQ9IumakOi6q+S6hiIgaGVpZ2h0PSIyMyIgLz4NCiAgICAg -ICAgICAgICAgICA8TGlzdExhYmVsRWxlbWVudCB0ZXh0PSLor7fli7/miZPmibAiIGhlaWdodD0i -MjMiIC8+DQogICAgICAgICAgICAgIDwvTGlzdD4NCiAgICAgICAgICAgICAgPENvbnRyb2wgd2lk -dGg9IjE1Ii8+DQogICAgICAgICAgICAgIDxWZXJ0aWNhbExheW91dD4NCiAgICAgICAgICAgICAg -ICA8Q29udHJvbCAvPg0KICAgICAgICAgICAgICAgIDxCdXR0b24gbmFtZT0iaHVpZnVfYWRkIiB0 -ZXh0PSLlop7liqAiIHdpZHRoPSI0NSIgaGVpZ2h0PSIyMCIgbm9ybWFsaW1hZ2U9InJlcz0nYnV0 -dG9uX25vcm1hbC5wbmcnIGNvcm5lcj0nNCw0LDQsNCciIGhvdGltYWdlPSJyZXM9J2J1dHRvbl9o -b3Zlci5wbmcnIGNvcm5lcj0nNCw0LDQsNCciIHB1c2hlZGltYWdlPSJyZXM9J2J1dHRvbl9wdXNo -ZWQucG5nJyBjb3JuZXI9JzQsNCw0LDQnIi8+DQogICAgICAgICAgICAgICAgPEJ1dHRvbiBuYW1l -PSJodWlmdV9kZWwiIHRleHQ9IuWIoOmZpCIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjIwIiBub3JtYWxp -bWFnZT0icmVzPSdidXR0b25fbm9ybWFsLnBuZycgY29ybmVyPSc0LDQsNCw0JyIgaG90aW1hZ2U9 -InJlcz0nYnV0dG9uX2hvdmVyLnBuZycgY29ybmVyPSc0LDQsNCw0JyIgcHVzaGVkaW1hZ2U9InJl -cz0nYnV0dG9uX3B1c2hlZC5wbmcnIGNvcm5lcj0nNCw0LDQsNCciLz4NCiAgICAgICAgICAgICAg -ICA8Q29udHJvbCAvPg0KICAgICAgICAgICAgICA8L1ZlcnRpY2FsTGF5b3V0Pg0KICAgICAgICAg -ICAgPC9Ib3Jpem9udGFsTGF5b3V0Pg0KICAgICAgICAgIDwvVmVydGljYWxMYXlvdXQ+DQogICAg -ICAgIDwvSG9yaXpvbnRhbExheW91dD4NCiAgICAgICAgDQogICAgICAgIA0KICAgICAgICANCiAg -ICAgIDwvVmVydGljYWxMYXlvdXQ+DQogICAgPC9WZXJ0aWNhbExheW91dD4NCg0KICAgIDxWZXJ0 -aWNhbExheW91dCBuYW1lPSJyb290IiBoZWlnaHQ9IjMwIj4NCiAgICAgIA0KICAgIDwvVmVydGlj -YWxMYXlvdXQ+DQogICAgDQogIDwvVmVydGljYWxMYXlvdXQ+DQo8L1dpbmRvdz4= diff --git a/bin/skin/qqsetup/sys_dlg_close.png b/bin/skin/qqsetup/sys_dlg_close.png deleted file mode 100644 index 28f1a3bc..00000000 Binary files a/bin/skin/qqsetup/sys_dlg_close.png and /dev/null differ diff --git a/bin/skin/qqsetup/sys_dlg_max.png b/bin/skin/qqsetup/sys_dlg_max.png deleted file mode 100644 index fdb43268..00000000 Binary files a/bin/skin/qqsetup/sys_dlg_max.png and /dev/null differ diff --git a/bin/skin/qqsetup/sys_dlg_menu.png b/bin/skin/qqsetup/sys_dlg_menu.png deleted file mode 100644 index 5dfc9764..00000000 Binary files a/bin/skin/qqsetup/sys_dlg_menu.png and /dev/null differ diff --git a/bin/skin/qqsetup/sys_dlg_min.png b/bin/skin/qqsetup/sys_dlg_min.png deleted file mode 100644 index d6d09b94..00000000 Binary files a/bin/skin/qqsetup/sys_dlg_min.png and /dev/null differ diff --git a/bin/skin/qqsetup/sys_dlg_restore.png b/bin/skin/qqsetup/sys_dlg_restore.png deleted file mode 100644 index a25fd5d8..00000000 Binary files a/bin/skin/qqsetup/sys_dlg_restore.png and /dev/null differ diff --git a/bin/skin/qqsetup/tabbar_hover.png b/bin/skin/qqsetup/tabbar_hover.png deleted file mode 100644 index e88759cc..00000000 Binary files a/bin/skin/qqsetup/tabbar_hover.png and /dev/null differ diff --git a/bin/skin/qqsetup/tabbar_normal.png b/bin/skin/qqsetup/tabbar_normal.png deleted file mode 100644 index d8b52269..00000000 Binary files a/bin/skin/qqsetup/tabbar_normal.png and /dev/null differ diff --git a/bin/skin/qqsetup/tabbar_pushed.png b/bin/skin/qqsetup/tabbar_pushed.png deleted file mode 100644 index eb80238b..00000000 Binary files a/bin/skin/qqsetup/tabbar_pushed.png and /dev/null differ diff --git a/bin/skin/qqsetup/unchecked.png b/bin/skin/qqsetup/unchecked.png deleted file mode 100644 index 308d2b14..00000000 Binary files a/bin/skin/qqsetup/unchecked.png and /dev/null differ diff --git a/bin/skin/qqsetup/bg.png b/bin/skin/transwnd/bg.png similarity index 57% rename from bin/skin/qqsetup/bg.png rename to bin/skin/transwnd/bg.png index 53d85ae2..02a3df58 100644 Binary files a/bin/skin/qqsetup/bg.png and b/bin/skin/transwnd/bg.png differ diff --git a/bin/skin/transwnd/logo.jpg b/bin/skin/transwnd/logo.jpg new file mode 100644 index 00000000..f568e829 Binary files /dev/null and b/bin/skin/transwnd/logo.jpg differ diff --git a/bin/skin/transwnd/skin.xml b/bin/skin/transwnd/skin.xml new file mode 100644 index 00000000..40719d90 --- /dev/null +++ b/bin/skin/transwnd/skin.xml @@ -0,0 +1,22 @@ + + + + + + + + + +