Compare commits
231 Commits
revert-213
...
master
Author | SHA1 | Date |
---|---|---|
|
eaa33fc8f3 | 3 years ago |
|
0669dafde5 | 3 years ago |
|
78acfeed42 | 3 years ago |
|
f9e9a547bd | 3 years ago |
|
02aa8ce840 | 3 years ago |
|
6c31dcce1d | 3 years ago |
|
7f3ecf5e1e | 3 years ago |
|
287ee85067 | 3 years ago |
|
b7a5b39b1f | 3 years ago |
|
6fcd982b46 | 3 years ago |
|
5c4ee8d06a | 3 years ago |
|
cb654525e0 | 3 years ago |
|
1eebe2445f | 4 years ago |
|
4a79697487 | 4 years ago |
|
84a8f20bbc | 4 years ago |
|
04413c81eb | 4 years ago |
|
1605ec5ebd | 4 years ago |
|
6f4f33d53d | 4 years ago |
|
f3fc3c7cf0 | 4 years ago |
|
89d0560ed3 | 4 years ago |
|
cc39ed6980 | 4 years ago |
|
58f53323f3 | 4 years ago |
|
82a44e93fc | 4 years ago |
|
c91ef575e3 | 4 years ago |
|
5e94ebf0e9 | 4 years ago |
|
c26845662c | 4 years ago |
|
008efd5f08 | 4 years ago |
|
4f0c6e9bc1 | 4 years ago |
|
e18ff5e003 | 4 years ago |
|
611235aee6 | 5 years ago |
|
a8e5a42e51 | 5 years ago |
|
2037dbafe5 | 5 years ago |
|
5eed7f02fd | 5 years ago |
|
58b5975912 | 5 years ago |
|
f8610047eb | 5 years ago |
|
072997e59c | 5 years ago |
|
4127e0a707 | 5 years ago |
|
e14cfdff86 | 5 years ago |
|
82f70c0c89 | 5 years ago |
|
120512e386 | 5 years ago |
|
dcaa45e86f | 5 years ago |
|
95d04aa76e | 5 years ago |
|
025a8fab68 | 5 years ago |
|
18ae907bd0 | 5 years ago |
|
155a7fd2a2 | 5 years ago |
|
6e1220fbae | 5 years ago |
|
c0293be615 | 5 years ago |
|
03e0c3be2d | 5 years ago |
|
429721393e | 5 years ago |
|
813c0d4628 | 5 years ago |
|
3048d9d28c | 5 years ago |
|
eb88f5d8fc | 5 years ago |
|
d4b89a48ac | 5 years ago |
|
02c0c549ce | 5 years ago |
|
ef2a2a9f15 | 5 years ago |
|
9a5e686bb0 | 5 years ago |
|
01265fdbae | 5 years ago |
|
02c8bacb2a | 5 years ago |
|
c00109417f | 5 years ago |
|
e01453b6a0 | 5 years ago |
|
d748323142 | 5 years ago |
|
7261dd10c6 | 5 years ago |
|
10f577549a | 5 years ago |
|
bec9bae9b9 | 5 years ago |
|
151caa037d | 5 years ago |
|
2185f32dd8 | 5 years ago |
|
168eacb2fe | 5 years ago |
|
9166c49aae | 5 years ago |
|
3326447d0f | 5 years ago |
|
313b29cd00 | 5 years ago |
|
7a3e4b1e6a | 5 years ago |
|
2ae71facd5 | 5 years ago |
|
4dd81ccf74 | 5 years ago |
|
3937f43ffe | 5 years ago |
|
fb1ab0dae5 | 5 years ago |
|
66f16e465d | 5 years ago |
|
7d63ba374e | 5 years ago |
|
e4f6746b28 | 5 years ago |
|
634989427d | 5 years ago |
|
14ab68acd7 | 5 years ago |
|
7947cc20dd | 5 years ago |
|
78e86721f4 | 5 years ago |
|
1a5ff9c8d1 | 5 years ago |
|
55351f6f72 | 5 years ago |
|
83e7fd38d6 | 5 years ago |
|
ad0f70ab34 | 5 years ago |
|
54747e8719 | 5 years ago |
|
c309c0f385 | 5 years ago |
|
906c997ccb | 5 years ago |
|
18e5794724 | 6 years ago |
|
30d93831df | 6 years ago |
|
48e4e9f627 | 6 years ago |
|
748b1857d8 | 6 years ago |
|
51e5ad8858 | 6 years ago |
|
4b8962c753 | 6 years ago |
|
4ad7edc4ea | 6 years ago |
|
44cb534e18 | 6 years ago |
|
f3a064a237 | 6 years ago |
|
18e1ed0809 | 6 years ago |
|
7cf83a695f | 6 years ago |
|
8992c2cdda | 6 years ago |
|
1f5f966e06 | 6 years ago |
|
1874c3b900 | 6 years ago |
|
b73c7f0444 | 6 years ago |
|
0aebff3cbb | 6 years ago |
|
a5f158ecad | 6 years ago |
|
e1344ea05b | 6 years ago |
|
0ae49f55fa | 6 years ago |
|
fccf9646ac | 6 years ago |
|
ecbea2e944 | 6 years ago |
|
8456831acc | 6 years ago |
|
28080c10bc | 6 years ago |
|
55d957d5af | 6 years ago |
|
df66ae160a | 6 years ago |
|
7384c17c9f | 6 years ago |
|
1723b2472f | 6 years ago |
|
5454c07f46 | 6 years ago |
|
8226efaf30 | 6 years ago |
|
7654d4ac47 | 6 years ago |
|
2de8e8e41b | 6 years ago |
|
41977ea554 | 6 years ago |
|
983b489d52 | 6 years ago |
|
fbbb1b73eb | 6 years ago |
|
76939cbc3e | 6 years ago |
|
f3b2c943ac | 6 years ago |
|
ef7afecb80 | 6 years ago |
|
42be7f3a1f | 6 years ago |
|
516fa1c1b7 | 6 years ago |
|
5658ee5c33 | 6 years ago |
|
e82a945a72 | 6 years ago |
|
8d509c4bca | 6 years ago |
|
a5716b76c3 | 6 years ago |
|
0b8306d6a5 | 6 years ago |
|
40fca201e8 | 6 years ago |
|
51b4be02d6 | 6 years ago |
|
90f93202c4 | 6 years ago |
|
4e7ebdf175 | 6 years ago |
|
2af377c60c | 6 years ago |
|
8687b2486d | 6 years ago |
|
2bdd4ed07e | 6 years ago |
|
ef015d60c6 | 6 years ago |
|
d619a66a99 | 6 years ago |
|
e8c664be1c | 6 years ago |
|
9b344beb46 | 6 years ago |
|
aa1d051b8f | 6 years ago |
|
6fd77c45e8 | 6 years ago |
|
b191445926 | 6 years ago |
|
6b1fb166a3 | 6 years ago |
|
810f9b9688 | 6 years ago |
|
ca7693bf84 | 6 years ago |
|
c725d1984b | 6 years ago |
|
c61e3b7475 | 6 years ago |
|
8a53e4fac5 | 6 years ago |
|
6f382d9663 | 6 years ago |
|
2c8d7452c5 | 6 years ago |
|
e27fc8d83f | 6 years ago |
|
3f3b9e66ee | 6 years ago |
|
90ccdc27cc | 6 years ago |
|
67164bab1e | 6 years ago |
|
956ff0377e | 6 years ago |
|
7752c37a01 | 6 years ago |
|
819c625f93 | 6 years ago |
|
086ceba908 | 6 years ago |
|
fe9056105a | 6 years ago |
|
dbeab3f95c | 6 years ago |
|
0446c9cae3 | 6 years ago |
|
4b0c54f7fc | 6 years ago |
|
e00c86ef57 | 6 years ago |
|
3b8dbfef8b | 6 years ago |
|
587947f867 | 6 years ago |
|
6dd7984e6d | 6 years ago |
|
4877920787 | 6 years ago |
|
8f30ec7b8d | 6 years ago |
|
e3542d411d | 6 years ago |
|
9ba564c713 | 6 years ago |
|
67b50b54ca | 6 years ago |
|
d4d7c4b49e | 6 years ago |
|
874d79e76c | 6 years ago |
|
e664792072 | 6 years ago |
|
c961e594a5 | 6 years ago |
|
93580405fc | 6 years ago |
|
8e19c59170 | 6 years ago |
|
7bdd0a0a97 | 6 years ago |
|
c74bb72c7d | 6 years ago |
|
e0917cb1d0 | 6 years ago |
|
b1adbc4d25 | 6 years ago |
|
3a4e318a4f | 6 years ago |
|
ecaf73835b | 6 years ago |
|
83d4c5cbb4 | 6 years ago |
|
981dbdc445 | 6 years ago |
|
9142b11928 | 6 years ago |
|
15b2533c65 | 6 years ago |
|
f59b518e58 | 6 years ago |
|
bc844f47a0 | 6 years ago |
|
57b2c4e7b9 | 6 years ago |
|
f9b24f1761 | 6 years ago |
|
106621efcc | 6 years ago |
|
aefcfa80fc | 6 years ago |
|
4b35ecbd25 | 6 years ago |
|
26f65b3c05 | 6 years ago |
|
61af48511d | 6 years ago |
|
86cfd302d1 | 6 years ago |
|
d2a0170fda | 6 years ago |
|
f0159e3c02 | 6 years ago |
|
f07625a04e | 6 years ago |
|
3886b03acf | 6 years ago |
|
3bfb040969 | 6 years ago |
|
eaf9dff537 | 6 years ago |
|
37768b9c36 | 6 years ago |
|
51bdce2715 | 6 years ago |
|
c407ecc685 | 6 years ago |
|
394a1debd2 | 6 years ago |
|
44836bd5b8 | 6 years ago |
|
3168c35b46 | 6 years ago |
|
3318e39cb5 | 6 years ago |
|
0c4875ab1a | 6 years ago |
|
9a4ec26997 | 6 years ago |
|
c406af2f82 | 6 years ago |
|
e615605342 | 6 years ago |
|
b89c8a0f98 | 6 years ago |
|
e32bcce9d1 | 6 years ago |
|
fdd1ae30f6 | 6 years ago |
|
1376383050 | 6 years ago |
|
8114c44276 | 6 years ago |
|
d726ed0b23 | 6 years ago |
|
87b60ad296 | 6 years ago |
|
768eaede43 | 6 years ago |
|
6dac82ea62 | 6 years ago |
|
921fc80447 | 6 years ago |
|
8a240df1da | 6 years ago |
|
65f5699bb8 | 6 years ago |
@ -0,0 +1,3 @@
|
||||
# These are supported funding model platforms |
||||
|
||||
custom: ['https://rambox.app/donate.html'] |
@ -1,6 +0,0 @@
|
||||
# Monthly Donators |
||||
|
||||
[Martin Grünbaum](https://github.com/alathon) |
||||
|
||||
Ivan Toshkov |
||||
[Simon Joda Stößer](https://github.com/SimJoSt) |
@ -1,289 +0,0 @@
|
||||
Ext.define('Rambox.ux.Auth0', { |
||||
singleton: true |
||||
|
||||
// private
|
||||
,lock: null |
||||
,auth0: null |
||||
,authService: null |
||||
,backupCurrent: false |
||||
|
||||
,init: function() { |
||||
var me = this; |
||||
|
||||
var Auth0 = require('auth0-js'); |
||||
var _AuthService = require('./resources/js/AuthService'); |
||||
|
||||
me.authService = new _AuthService.default({ |
||||
clientId: auth0Cfg.clientID, |
||||
authorizeEndpoint: 'https://'+auth0Cfg.domain+'/authorize', |
||||
audience: 'https://'+auth0Cfg.domain+'/userinfo', |
||||
scope: 'openid profile offline_access', |
||||
redirectUri: 'https://'+auth0Cfg.domain+'/mobile', |
||||
tokenEndpoint: 'https://'+auth0Cfg.domain+'/oauth/token' |
||||
}); |
||||
|
||||
me.auth0 = new Auth0.WebAuth({ clientID: auth0Cfg.clientID, domain : auth0Cfg.domain }); |
||||
|
||||
//me.defineEvents();
|
||||
} |
||||
|
||||
,onLogin: function(token, authWindow) { |
||||
var me = this; |
||||
|
||||
authWindow.close(); |
||||
|
||||
me.auth0.client.userInfo(token.access_token, function(err, profile) { |
||||
if ( err ) { |
||||
if ( err.error === 401 || err.error === 'Unauthorized' ) return me.renewToken(me.checkConfiguration); |
||||
Ext.Msg.hide(); |
||||
return Ext.Msg.show({ |
||||
title: 'Error' |
||||
,message: 'There was an error getting the profile: ' + err.error_description |
||||
,icon: Ext.Msg.ERROR |
||||
,buttons: Ext.Msg.OK |
||||
}); |
||||
} |
||||
|
||||
profile.user_metadata = profile['https://rambox.pro/user_metadata']; |
||||
delete profile['https://rambox.pro/user_metadata']; |
||||
|
||||
// Display a spinner while waiting
|
||||
Ext.Msg.wait(locale['app.window[29]'], locale['app.window[28]']); |
||||
|
||||
// Google Analytics Event
|
||||
ga_storage._trackEvent('Users', 'loggedIn'); |
||||
|
||||
// Set cookies to help Tooltip.io messages segmentation
|
||||
Ext.util.Cookies.set('auth0', true); |
||||
|
||||
// User is logged in
|
||||
// Save the profile and JWT.
|
||||
localStorage.setItem('profile', JSON.stringify(profile)); |
||||
localStorage.setItem('access_token', token.access_token); |
||||
localStorage.setItem('id_token', token.id_token); |
||||
localStorage.setItem('refresh_token', token.refresh_token); |
||||
|
||||
if ( !Ext.isEmpty(profile.user_metadata) && !Ext.isEmpty(profile.user_metadata.services) && !me.backupCurrent ) { |
||||
Ext.each(profile.user_metadata.services, function(s) { |
||||
var service = Ext.create('Rambox.model.Service', s); |
||||
service.save(); |
||||
Ext.getStore('Services').add(service); |
||||
}); |
||||
|
||||
require('electron').remote.getCurrentWindow().reload(); |
||||
} |
||||
|
||||
Ext.Msg.hide(); |
||||
Ext.cq1('app-main').getViewModel().set('username', profile.name); |
||||
Ext.cq1('app-main').getViewModel().set('avatar', profile.picture); |
||||
}); |
||||
} |
||||
|
||||
,backupConfiguration: function(callback) { |
||||
var me = this; |
||||
|
||||
Ext.Msg.wait('Saving backup...', 'Please wait...'); |
||||
|
||||
// Getting all services
|
||||
var lastupdate = (new Date()).toJSON(); |
||||
var services = []; |
||||
Ext.getStore('Services').each(function(service) { |
||||
var s = Ext.clone(service); |
||||
delete s.data.id; |
||||
delete s.data.zoomLevel; |
||||
services.push(s.data); |
||||
}); |
||||
|
||||
Ext.Ajax.request({ |
||||
url: 'https://rambox.auth0.com/api/v2/users/'+Ext.decode(localStorage.getItem('profile')).sub |
||||
,method: 'PATCH' |
||||
,headers: { authorization: "Bearer " + localStorage.getItem('id_token') } |
||||
,jsonData: { user_metadata: { services: services, services_lastupdate: lastupdate } } |
||||
,success: function(response) { |
||||
Ext.Msg.hide(); |
||||
// Save the last update in localStorage
|
||||
var profile = Ext.decode(localStorage.getItem('profile')); |
||||
if ( !profile.user_metadata ) profile.user_metadata = {}; |
||||
profile.user_metadata.services_lastupdate = lastupdate; |
||||
localStorage.setItem('profile', Ext.encode(profile)); |
||||
Ext.cq1('app-main').getViewModel().set('last_sync', new Date(lastupdate).toUTCString()); |
||||
|
||||
Ext.toast({ |
||||
html: '<i class="fa fa-check fa-3x fa-pull-left" aria-hidden="true"></i> Your configuration were successfully backed up.' |
||||
,title: 'Synchronize Configuration' |
||||
,width: 300 |
||||
,align: 't' |
||||
,closable: false |
||||
}); |
||||
|
||||
if ( Ext.isFunction(callback) ) callback.bind(me)(); |
||||
} |
||||
,failure: function(response) { |
||||
if ( response.status === 401 ) return me.renewToken(me.backupConfiguration); |
||||
|
||||
Ext.Msg.hide(); |
||||
Ext.toast({ |
||||
html: '<i class="fa fa-times fa-3x fa-pull-left" aria-hidden="true"></i> Error occurred when trying to backup your configuration.' |
||||
,title: 'Synchronize Configuration' |
||||
,width: 300 |
||||
,align: 't' |
||||
,closable: false |
||||
}); |
||||
|
||||
if ( Ext.isFunction(callback) ) callback.bind(me)(); |
||||
|
||||
console.error(response); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
,restoreConfiguration: function() { |
||||
var me = this; |
||||
|
||||
me.auth0.client.userInfo(localStorage.getItem('access_token'), function(err, profile) { |
||||
if ( err ) { |
||||
if ( err.code === 401 ) return me.renewToken(me.restoreConfiguration); |
||||
return Ext.Msg.show({ |
||||
title: 'Error' |
||||
,message: 'There was an error getting the profile: ' + err.description |
||||
,icon: Ext.Msg.ERROR |
||||
,buttons: Ext.Msg.OK |
||||
}); |
||||
} |
||||
|
||||
profile.user_metadata = profile['https://rambox.pro/user_metadata']; |
||||
delete profile['https://rambox.pro/user_metadata']; |
||||
|
||||
// First we remove all current services
|
||||
Ext.cq1('app-main').getController().removeAllServices(false, function() { |
||||
if ( !profile.user_metadata || !profile.user_metadata.services ) return; |
||||
Ext.each(profile.user_metadata.services, function(s) { |
||||
var service = Ext.create('Rambox.model.Service', s); |
||||
service.save(); |
||||
Ext.getStore('Services').add(service); |
||||
}); |
||||
|
||||
require('electron').remote.getCurrentWindow().reload(); |
||||
}); |
||||
}); |
||||
} |
||||
|
||||
,checkConfiguration: function() { |
||||
var me = this; |
||||
|
||||
me.auth0.client.userInfo(localStorage.getItem('access_token'), function(err, profile) { |
||||
if ( err ) { |
||||
if ( err.code === 401 ) return me.renewToken(me.checkConfiguration); |
||||
return Ext.Msg.show({ |
||||
title: 'Error' |
||||
,message: 'There was an error getting the profile: ' + err.description |
||||
,icon: Ext.Msg.ERROR |
||||
,buttons: Ext.Msg.OK |
||||
}); |
||||
} |
||||
|
||||
profile.user_metadata = profile['https://rambox.pro/user_metadata']; |
||||
delete profile['https://rambox.pro/user_metadata']; |
||||
|
||||
if ( !profile.user_metadata ) { |
||||
Ext.toast({ |
||||
html: 'You don\'t have any backup yet.' |
||||
,title: 'Synchronize Configuration' |
||||
,width: 300 |
||||
,align: 't' |
||||
,closable: false |
||||
}); |
||||
return; |
||||
} |
||||
|
||||
if ( Math.floor(new Date(profile.user_metadata.services_lastupdate) / 1000) > Math.floor(new Date(Ext.decode(localStorage.getItem('profile')).user_metadata.services_lastupdate) / 1000) ) { |
||||
Ext.toast({ |
||||
html: 'Your settings are out of date.' |
||||
,title: 'Synchronize Configuration' |
||||
,width: 300 |
||||
,align: 't' |
||||
,closable: false |
||||
}); |
||||
} else { |
||||
Ext.toast({ |
||||
html: '<i class="fa fa-check fa-3x fa-pull-left" aria-hidden="true"></i> Latest backup is already applied.' |
||||
,title: 'Synchronize Configuration' |
||||
,width: 300 |
||||
,align: 't' |
||||
,closable: false |
||||
}); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
,renewToken: function(callback) { |
||||
var me = this; |
||||
|
||||
Ext.Ajax.request({ |
||||
url: 'https://rambox.auth0.com/oauth/token' |
||||
,method: 'POST' |
||||
,jsonData: { |
||||
grant_type: 'refresh_token' |
||||
,client_id: auth0Cfg.clientID |
||||
,client_secret: auth0Cfg.clientSecret |
||||
,refresh_token: localStorage.getItem('refresh_token') |
||||
,api_type: 'app' |
||||
} |
||||
,success: function(response) { |
||||
var json = Ext.decode(response.responseText); |
||||
localStorage.setItem('access_token', json.access_token); |
||||
localStorage.setItem('id_token', json.id_token); |
||||
|
||||
if ( Ext.isFunction(callback) ) callback.bind(me)(); |
||||
} |
||||
,failure: function(response) { |
||||
console.error(response); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
,login: function() { |
||||
var me = this; |
||||
|
||||
var electron = require('electron').remote; |
||||
var authWindow = new electron.BrowserWindow({ |
||||
title: 'Rambox - Login' |
||||
,width: 400 |
||||
,height: 600 |
||||
,maximizable: false |
||||
,minimizable: false |
||||
,resizable: false |
||||
,center: true |
||||
,autoHideMenuBar: true |
||||
,skipTaskbar: true |
||||
,fullscreenable: false |
||||
,modal: true |
||||
,parent: require('electron').remote.getCurrentWindow() |
||||
,webPreferences: { |
||||
partition: 'persist:rambox' |
||||
} |
||||
}); |
||||
|
||||
authWindow.on('closed', function() { |
||||
authWindow = null; |
||||
}); |
||||
|
||||
authWindow.loadURL(me.authService.requestAuthCode()); |
||||
|
||||
authWindow.webContents.on('did-navigate', function(e, url) { |
||||
me.authService.requestAccessCode(url, me.onLogin.bind(me), authWindow); |
||||
}); |
||||
} |
||||
|
||||
,logout: function() { |
||||
var me = this; |
||||
|
||||
localStorage.removeItem('profile'); |
||||
localStorage.removeItem('id_token'); |
||||
localStorage.removeItem('refresh_token'); |
||||
localStorage.removeItem('access_token'); |
||||
|
||||
// Set cookies to help Tooltip.io messages segmentation
|
||||
Ext.util.Cookies.set('auth0', false); |
||||
} |
||||
}); |
@ -1,5 +0,0 @@
|
||||
var auth0Cfg = { |
||||
clientID: '' |
||||
,clientSecret: '' |
||||
,domain: '' |
||||
}; |
Before Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 9.7 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 52 KiB |
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 700 B |
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 8.3 KiB |
After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 64 KiB |
After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 9.1 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 3.9 KiB |