Assets overhaul + demon list + several misc updates

I held back on pushing this since I wanted to wait for Rob to unblock level downloading, but it's probably gonna be a while since it's (likely) related to an unlisted level exploit

Anyways I totally overhauled how the assets work, and you can also browse through all the files by going to gdbrowser.com/assets, because why not

I also made many other changes and fixes during this timespan including the addition of the demon list, optimized custom lists along with a ?page param, and other random stuff that needed touching up

- Removed Herobrine
This commit is contained in:
GDColon 2021-01-04 10:21:58 -05:00
parent ceb05e50f6
commit ea5c732c75
638 changed files with 311 additions and 267 deletions

View file

@ -9,12 +9,10 @@ I mean, sure. Why not.
Just make sure to give credit, obviously. Via the bottom of the homepage, the credits button, or maybe even both if you're feeling extra nice. Just make sure to give credit, obviously. Via the bottom of the homepage, the credits button, or maybe even both if you're feeling extra nice.
Obviously, GDBrowser isn't perfect when it comes to GD private servers, since both requests and responses might be a bit different. Or a LOT, as I learned. Obviously, GDBrowser isn't perfect when it comes to GD private servers, since both requests and responses might be a bit different. Or a LOT, as I learned. (seriously what's with that?)
You can also check out `settings.js` to tweak some additional settings (mainly GDPS related) such as whether to cache things or if timestamps should end with "ago" You can also check out `settings.js` to tweak some additional settings (mainly GDPS related) such as whether to cache things or if timestamps should end with "ago"
GDPS compatibility is still a HUGE work in progress, so pull requests would be greatly appreciated if you manage to make any improvements!
# Folders # Folders
GDBrowser has a lot of folders. I like to keep things neat. GDBrowser has a lot of folders. I like to keep things neat.
@ -33,24 +31,16 @@ Assets! Assets everywhere!
All the GD stuff was ripped straight from the GD spritesheets via [Absolute's texture splitter hack](https://youtu.be/pYQgIyNhow8). If you want a nice categorized version, [I've done all the dirty work for you.](https://www.mediafire.com/file/4d99bw1zhwcl507/textures.zip/file) All the GD stuff was ripped straight from the GD spritesheets via [Absolute's texture splitter hack](https://youtu.be/pYQgIyNhow8). If you want a nice categorized version, [I've done all the dirty work for you.](https://www.mediafire.com/file/4d99bw1zhwcl507/textures.zip/file)
/blocks, /objects and /initial are used for the analysis page. I just put them in seperate folders for extra neatness. I'd explain what's in all the subfolders but it's pretty obvious. I tried my best to organize everything nicely.
/gdfaces holds all the difficulty faces
/css has the CSS stuff. They're in a special folder so browsers won't cache them (in case of updates)
Figure out what /gauntlets and /iconkitbuttons have.
## Classes ## Classes
What's a class you ask? I still have no idea. What's a class you ask? Good question.
Seriously, these things are *confusing*
I guess the best way to put it is uh... super fancy functions??? I guess the best way to put it is uh... super fancy functions???
Level.js parses the server's disgusting response and sends back a nice object with all the level info Level.js parses the server's disgusting response and sends back a nice object with all the level info
XOR.js encrypts/decrypts stuff like GD passwords. I stole the code from somewhere so uh if you wrote it, please don't hunt me down XOR.js encrypts/decrypts stuff like GD passwords
## HTML ## HTML
The HTML files! Nothing too fancy, since it can all be seen directly from gdbrowser. Note that profile.html and level.html have [[VARIABLES]] (name, id, etc) replaced by the server when they're sent. The HTML files! Nothing too fancy, since it can all be seen directly from gdbrowser. Note that profile.html and level.html have [[VARIABLES]] (name, id, etc) replaced by the server when they're sent.
@ -64,8 +54,6 @@ parsePlist.js reads GJ_GameSheet02-uhd.plist and magically transforms it into ga
forms.json is a list of the different icon forms, their ingame filenames, and their index in responses from the GD servers forms.json is a list of the different icon forms, their ingame filenames, and their index in responses from the GD servers
/iconkit is a folder for the little grey preview icons on the icon kit
## Misc ## Misc
Inevitable misc folder Inevitable misc folder
@ -77,22 +65,28 @@ colorProperties.json - Color channel cheatsheet
initialProperties.json - Level settings cheatsheet initialProperties.json - Level settings cheatsheet
objectProperties.json - Object property cheatsheet. Low budget version of [AlFas' one](https://github.com/gd-edit/GDAPI/blob/5a338c317b10ba0cb30d6175360c997a8a72502f/GDAPI/GDAPI/Enumerations/GeometryDash/ObjectParameter.cs) objectProperties.json - Object property cheatsheet. Low budget version of [AlFas' one](https://github.com/AlFasGD/GDAPI/blob/master/GDAPI/GDAPI/Enumerations/GeometryDash/ObjectProperty.cs)
objects.json - IDs for portals, orbs, triggers, and misc stuff objects.json - IDs for portals, orbs, triggers, and misc stuff
**Not for level analysis** **Not for level analysis**
colors.json - List of icon colors in RGB format
credits.json - Credits! (shown on the homepage) credits.json - Credits! (shown on the homepage)
dragscroll.js - Used on several pages for drag scrolling
level.json - An array of the official GD tracks, and also difficulty face stuff for level searching level.json - An array of the official GD tracks, and also difficulty face stuff for level searching
sampleIcons.json - A pool of icons, one of which will randomly appear when visiting the icon kit. Syntax is [Name, ID, Col1, Col2, Glow],
secretStuff.json - GJP goes here, needed for level leaderboards. Not included in the repo for obvious reasons secretStuff.json - GJP goes here, needed for level leaderboards. Not included in the repo for obvious reasons
settings.js - Tweak small settings here, mainly for local use or GDPS'es settings.js - Tweak small settings here, mainly for local use or GDPS'es
sizecheck.js - Excecuted on most pages, used for the 'page isn't wide enough' message, back button, and a few other things sizecheck.js - Excecuted on most pages. Used for the 'page isn't wide enough' message, back button, and a few other things
--- ---
happy painting and god bless. happy gdbrowsing and god bless.

View file

@ -97,10 +97,10 @@ module.exports = async (app, req, res, api, ID, analyze) => {
} }
else if (level.difficulty == "Extreme Demon") { else if (level.difficulty == "Extreme Demon") {
request.get('https://www.pointercrate.com/api/v1/demons/?name=' + level.name.trim(), function (err, resp, demonList) { request.get('https://www.pointercrate.com/api/v2/demons/?name=' + level.name.trim(), function (err, resp, demonList) {
if (err) return sendLevel() if (err) return sendLevel()
let demon = JSON.parse(demonList) let demon = JSON.parse(demonList)
if (demon[0] && demon[0].position <= 150) level.demonList = demon[0].position if (demon[0] && demon[0].position) level.demonList = demon[0].position
return sendLevel() return sendLevel()
}) })
} }

View file

@ -69,10 +69,10 @@ module.exports = async (app, req, res, api, analyze) => {
} }
if (level.difficulty == "Extreme Demon") { if (level.difficulty == "Extreme Demon") {
request.get('http://www.pointercrate.com/api/v1/demons/?name=' + level.name.trim(), function (err, resp, demonList) { request.get('http://www.pointercrate.com/api/v2/demons/?name=' + level.name.trim(), function (err, resp, demonList) {
if (err) return sendLevel() if (err) return sendLevel()
let demon = JSON.parse(demonList) let demon = JSON.parse(demonList)
if (demon[0] && demon[0].position <= 150) level.demonList = demon[0].position if (demon[0] && demon[0].position) level.demonList = demon[0].position
return sendLevel() return sendLevel()
}) })
} }

View file

@ -1,11 +1,23 @@
const request = require('request') const request = require('request')
const levels = require('../misc/level.json').music const levels = require('../misc/level.json').music
const Level = require('../classes/Level.js') const Level = require('../classes/Level.js')
let demonList = {list: [], lastUpdated: 0}
module.exports = async (app, req, res) => { module.exports = async (app, req, res) => {
if (app.offline) return res.send("-1") if (app.offline) return res.send("-1")
let demonMode = req.query.hasOwnProperty("demonlist") || req.query.hasOwnProperty("demonList") || req.query.type == "demonlist" || req.query.type == "demonList"
if (demonMode) {
if (!demonList.list.length || demonList.lastUpdated + 600000 < Date.now()) { // 10 minute cache
return request.get('http://www.pointercrate.com/api/v2/demons/listed/?limit=100', function (err, resp, list) {
if (err) return res.send("-1")
demonList = {list: JSON.parse(list).map(x => x.level_id), lastUpdated: Date.now()}
return app.run.search(app, req, res)
})
}
}
let amount = 10; let amount = 10;
let count = +req.query.count let count = +req.query.count
if (count && count > 0) { if (count && count > 0) {
@ -37,22 +49,24 @@ module.exports = async (app, req, res) => {
count: amount count: amount
} }
if (req.query.gauntlet || req.query.hasOwnProperty("mappack") || req.query.hasOwnProperty("list") || req.query.type == "saved") filters.type = 10
if (req.query.songID && filters.customSong == 0 && levels.find(x => req.query.songID.toLowerCase() == x[0].toLowerCase())) { if (req.query.songID && filters.customSong == 0 && levels.find(x => req.query.songID.toLowerCase() == x[0].toLowerCase())) {
filters.song = levels.findIndex(x => req.query.songID.toLowerCase() == x[0].toLowerCase()) filters.song = levels.findIndex(x => req.query.songID.toLowerCase() == x[0].toLowerCase())
} }
if (req.query.type) { if (req.query.type) {
let filterCheck = req.query.type.toLowerCase() let filterCheck = req.query.type.toLowerCase()
if (filterCheck == 'mostdownloaded') filters.type = 1 switch(filterCheck) {
if (filterCheck == 'mostliked') filters.type = 2 case 'mostdownloaded': filters.type = 1; break;
if (filterCheck == 'trending') filters.type = 3 case 'mostliked': filters.type = 2; break;
if (filterCheck == 'recent') filters.type = 4 case 'trending': filters.type = 3; break;
if (filterCheck == 'featured') filters.type = 6 case 'recent': filters.type = 4; break;
if (filterCheck == 'magic') filters.type = 7 case 'featured': filters.type = 6; break;
if (filterCheck == 'awarded' || filterCheck == 'starred') filters.type = 11 case 'magic': filters.type = 7; break;
if (filterCheck == 'halloffame' || filterCheck == 'hof') filters.type = 16 case 'awarded': filters.type = 11; break;
case 'starred': filters.type = 11; break;
case 'halloffame': filters.type = 16; break;
case 'hof': filters.type = 16; break;
}
} }
if (req.query.hasOwnProperty("user")) { if (req.query.hasOwnProperty("user")) {
@ -66,6 +80,15 @@ module.exports = async (app, req, res) => {
if (req.params.text == "*") delete filters.str if (req.params.text == "*") delete filters.str
let listSize = 10
if (demonMode || req.query.gauntlet || ["mappack", "list", "saved"].some(x => req.query.hasOwnProperty(x))) {
filters.type = 10
filters.str = demonMode ? demonList.list : filters.str.split(",")
listSize = filters.str.length
filters.str = filters.str.slice(filters.page*amount, filters.page*amount + amount).join()
filters.page = 0
}
request.post(app.endpoint + 'getGJLevels21.php', req.gdParams(filters), async function(err, resp, body) { request.post(app.endpoint + 'getGJLevels21.php', req.gdParams(filters), async function(err, resp, body) {
if (err || !body || body == '-1' || body.startsWith("<!")) return res.send("-1") if (err || !body || body == '-1' || body.startsWith("<!")) return res.send("-1")
@ -118,8 +141,8 @@ module.exports = async (app, req, res) => {
} }
else if (filters.type == 10) { // custom page stuff else if (filters.type == 10) { // custom page stuff
level.results = levelArray.length level.results = listSize
level.pages = amount ? +Math.ceil(levelArray.length / amount) : 1 level.pages = +Math.ceil(listSize / (amount || 10))
} }
else { // normal page stuff else { // normal page stuff

View file

@ -1,5 +1,5 @@
@font-face { font-family: Pusab; src: url('./../assets/Pusab.ttf') } @font-face { font-family: Pusab; src: url('../../assets/Pusab.ttf') }
@font-face { font-family: Kaine; src: url('./../assets/boomlings/Kaine.ttf') } @font-face { font-family: Kaine; src: url('../../assets/boomlings/Kaine.ttf') }
body { body {
margin: 0; margin: 0;
@ -139,7 +139,7 @@ h2 {
#borderbox { #borderbox {
border: 1.6vh solid; border: 1.6vh solid;
border-image: url('./../assets/boomlings/border.png') 10% round; border-image: url('../../assets/boomlings/border.png') 10% round;
border-radius: 3vh; border-radius: 3vh;
width: 110vh; width: 110vh;
height: 75%; height: 75%;
@ -179,7 +179,7 @@ h2 {
border: 2.5vh solid transparent; border: 2.5vh solid transparent;
border-radius: 3vh; border-radius: 3vh;
background-color: #995533; background-color: #995533;
border-image: url('./../assets/brownbox.png') 10% round; border-image: url('../../assets/brownbox.png') 10% round;
} }
@-moz-keyframes spin { @-moz-keyframes spin {

View file

@ -1,4 +1,4 @@
@font-face {font-family: Pusab; src: url('./../assets/Pusab.ttf')} @font-face {font-family: Pusab; src: url('../../assets/Pusab.ttf')}
body { body {
margin: 0; margin: 0;
@ -118,7 +118,7 @@ img, .noSelect {
cursor: default; cursor: default;
} }
.outOfOrder { .outOfOrder, .darkDiff {
filter: brightness(50%); filter: brightness(50%);
} }
@ -236,7 +236,7 @@ input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:foc
.gdcheckbox { .gdcheckbox {
vertical-align: middle; vertical-align: middle;
display: inline-block; display: inline-block;
background-image: url(../assets/check-off.png); background-image: url(../../assets/check-off.png);
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: contain; background-size: contain;
padding-right: 20%; padding-right: 20%;
@ -244,7 +244,7 @@ input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:foc
} }
input[type=checkbox]:checked + label.gdcheckbox { input[type=checkbox]:checked + label.gdcheckbox {
background-image: url(../assets/check-on.png); background-image: url(../../assets/check-on.png);
} }
::placeholder { ::placeholder {
@ -315,14 +315,14 @@ input::-webkit-inner-spin-button {
border: 2.5vh solid transparent; border: 2.5vh solid transparent;
border-radius: 3vh; border-radius: 3vh;
background-color: #995533; background-color: #995533;
border-image: url('./../assets/brownbox.png') 10% round; border-image: url('../../assets/brownbox.png') 10% round;
} }
.blueBox { .blueBox {
border: 2.5vh solid transparent; border: 2.5vh solid transparent;
border-radius: 3vh; border-radius: 3vh;
background-color: #334499; background-color: #334499;
border-image: url('./../assets/bluebox.png') 10% round; border-image: url('../../assets/bluebox.png') 10% round;
} }
.fancybox { .fancybox {
@ -331,7 +331,7 @@ input::-webkit-inner-spin-button {
border: 3.5vh solid transparent; border: 3.5vh solid transparent;
border-radius: 3vh; border-radius: 3vh;
background-color: #001931; background-color: #001931;
border-image: url('./../assets/fancybox.png') 10% stretch; border-image: url('../../assets/fancybox.png') 10% stretch;
border-image-slice: 65; border-image-slice: 65;
} }
@ -341,14 +341,14 @@ input::-webkit-inner-spin-button {
.epicbox { .epicbox {
border: 3.5vh solid transparent; border: 3.5vh solid transparent;
border-image: url('./../assets/epicbox.png') 20% stretch; border-image: url('../../assets/epicbox.png') 20% stretch;
border-image-slice: 85 77; border-image-slice: 85 77;
border-image-width: 9.5vh; border-image-width: 9.5vh;
} }
.leaderboardBox { .leaderboardBox {
border: 3.5vh solid transparent; border: 3.5vh solid transparent;
border-image: url('./../assets/leaderboardbox.png') 20% stretch; border-image: url('../../assets/leaderboardbox.png') 20% stretch;
border-image-slice: 85 77; border-image-slice: 85 77;
border-image-width: 9.5vh; border-image-width: 9.5vh;
} }
@ -387,6 +387,7 @@ input::-webkit-inner-spin-button {
margin-left: 0.8%; margin-left: 0.8%;
margin-right: 0.8%; margin-right: 0.8%;
filter: brightness(50%); filter: brightness(50%);
text-align: center;
} }
.diffDiv img { .diffDiv img {
@ -394,13 +395,13 @@ input::-webkit-inner-spin-button {
} }
.demonDiff { .demonDiff {
margin-left: 2%; margin-left: 1.93%;
margin-right: 2%; margin-right: 1.93%;
text-align: center; text-align: center;
} }
.demonDiff .smallTextWoo { .demonDiff .smallTextWoo {
margin-top: 3%; margin-top: 3.5%;
font-size: 2.7vh; font-size: 2.7vh;
} }

View file

@ -1,5 +1,5 @@
@import url('https://fonts.googleapis.com/css?family=Roboto'); @import url('https://fonts.googleapis.com/css?family=Roboto');
@font-face {font-family: Pusab; src: url('./../assets/Pusab.ttf')} @font-face {font-family: Pusab; src: url('../../assets/Pusab.ttf')}
.gdButton { .gdButton {
cursor: pointer; cursor: pointer;
@ -291,7 +291,7 @@ input:focus, select:focus, textarea:focus, button:focus {
} }
.iconSelected { .iconSelected {
border-image: url('./../assets/select.png') 10 stretch !important; border-image: url('../../assets/select.png') 10 stretch !important;
} }
.iconTabButton, .glowToggle, .copyForm { .iconTabButton, .glowToggle, .copyForm {
@ -418,7 +418,7 @@ input:focus, select:focus, textarea:focus, button:focus {
border: 17px solid transparent; border: 17px solid transparent;
border-radius: 25px; border-radius: 25px;
background-color: #995533; background-color: #995533;
border-image: url('./../assets/brownbox.png') 10% round; border-image: url('../../assets/brownbox.png') 10% round;
} }
.xButton { .xButton {
@ -455,7 +455,7 @@ input[type=checkbox] {
.gdcheckbox { .gdcheckbox {
vertical-align: middle; vertical-align: middle;
display: inline-block; display: inline-block;
background-image: url(../assets/check-off.png); background-image: url(../../assets/check-off.png);
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: contain; background-size: contain;
padding-right: 40px; padding-right: 40px;
@ -465,7 +465,7 @@ input[type=checkbox] {
} }
input[type=checkbox]:checked + label.gdcheckbox { input[type=checkbox]:checked + label.gdcheckbox {
background-image: url(../assets/check-on.png); background-image: url(../../assets/check-on.png);
} }
.bounce { .bounce {

BIN
assets/deatheffects/0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View file

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View file

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View file

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View file

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View file

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View file

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View file

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View file

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View file

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View file

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View file

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View file

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View file

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View file

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View file

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View file

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View file

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View file

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View file

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View file

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View file

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View file

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 33 KiB

View file

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View file

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

View file

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View file

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View file

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View file

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 33 KiB

View file

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View file

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View file

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View file

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View file

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View file

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View file

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 69 KiB

View file

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 53 KiB

View file

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

View file

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

View file

Before

Width:  |  Height:  |  Size: 4 KiB

After

Width:  |  Height:  |  Size: 4 KiB

View file

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

View file

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

View file

Before

Width:  |  Height:  |  Size: 822 B

After

Width:  |  Height:  |  Size: 822 B

View file

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

View file

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

View file

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

View file

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

View file

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

View file

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

View file

Before

Width:  |  Height:  |  Size: 9.7 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

View file

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

View file

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

View file

Before

Width:  |  Height:  |  Size: 9 KiB

After

Width:  |  Height:  |  Size: 9 KiB

View file

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

View file

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

View file

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

View file

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

View file

Before

Width:  |  Height:  |  Size: 9.6 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

View file

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View file

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

View file

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View file

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View file

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

View file

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View file

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View file

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

View file

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View file

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View file

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View file

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View file

Before

Width:  |  Height:  |  Size: 6 KiB

After

Width:  |  Height:  |  Size: 6 KiB

View file

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View file

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

View file

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View file

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

View file

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

View file

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

View file

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

View file

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

View file

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

View file

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

View file

Before

Width:  |  Height:  |  Size: 7 KiB

After

Width:  |  Height:  |  Size: 7 KiB

View file

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

View file

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

View file

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

View file

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

View file

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

Some files were not shown because too many files have changed in this diff Show more