Commit 897ea5aa authored by fzhar's avatar fzhar Committed by Oleg Nabiullin

Windows samples and projects are merged in

parent 6bbc7370
......@@ -4,3 +4,6 @@ tests/gold/
tests/results/
tests/ted/__pycache__/
tests/test_results.json
.vs
samples/_build
*.user
\ No newline at end of file
......@@ -51,7 +51,7 @@ You may also wish to visit Intel Media Server Studio [support page](https://soft
# System requirements
**Operating System:** Linux
**Operating System:** Linux , Windows (not all features are supported in Windows build - see Known Limitations for details)
**Software:**
* [LibVA](https://github.com/intel/libva)
......@@ -125,6 +125,8 @@ Once Media SDK was built with ITT support, enable it in a runtime creating per-u
```sh
Output=0x10
```
# Known limitations
Windows build contains only samples and dispatcher library. MediaSDK library DLL is provided with Windows GFX driver.
# Recommendations
......
......@@ -54,8 +54,13 @@ extern "C"
#define __INT64 long long
#define __UINT64 unsigned long long
#define MFX_CDECL
#define MFX_STDCALL
#ifdef _WIN32
#define MFX_CDECL __cdecl
#define MFX_STDCALL __stdcall
#else
#define MFX_CDECL
#define MFX_STDCALL
#endif /* _WIN32 */
#define MFX_INFINITE 0xFFFFFFFF
......
This diff is collapsed.
/******************************************************************************\
Copyright (c) 2005-2018, Intel Corporation
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
This sample was distributed or derived from the Intel's Media Samples package.
The original version of this sample may be obtained from https://software.intel.com/en-us/intel-media-server-studio
or https://software.intel.com/en-us/media-client-solutions-support.
\**********************************************************************************/
#ifndef __CAMERA_D3D_RENDER_H__
#define __CAMERA_D3D_RENDER_H__
#if defined(_WIN32) || defined(_WIN64)
#pragma warning(disable : 4201)
#include <d3d9.h>
#include <dxva2api.h>
#include <dxva.h>
#include <windows.h>
#endif
#include "mfxstructures.h"
#include "mfxvideo.h"
#include "hw_device.h"
typedef void* WindowHandle;
typedef void* Handle;
#if defined(_WIN32) || defined(_WIN64)
struct sWindowParams
{
LPCTSTR lpClassName;
LPCTSTR lpWindowName;
DWORD dwStyle;
int nx;
int ny;
int ncell;
int nAdapter;
int nMaxFPS;
int nWidth;
int nHeight;
HWND hWndParent;
HMENU hMenu;
HINSTANCE hInstance;
LPVOID lpParam;
bool bFullScreen; // Stretch window to full screen
};
class CCameraD3DRender
{
public:
CCameraD3DRender();
virtual ~CCameraD3DRender();
virtual mfxStatus Init(sWindowParams pWParams);
virtual mfxStatus RenderFrame(mfxFrameSurface1 *pSurface, mfxFrameAllocator *pmfxAlloc);
virtual void Close();
HWND GetWindowHandle() { return m_Hwnd; }
VOID OnDestroy(HWND hwnd);
VOID OnKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags);
VOID ChangeWindowSize(bool bFullScreen);
void SetHWDevice(CHWDevice *dev)
{
m_hwdev = dev;
}
protected:
void AdjustWindowRect(RECT *rect);
CHWDevice *m_hwdev;
sWindowParams m_sWindowParams;
HWND m_Hwnd;
RECT m_rect;
DWORD m_style;
bool EnableDwmQueuing();
static BOOL CALLBACK MonitorEnumProc(HMONITOR ,HDC ,LPRECT lprcMonitor,LPARAM dwData);
bool m_bDwmEnabled;
LARGE_INTEGER m_LastInputTime;
LARGE_INTEGER m_Freq;
int m_nFrames;
int m_nMonitorCurrent;
::RECT m_RectWindow;
};
#endif // #if defined(_WIN32) || defined(_WIN64)
#endif // __CAMERA_D3D_RENDER_H__
\ No newline at end of file
/******************************************************************************\
Copyright (c) 2005-2018, Intel Corporation
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
This sample was distributed or derived from the Intel's Media Samples package.
The original version of this sample may be obtained from https://software.intel.com/en-us/intel-media-server-studio
or https://software.intel.com/en-us/media-client-solutions-support.
\**********************************************************************************/
#ifndef __CAM_SYSMEM_ALLOCATOR_H__
#define __CAM_SYSMEM_ALLOCATOR_H__
#include <stdlib.h>
#include "base_allocator.h"
struct sBuffer
{
mfxU32 id;
mfxU32 nbytes;
mfxU16 type;
};
struct sFrame
{
mfxU32 id;
mfxFrameInfo info;
};
struct CamSysMemAllocatorParams : mfxAllocatorParams
{
CamSysMemAllocatorParams()
: mfxAllocatorParams(),
pBufferAllocator(0), alignment(0) { }
MFXBufferAllocator *pBufferAllocator;
mfxI32 alignment;
};
class CamSysMemFrameAllocator: public BaseFrameAllocator
{
public:
CamSysMemFrameAllocator();
virtual ~CamSysMemFrameAllocator();
virtual mfxStatus Init(mfxAllocatorParams *pParams);
virtual mfxStatus Close();
virtual mfxStatus LockFrame(mfxMemId mid, mfxFrameData *ptr);
virtual mfxStatus UnlockFrame(mfxMemId mid, mfxFrameData *ptr);
virtual mfxStatus GetFrameHDL(mfxMemId mid, mfxHDL *handle);
protected:
virtual mfxStatus CheckRequestType(mfxFrameAllocRequest *request);
virtual mfxStatus ReleaseResponse(mfxFrameAllocResponse *response);
virtual mfxStatus AllocImpl(mfxFrameAllocRequest *request, mfxFrameAllocResponse *response);
MFXBufferAllocator *m_pBufferAllocator;
bool m_bOwnBufferAllocator;
mfxU32 m_alignment;
};
class CamSysMemBufferAllocator : public MFXBufferAllocator
{
public:
CamSysMemBufferAllocator();
virtual ~CamSysMemBufferAllocator();
virtual mfxStatus AllocBuffer(mfxU32 nbytes, mfxU16 type, mfxMemId *mid);
virtual mfxStatus LockBuffer(mfxMemId mid, mfxU8 **ptr);
virtual mfxStatus UnlockBuffer(mfxMemId mid);
virtual mfxStatus FreeBuffer(mfxMemId mid);
};
#endif // __CAM_SYSMEM_ALLOCATOR_H__
\ No newline at end of file
/******************************************************************************\
Copyright (c) 2005-2018, Intel Corporation
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
This sample was distributed or derived from the Intel's Media Samples package.
The original version of this sample may be obtained from https://software.intel.com/en-us/intel-media-server-studio
or https://software.intel.com/en-us/media-client-solutions-support.
\**********************************************************************************/
#ifndef __PIPELINE_DECODE_H__
#define __PIPELINE_DECODE_H__
#include "sample_defs.h"
#if D3D_SURFACES_SUPPORT
#pragma warning(disable : 4201)
#include <d3d9.h>
#include <dxva2api.h>
#endif
#include <vector>
#include "hw_device.h"
#include "camera_render.h"
#include <memory>
#include "sample_camera_utils.h"
#include "sample_defs.h"
#include "sample_utils.h"
#include "base_allocator.h"
#include "mfxplugin.h"
#include "mfxplugin++.h"
#include "mfxvideo.h"
#include "mfxvideo++.h"
#include "vm/thread_defs.h"
// The only supported padding size is 8
#define CAMERA_PADDING_SIZE 8
#define align(value) ((0x10) * ( (value) / (0x10) + (((value) % (0x10)) ? 1 : 0)))
#define align_32(value) ((0x20) * ( (value) / (0x20) + (((value) % (0x20)) ? 1 : 0)))
#define align_64(value) ((0x40) * ( (value) / (0x40) + (((value) % (0x40)) ? 1 : 0)))
class CCameraPipeline
{
public:
CCameraPipeline();
virtual ~CCameraPipeline();
virtual mfxStatus Init(sInputParams *pParams);
virtual mfxStatus Run();
virtual void Close();
virtual mfxStatus Reset(sInputParams *pParams);
void SetExtBuffersFlag() { m_bIsExtBuffers = true; }
void SetRenderingFlag() { m_bIsRender = true; }
void SetOutputfileFlag(bool b) { m_bOutput = b; }
virtual void PrintInfo();
mfxU32 GetNumberProcessedFrames() {return m_nFrameIndex;}
mfxStatus PrepareInputSurfaces();
protected:
bool isBayerFormat(mfxU32 type);
mfxCam3DLutEntry* m_3dlut_17;
mfxCam3DLutEntry* m_3dlut_33;
mfxCam3DLutEntry* m_3dlut_65;
CBmpWriter* m_pBmpWriter;
CVideoReader* m_pFileReader;
CRawVideoWriter* m_pRawFileWriter;
mfxU32 m_nInputFileIndex;
mfxU32 m_nFrameIndex; // index of processed frame
mfxU32 m_nFrameLimit; // limit number of frames to proceed
MFXVideoSession m_mfxSession;
MFXVideoVPP* m_pmfxVPP;
mfxVideoParam m_mfxVideoParams;
std::auto_ptr<MFXVideoUSER> m_pUserModule;
std::auto_ptr<MFXPlugin> m_pCamera_plugin;
mfxPluginUID m_UID_Camera;
mfxExtCamVignetteCorrection m_Vignette;
mfxExtCamBayerDenoise m_Denoise;
mfxExtCamHotPixelRemoval m_HP;
mfxExtCamGammaCorrection m_GammaCorrection;
mfxExtCamFwdGamma m_3DLUT_GammaCorrection;
#if MFX_VERSION >= 1023
mfxExtCamTotalColorControl m_TotalColorControl;
mfxExtCamCscYuvRgb m_RGBToYUV;
#endif
mfxExtCamBlackLevelCorrection m_BlackLevelCorrection;
mfxExtCamWhiteBalance m_WhiteBalance;
mfxExtCamColorCorrection3x3 m_CCM;
mfxExtCam3DLut m_3DLUT;
mfxExtCamLensGeomDistCorrection m_Lens;
mfxExtCamPipeControl m_PipeControl;
mfxExtCamPadding m_Padding;
std::vector<mfxExtBuffer *> m_ExtBuffers;
MFXFrameAllocator* m_pMFXd3dAllocator;
mfxAllocatorParams* m_pmfxd3dAllocatorParams;
MFXFrameAllocator* m_pMFXsysAllocator;
mfxAllocatorParams* m_pmfxsysAllocatorParams;
MFXFrameAllocator* m_pMFXAllocatorIn;
mfxAllocatorParams* m_pmfxAllocatorParamsIn;
MFXFrameAllocator* m_pMFXAllocatorOut;
mfxAllocatorParams* m_pmfxAllocatorParamsOut;
MemType m_memTypeOut; // memory type of output surfaces to use
MemType m_memTypeIn; // memory type of input surfaces to use
AccelType m_accelType;
bool m_bExternalAllocIn; // use memory allocator as external for Media SDK
bool m_bExternalAllocOut; // use memory allocator as external for Media SDK
mfxFrameSurface1* m_pmfxSurfacesIn; // frames array
mfxFrameSurface1* m_pmfxSurfacesOut; // frames array
mfxFrameAllocResponse m_mfxResponseIn; // memory allocation response
mfxFrameAllocResponse m_mfxResponseOut; // memory allocation response
mfxFrameAllocResponse m_mfxResponseAux; // memory allocation response
mfxFrameSurface1* m_pmfxSurfacesAux; // frames array
mfxFrameAllocRequest m_lastAllocRequest[2];
bool m_bIsExtBuffers; // indicates if external buffers were allocated
bool m_bIsRender; // enables rendering mode
bool m_bOutput; // enables/disables output file
bool m_bEnd;
bool b_3DLUT_Gamma;
mfxI32 m_alphaValue;
mfxU32 m_BayerType;
mfxU32 m_numberOfResets;
mfxU32 m_resetCnt;
mfxU32 m_resetInterval;
CHWDevice *m_hwdev;
#if D3D_SURFACES_SUPPORT
CCameraD3DRender m_d3dRender;
#endif
virtual mfxStatus InitMfxParams(sInputParams *pParams);
// function for allocating a specific external buffer
template <typename Buffer>
mfxStatus AllocateExtBuffer();
virtual void DeleteExtBuffers();
virtual void AttachExtParam();
virtual mfxStatus AllocAndInitDenoise(sInputParams *pParams);
virtual mfxStatus AllocAndInitVignetteCorrection(sInputParams *pParams);
virtual mfxStatus AllocAndInitCamGammaCorrection(sInputParams *pParams);
virtual mfxStatus AllocAndInitCamWhiteBalance(sInputParams *pParams);
virtual mfxStatus AllocAndInitCamCCM(sInputParams *pParams);
virtual mfxStatus AllocAndInitCamLens(sInputParams *pParams);
#if MFX_VERSION >= 1023
virtual mfxStatus AllocAndInitCamTotalColorControl(sInputParams *pParams);
virtual mfxStatus AllocAndInitCamRGBtoYUV(sInputParams *pParams);
#endif
virtual mfxStatus AllocAndInitCamBlackLevelCorrection(sInputParams *pParams);
virtual mfxStatus AllocAndInitCamHotPixelRemoval(sInputParams *pParams);
virtual void FreeCamGammaCorrection();
virtual void FreeVignetteCorrection();
virtual mfxStatus CreateAllocator();
virtual mfxStatus CreateHWDevice();
virtual mfxStatus AllocFrames();
virtual mfxStatus ReallocFrames(mfxVideoParam *par);
virtual void DeleteFrames();
virtual void DeleteAllocator();
//virtual mfxStatus PrepareInSurface(mfxFrameSurface1 **ppSurface, mfxU32 indx = 0);
};
#endif // __PIPELINE_DECODE_H__
\ No newline at end of file
This diff is collapsed.

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27703.2000
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample_camera", "sample_camera.vcxproj", "{A812C44D-0255-4796-9042-BCAE99963E7D}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample_common", "..\sample_common\sample_common.vcxproj", "{5FADB243-53C3-4776-A20F-8BD65C10CF41}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
Release|Win32 = Release|Win32
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A812C44D-0255-4796-9042-BCAE99963E7D}.Debug|Win32.ActiveCfg = Debug|Win32
{A812C44D-0255-4796-9042-BCAE99963E7D}.Debug|Win32.Build.0 = Debug|Win32
{A812C44D-0255-4796-9042-BCAE99963E7D}.Debug|x64.ActiveCfg = Debug|x64
{A812C44D-0255-4796-9042-BCAE99963E7D}.Debug|x64.Build.0 = Debug|x64
{A812C44D-0255-4796-9042-BCAE99963E7D}.Release|Win32.ActiveCfg = Release|Win32
{A812C44D-0255-4796-9042-BCAE99963E7D}.Release|Win32.Build.0 = Release|Win32
{A812C44D-0255-4796-9042-BCAE99963E7D}.Release|x64.ActiveCfg = Release|x64
{A812C44D-0255-4796-9042-BCAE99963E7D}.Release|x64.Build.0 = Release|x64
{5FADB243-53C3-4776-A20F-8BD65C10CF41}.Debug|Win32.ActiveCfg = Debug|Win32
{5FADB243-53C3-4776-A20F-8BD65C10CF41}.Debug|Win32.Build.0 = Debug|Win32
{5FADB243-53C3-4776-A20F-8BD65C10CF41}.Debug|x64.ActiveCfg = Debug|x64
{5FADB243-53C3-4776-A20F-8BD65C10CF41}.Debug|x64.Build.0 = Debug|x64
{5FADB243-53C3-4776-A20F-8BD65C10CF41}.Release|Win32.ActiveCfg = Release|Win32
{5FADB243-53C3-4776-A20F-8BD65C10CF41}.Release|Win32.Build.0 = Release|Win32
{5FADB243-53C3-4776-A20F-8BD65C10CF41}.Release|x64.ActiveCfg = Release|x64
{5FADB243-53C3-4776-A20F-8BD65C10CF41}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -20,6 +20,9 @@ or https://software.intel.com/en-us/media-client-solutions-support.
#ifndef __AVC_STRUCTURES_H__
#define __AVC_STRUCTURES_H__
#if defined(_WIN32) || defined(_WIN64)
#include <windows.h>
#endif
#include <string>
#include <string.h>
#include <vector>
......
......@@ -18,6 +18,10 @@ or https://software.intel.com/en-us/media-client-solutions-support.
\**********************************************************************************/
#include "sample_defs.h"
#ifndef MFX_VERSION
#error MFX_VERSION not defined
#endif
#if (MFX_VERSION >= 1024)
#include "mfxbrc.h"
......
......@@ -22,5 +22,6 @@ or https://software.intel.com/en-us/media-client-solutions-support.
#define FILE_VERSION_STRING "1,0,0,0"
#define FILTER_NAME_PREFIX ""
#define FILTER_NAME_SUFFIX ""
#define PRODUCT_COPYRIGHT "Copyright\xa9 2003-2019 Intel Corporation"
#define PRODUCT_VERSION 1,0,0,0
#define PRODUCT_VERSION_STRING "1,0,0,0"
This diff is collapsed.
......@@ -51,7 +51,7 @@ struct msdkOutputSurface
* normal circumstances. Macro should be used where check in release mode is not
* desirable and atually needed.
*/
#define MSDK_SELF_CHECK(C)
#define MSDK_SELF_CHECK(C)
class CBuffering;
......
......@@ -20,5 +20,4 @@ or https://software.intel.com/en-us/media-client-solutions-support.
#ifndef __MFX_SAMPLES_CONFIG__
#define __MFX_SAMPLES_CONFIG__
#endif //__MFX_SAMPLES_CONFIG__
......@@ -105,7 +105,7 @@ private:
else if (AreGuidsEqual(guid, MFX_PLUGINID_HEVCE_GACC))
return MSDK_STRING("Intel (R) Media SDK GPU-Accelerated plugin for HEVC ENCODE");
else
#if MFX_VERSION >= 1027
#if (MFX_VERSION >= 1027) && !defined(_WIN32) && !defined(_WIN64)
if (AreGuidsEqual(guid, MFX_PLUGINID_HEVC_FEI_ENCODE))
return MSDK_STRING("Intel (R) Media SDK HW plugin for HEVC FEI ENCODE");
else
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment