Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Oliver Sander
poppler
Commits
6e07b84a
Commit
6e07b84a
authored
Sep 02, 2020
by
Tobias Deiminger
Committed by
Albert Astals Cid
Sep 02, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Splash: Rename Yd to Ydown, Xu to Xup, etc.
Minor gift to new contributors. Makes methods intention more obvious.
parent
e79cbe0a
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
34 additions
and
34 deletions
+34
-34
splash/Splash.cc
splash/Splash.cc
+25
-25
splash/Splash.h
splash/Splash.h
+9
-9
No files found.
splash/Splash.cc
View file @
6e07b84a
...
...
@@ -23,7 +23,7 @@
// Copyright (C) 2018 Adam Reichold <adam.reichold@t-online.de>
// Copyright (C) 2019, 2020 Oliver Sander <oliver.sander@tu-dresden.de>
// Copyright (C) 2019 Marek Kasik <mkasik@redhat.com>
// Copyright (C) 2020 Tobias Deimi
g
ner <haxtibal@posteo.de>
// Copyright (C) 2020 Tobias Deimin
g
er <haxtibal@posteo.de>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
...
...
@@ -3068,21 +3068,21 @@ SplashBitmap *Splash::scaleMask(SplashImageMaskSource src, void *srcData, int sr
dest
=
new
SplashBitmap
(
scaledWidth
,
scaledHeight
,
1
,
splashModeMono8
,
false
);
if
(
scaledHeight
<
srcHeight
)
{
if
(
scaledWidth
<
srcWidth
)
{
scaleMaskYd
Xd
(
src
,
srcData
,
srcWidth
,
srcHeight
,
scaledWidth
,
scaledHeight
,
dest
);
scaleMaskYd
ownXdown
(
src
,
srcData
,
srcWidth
,
srcHeight
,
scaledWidth
,
scaledHeight
,
dest
);
}
else
{
scaleMaskYdXu
(
src
,
srcData
,
srcWidth
,
srcHeight
,
scaledWidth
,
scaledHeight
,
dest
);
scaleMaskYd
own
Xu
p
(
src
,
srcData
,
srcWidth
,
srcHeight
,
scaledWidth
,
scaledHeight
,
dest
);
}
}
else
{
if
(
scaledWidth
<
srcWidth
)
{
scaleMaskYuXd
(
src
,
srcData
,
srcWidth
,
srcHeight
,
scaledWidth
,
scaledHeight
,
dest
);
scaleMaskYu
p
Xd
own
(
src
,
srcData
,
srcWidth
,
srcHeight
,
scaledWidth
,
scaledHeight
,
dest
);
}
else
{
scaleMaskYuXu
(
src
,
srcData
,
srcWidth
,
srcHeight
,
scaledWidth
,
scaledHeight
,
dest
);
scaleMaskYu
p
Xu
p
(
src
,
srcData
,
srcWidth
,
srcHeight
,
scaledWidth
,
scaledHeight
,
dest
);
}
}
return
dest
;
}
void
Splash
::
scaleMaskYd
Xd
(
SplashImageMaskSource
src
,
void
*
srcData
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
)
void
Splash
::
scaleMaskYd
ownXdown
(
SplashImageMaskSource
src
,
void
*
srcData
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
)
{
unsigned
char
*
lineBuf
;
unsigned
int
*
pixBuf
;
...
...
@@ -3103,7 +3103,7 @@ void Splash::scaleMaskYdXd(SplashImageMaskSource src, void *srcData, int srcWidt
lineBuf
=
(
unsigned
char
*
)
gmalloc
(
srcWidth
);
pixBuf
=
(
unsigned
int
*
)
gmallocn_checkoverflow
(
srcWidth
,
sizeof
(
int
));
if
(
unlikely
(
!
pixBuf
))
{
error
(
errInternal
,
-
1
,
"Couldn't allocate memory for pixBux in Splash::scaleMaskYd
Xd
"
);
error
(
errInternal
,
-
1
,
"Couldn't allocate memory for pixBux in Splash::scaleMaskYd
ownXdown
"
);
gfree
(
lineBuf
);
return
;
}
...
...
@@ -3166,7 +3166,7 @@ void Splash::scaleMaskYdXd(SplashImageMaskSource src, void *srcData, int srcWidt
gfree
(
lineBuf
);
}
void
Splash
::
scaleMaskYdXu
(
SplashImageMaskSource
src
,
void
*
srcData
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
)
void
Splash
::
scaleMaskYd
own
Xu
p
(
SplashImageMaskSource
src
,
void
*
srcData
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
)
{
unsigned
char
*
lineBuf
;
unsigned
int
*
pixBuf
;
...
...
@@ -3177,7 +3177,7 @@ void Splash::scaleMaskYdXu(SplashImageMaskSource src, void *srcData, int srcWidt
destPtr
=
dest
->
data
;
if
(
destPtr
==
nullptr
)
{
error
(
errInternal
,
-
1
,
"dest->data is NULL in Splash::scaleMaskYdXu"
);
error
(
errInternal
,
-
1
,
"dest->data is NULL in Splash::scaleMaskYd
own
Xu
p
"
);
return
;
}
...
...
@@ -3245,7 +3245,7 @@ void Splash::scaleMaskYdXu(SplashImageMaskSource src, void *srcData, int srcWidt
gfree
(
lineBuf
);
}
void
Splash
::
scaleMaskYuXd
(
SplashImageMaskSource
src
,
void
*
srcData
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
)
void
Splash
::
scaleMaskYu
p
Xd
own
(
SplashImageMaskSource
src
,
void
*
srcData
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
)
{
unsigned
char
*
lineBuf
;
unsigned
int
pix
;
...
...
@@ -3255,7 +3255,7 @@ void Splash::scaleMaskYuXd(SplashImageMaskSource src, void *srcData, int srcWidt
destPtr0
=
dest
->
data
;
if
(
destPtr0
==
nullptr
)
{
error
(
errInternal
,
-
1
,
"dest->data is NULL in Splash::scaleMaskYuXd"
);
error
(
errInternal
,
-
1
,
"dest->data is NULL in Splash::scaleMaskYu
p
Xd
own
"
);
return
;
}
...
...
@@ -3325,7 +3325,7 @@ void Splash::scaleMaskYuXd(SplashImageMaskSource src, void *srcData, int srcWidt
gfree
(
lineBuf
);
}
void
Splash
::
scaleMaskYuXu
(
SplashImageMaskSource
src
,
void
*
srcData
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
)
void
Splash
::
scaleMaskYu
p
Xu
p
(
SplashImageMaskSource
src
,
void
*
srcData
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
)
{
unsigned
char
*
lineBuf
;
unsigned
int
pix
;
...
...
@@ -3335,12 +3335,12 @@ void Splash::scaleMaskYuXu(SplashImageMaskSource src, void *srcData, int srcWidt
destPtr0
=
dest
->
data
;
if
(
destPtr0
==
nullptr
)
{
error
(
errInternal
,
-
1
,
"dest->data is NULL in Splash::scaleMaskYuXu"
);
error
(
errInternal
,
-
1
,
"dest->data is NULL in Splash::scaleMaskYu
p
Xu
p
"
);
return
;
}
if
(
unlikely
(
srcWidth
<=
0
||
srcHeight
<=
0
))
{
error
(
errSyntaxError
,
-
1
,
"srcWidth <= 0 || srcHeight <= 0 in Splash::scaleMaskYuXu"
);
error
(
errSyntaxError
,
-
1
,
"srcWidth <= 0 || srcHeight <= 0 in Splash::scaleMaskYu
p
Xu
p
"
);
gfree
(
dest
->
takeData
());
return
;
}
...
...
@@ -3924,18 +3924,18 @@ SplashBitmap *Splash::scaleImage(SplashImageSource src, void *srcData, SplashCol
if
(
dest
->
getDataPtr
()
!=
nullptr
&&
srcHeight
>
0
&&
srcWidth
>
0
)
{
if
(
scaledHeight
<
srcHeight
)
{
if
(
scaledWidth
<
srcWidth
)
{
scaleImageYd
Xd
(
src
,
srcData
,
srcMode
,
nComps
,
srcAlpha
,
srcWidth
,
srcHeight
,
scaledWidth
,
scaledHeight
,
dest
);
scaleImageYd
ownXdown
(
src
,
srcData
,
srcMode
,
nComps
,
srcAlpha
,
srcWidth
,
srcHeight
,
scaledWidth
,
scaledHeight
,
dest
);
}
else
{
scaleImageYdXu
(
src
,
srcData
,
srcMode
,
nComps
,
srcAlpha
,
srcWidth
,
srcHeight
,
scaledWidth
,
scaledHeight
,
dest
);
scaleImageYd
own
Xu
p
(
src
,
srcData
,
srcMode
,
nComps
,
srcAlpha
,
srcWidth
,
srcHeight
,
scaledWidth
,
scaledHeight
,
dest
);
}
}
else
{
if
(
scaledWidth
<
srcWidth
)
{
scaleImageYuXd
(
src
,
srcData
,
srcMode
,
nComps
,
srcAlpha
,
srcWidth
,
srcHeight
,
scaledWidth
,
scaledHeight
,
dest
);
scaleImageYu
p
Xd
own
(
src
,
srcData
,
srcMode
,
nComps
,
srcAlpha
,
srcWidth
,
srcHeight
,
scaledWidth
,
scaledHeight
,
dest
);
}
else
{
if
(
!
tilingPattern
&&
isImageInterpolationRequired
(
srcWidth
,
srcHeight
,
scaledWidth
,
scaledHeight
,
interpolate
))
{
scaleImageYuXuBilinear
(
src
,
srcData
,
srcMode
,
nComps
,
srcAlpha
,
srcWidth
,
srcHeight
,
scaledWidth
,
scaledHeight
,
dest
);
scaleImageYu
p
Xu
p
Bilinear
(
src
,
srcData
,
srcMode
,
nComps
,
srcAlpha
,
srcWidth
,
srcHeight
,
scaledWidth
,
scaledHeight
,
dest
);
}
else
{
scaleImageYuXu
(
src
,
srcData
,
srcMode
,
nComps
,
srcAlpha
,
srcWidth
,
srcHeight
,
scaledWidth
,
scaledHeight
,
dest
);
scaleImageYu
p
Xu
p
(
src
,
srcData
,
srcMode
,
nComps
,
srcAlpha
,
srcWidth
,
srcHeight
,
scaledWidth
,
scaledHeight
,
dest
);
}
}
}
...
...
@@ -3946,7 +3946,7 @@ SplashBitmap *Splash::scaleImage(SplashImageSource src, void *srcData, SplashCol
return
dest
;
}
void
Splash
::
scaleImageYd
Xd
(
SplashImageSource
src
,
void
*
srcData
,
SplashColorMode
srcMode
,
int
nComps
,
bool
srcAlpha
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
)
void
Splash
::
scaleImageYd
ownXdown
(
SplashImageSource
src
,
void
*
srcData
,
SplashColorMode
srcMode
,
int
nComps
,
bool
srcAlpha
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
)
{
unsigned
char
*
lineBuf
,
*
alphaLineBuf
;
unsigned
int
*
pixBuf
,
*
alphaPixBuf
;
...
...
@@ -4181,7 +4181,7 @@ void Splash::scaleImageYdXd(SplashImageSource src, void *srcData, SplashColorMod
gfree
(
lineBuf
);
}
void
Splash
::
scaleImageYdXu
(
SplashImageSource
src
,
void
*
srcData
,
SplashColorMode
srcMode
,
int
nComps
,
bool
srcAlpha
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
)
void
Splash
::
scaleImageYd
own
Xu
p
(
SplashImageSource
src
,
void
*
srcData
,
SplashColorMode
srcMode
,
int
nComps
,
bool
srcAlpha
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
)
{
unsigned
char
*
lineBuf
,
*
alphaLineBuf
;
unsigned
int
*
pixBuf
,
*
alphaPixBuf
;
...
...
@@ -4202,7 +4202,7 @@ void Splash::scaleImageYdXu(SplashImageSource src, void *srcData, SplashColorMod
// allocate buffers
pixBuf
=
(
unsigned
int
*
)
gmallocn_checkoverflow
(
srcWidth
,
nComps
*
sizeof
(
int
));
if
(
unlikely
(
!
pixBuf
))
{
error
(
errInternal
,
-
1
,
"Splash::scaleImageYdXu. Couldn't allocate pixBuf memory"
);
error
(
errInternal
,
-
1
,
"Splash::scaleImageYd
own
Xu
p
. Couldn't allocate pixBuf memory"
);
return
;
}
lineBuf
=
(
unsigned
char
*
)
gmallocn
(
srcWidth
,
nComps
);
...
...
@@ -4330,7 +4330,7 @@ void Splash::scaleImageYdXu(SplashImageSource src, void *srcData, SplashColorMod
gfree
(
lineBuf
);
}
void
Splash
::
scaleImageYuXd
(
SplashImageSource
src
,
void
*
srcData
,
SplashColorMode
srcMode
,
int
nComps
,
bool
srcAlpha
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
)
void
Splash
::
scaleImageYu
p
Xd
own
(
SplashImageSource
src
,
void
*
srcData
,
SplashColorMode
srcMode
,
int
nComps
,
bool
srcAlpha
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
)
{
unsigned
char
*
lineBuf
,
*
alphaLineBuf
;
unsigned
int
pix
[
splashMaxColorComps
];
...
...
@@ -4487,7 +4487,7 @@ void Splash::scaleImageYuXd(SplashImageSource src, void *srcData, SplashColorMod
gfree
(
lineBuf
);
}
void
Splash
::
scaleImageYuXu
(
SplashImageSource
src
,
void
*
srcData
,
SplashColorMode
srcMode
,
int
nComps
,
bool
srcAlpha
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
)
void
Splash
::
scaleImageYu
p
Xu
p
(
SplashImageSource
src
,
void
*
srcData
,
SplashColorMode
srcMode
,
int
nComps
,
bool
srcAlpha
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
)
{
unsigned
char
*
lineBuf
,
*
alphaLineBuf
;
unsigned
int
pix
[
splashMaxColorComps
];
...
...
@@ -4663,7 +4663,7 @@ static void expandRow(unsigned char *srcBuf, unsigned char *dstBuf, int srcWidth
}
// Scale up image using bilinear interpolation
void
Splash
::
scaleImageYuXuBilinear
(
SplashImageSource
src
,
void
*
srcData
,
SplashColorMode
srcMode
,
int
nComps
,
bool
srcAlpha
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
)
void
Splash
::
scaleImageYu
p
Xu
p
Bilinear
(
SplashImageSource
src
,
void
*
srcData
,
SplashColorMode
srcMode
,
int
nComps
,
bool
srcAlpha
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
)
{
unsigned
char
*
srcBuf
,
*
lineBuf1
,
*
lineBuf2
,
*
alphaSrcBuf
,
*
alphaLineBuf1
,
*
alphaLineBuf2
;
unsigned
int
pix
[
splashMaxColorComps
];
...
...
splash/Splash.h
View file @
6e07b84a
...
...
@@ -291,19 +291,19 @@ private:
void
fillGlyph2
(
int
x0
,
int
y0
,
SplashGlyphBitmap
*
glyph
,
bool
noclip
);
void
arbitraryTransformMask
(
SplashImageMaskSource
src
,
void
*
srcData
,
int
srcWidth
,
int
srcHeight
,
SplashCoord
*
mat
,
bool
glyphMode
);
SplashBitmap
*
scaleMask
(
SplashImageMaskSource
src
,
void
*
srcData
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
);
void
scaleMaskYd
Xd
(
SplashImageMaskSource
src
,
void
*
srcData
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
);
void
scaleMaskYdXu
(
SplashImageMaskSource
src
,
void
*
srcData
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
);
void
scaleMaskYuXd
(
SplashImageMaskSource
src
,
void
*
srcData
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
);
void
scaleMaskYuXu
(
SplashImageMaskSource
src
,
void
*
srcData
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
);
void
scaleMaskYd
ownXdown
(
SplashImageMaskSource
src
,
void
*
srcData
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
);
void
scaleMaskYd
own
Xu
p
(
SplashImageMaskSource
src
,
void
*
srcData
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
);
void
scaleMaskYu
p
Xd
own
(
SplashImageMaskSource
src
,
void
*
srcData
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
);
void
scaleMaskYu
p
Xu
p
(
SplashImageMaskSource
src
,
void
*
srcData
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
);
void
blitMask
(
SplashBitmap
*
src
,
int
xDest
,
int
yDest
,
SplashClipResult
clipRes
);
SplashError
arbitraryTransformImage
(
SplashImageSource
src
,
SplashICCTransform
tf
,
void
*
srcData
,
SplashColorMode
srcMode
,
int
nComps
,
bool
srcAlpha
,
int
srcWidth
,
int
srcHeight
,
SplashCoord
*
mat
,
bool
interpolate
,
bool
tilingPattern
=
false
);
SplashBitmap
*
scaleImage
(
SplashImageSource
src
,
void
*
srcData
,
SplashColorMode
srcMode
,
int
nComps
,
bool
srcAlpha
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
bool
interpolate
,
bool
tilingPattern
=
false
);
void
scaleImageYd
Xd
(
SplashImageSource
src
,
void
*
srcData
,
SplashColorMode
srcMode
,
int
nComps
,
bool
srcAlpha
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
);
void
scaleImageYdXu
(
SplashImageSource
src
,
void
*
srcData
,
SplashColorMode
srcMode
,
int
nComps
,
bool
srcAlpha
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
);
void
scaleImageYuXd
(
SplashImageSource
src
,
void
*
srcData
,
SplashColorMode
srcMode
,
int
nComps
,
bool
srcAlpha
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
);
void
scaleImageYuXu
(
SplashImageSource
src
,
void
*
srcData
,
SplashColorMode
srcMode
,
int
nComps
,
bool
srcAlpha
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
);
void
scaleImageYuXuBilinear
(
SplashImageSource
src
,
void
*
srcData
,
SplashColorMode
srcMode
,
int
nComps
,
bool
srcAlpha
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
);
void
scaleImageYd
ownXdown
(
SplashImageSource
src
,
void
*
srcData
,
SplashColorMode
srcMode
,
int
nComps
,
bool
srcAlpha
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
);
void
scaleImageYd
own
Xu
p
(
SplashImageSource
src
,
void
*
srcData
,
SplashColorMode
srcMode
,
int
nComps
,
bool
srcAlpha
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
);
void
scaleImageYu
p
Xd
own
(
SplashImageSource
src
,
void
*
srcData
,
SplashColorMode
srcMode
,
int
nComps
,
bool
srcAlpha
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
);
void
scaleImageYu
p
Xu
p
(
SplashImageSource
src
,
void
*
srcData
,
SplashColorMode
srcMode
,
int
nComps
,
bool
srcAlpha
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
);
void
scaleImageYu
p
Xu
p
Bilinear
(
SplashImageSource
src
,
void
*
srcData
,
SplashColorMode
srcMode
,
int
nComps
,
bool
srcAlpha
,
int
srcWidth
,
int
srcHeight
,
int
scaledWidth
,
int
scaledHeight
,
SplashBitmap
*
dest
);
void
vertFlipImage
(
SplashBitmap
*
img
,
int
width
,
int
height
,
int
nComps
);
void
blitImage
(
SplashBitmap
*
src
,
bool
srcAlpha
,
int
xDest
,
int
yDest
,
SplashClipResult
clipRes
);
void
blitImageClipped
(
SplashBitmap
*
src
,
bool
srcAlpha
,
int
xSrc
,
int
ySrc
,
int
xDest
,
int
yDest
,
int
w
,
int
h
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment