Skip to content

Commit

Permalink
Update image asset paths to public (#654)
Browse files Browse the repository at this point in the history
Move uploaded images and other static image assets to the public folder, thus passing nodejs and giving us better control over caching via Nginx.
  • Loading branch information
simison authored Aug 25, 2018
1 parent b59a297 commit 6f31a6f
Show file tree
Hide file tree
Showing 147 changed files with 88 additions and 87 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -59,4 +59,5 @@ migrations/.migrate

# User uploads
uploads
modules/users/client/img/profile/uploads
public/uploads-profile
modules/users/client/img/profile/uploads # folder removed 2018-08
2 changes: 1 addition & 1 deletion config/env/default.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ module.exports = {
maxUploadSize: process.env.MAX_UPLOAD_SIZE || 10 * 1024 * 1024, // 10MB. Remember to change this to Nginx configs as well
imageProcessor: 'graphicsmagick', // graphicsmagick|imagemagick
uploadTmpDir: './tmp/',
uploadDir: './modules/users/client/img/profile/uploads/',
uploadDir: './public/uploads-profile',
port: process.env.PORT || 3000,
host: 'localhost',
https: process.env.HTTPS || false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@
var file = ($window.innerWidth <= 480 && photo.file_mobile) ? photo.file_mobile : photo.file;

elem.css({
'background-image': 'url(/modules/core/img/board/' + file + ')'
'background-image': 'url(/img/board/' + file + ')'
});

// To prevent key being literally `key`: `{key: ...}`, we want it to be actual keyname such as `hitchroad`.
Expand Down
6 changes: 3 additions & 3 deletions modules/core/client/less/directives/avatar.less
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,19 @@
background-color: @gray-lighter;
background-repeat: no-repeat;
background-size: contain;
background-image: url(/modules/users/img/avatar.png);
background-image: url(/img/avatar.png);
// Stop alt-texts overflowing
overflow: hidden;

// Different default backgrounds for FB and Gravatar avatars
&.avatar-facebook {
// Image informs users if they are blocking access to graph.facebook.com
background-image: url(/modules/users/img/avatar-facebook.png);
background-image: url(/img/avatar-facebook.png);
background-size: contain;
}
&.avatar-gravatar {
// Image informs users if they are blocking access to Gravatar.com
background-image: url(/modules/users/img/avatar-gravatar.png);
background-image: url(/img/avatar-gravatar.png);
background-size: contain;
}

Expand Down
2 changes: 1 addition & 1 deletion modules/core/client/less/layout/board.less
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@
&.board-error {
// Photo by Mikael Korpela
// @link https://creativecommons.org/licenses/by-nc-nd/4.0/
background-image: url(/modules/core/img/board/error.jpg);
background-image: url(/img/board/error.jpg);
}

}
10 changes: 5 additions & 5 deletions modules/core/client/less/layout/logo.less
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@
}

// Logo images: color, white, dark
.img-retina('/modules/core/img/logo/color.png', '/modules/core/img/logo/[email protected]', @logo-size, @logo-size);
.img-retina('/img/logo/color.png', '/img/logo/[email protected]', @logo-size, @logo-size);

&.logo-white {
.img-retina('/modules/core/img/logo/white.png', '/modules/core/img/logo/[email protected]', @logo-size, @logo-size);
.img-retina('/img/logo/white.png', '/img/logo/[email protected]', @logo-size, @logo-size);
}
&.logo-dark {
.img-retina('/modules/core/img/logo/dark.png', '/modules/core/img/logo/[email protected]', @logo-size, @logo-size);
.img-retina('/img/logo/dark.png', '/img/logo/[email protected]', @logo-size, @logo-size);
}
}

Expand All @@ -45,9 +45,9 @@
.size(@logo-size-width, @logo-size-height);

// Logo images: white (default), color
.img-retina('/modules/core/img/logo/horizontal-white.png', '/modules/core/img/logo/[email protected]', @logo-size-width, @logo-size-height);
.img-retina('/img/logo/horizontal-white.png', '/img/logo/[email protected]', @logo-size-width, @logo-size-height);

&.logo-horizontal-color {
.img-retina('/modules/core/img/logo/horizontal-color.png', '/modules/core/img/logo/[email protected]', @logo-size-width, @logo-size-height);
.img-retina('/img/logo/horizontal-color.png', '/img/logo/[email protected]', @logo-size-width, @logo-size-height);
}
}
4 changes: 2 additions & 2 deletions modules/core/client/less/modules/icons.less
Original file line number Diff line number Diff line change
Expand Up @@ -142,5 +142,5 @@
background-size: 16px 16px;
}
}
.icon-bw:before { .img-retina('/modules/core/img/external/icon-bw.png', '/modules/core/img/external/[email protected]', 16px, 16px); }
.icon-cs:before { .img-retina('/modules/core/img/external/icon-cs.png', '/modules/core/img/external/[email protected]', 16px, 16px); }
.icon-bw:before { .img-retina('/img/external/icon-bw.png', '/img/external/[email protected]', 16px, 16px); }
.icon-cs:before { .img-retina('/img/external/icon-cs.png', '/img/external/[email protected]', 16px, 16px); }
4 changes: 2 additions & 2 deletions modules/core/client/less/modules/leaflet.less
Original file line number Diff line number Diff line change
Expand Up @@ -92,14 +92,14 @@
// Layer image is satellite when map style is other
.leaflet-control-layers-toggle,
.leaflet-touch .leaflet-control-layers-toggle {
.img-retina('/modules/core/img/map/satellite.png', '/modules/core/img/map/[email protected]', 46px, 46px);
.img-retina('/img/map/satellite.png', '/img/map/[email protected]', 46px, 46px);
}

// Layer image is street when map style is satellite
.leaflet-layerstyle-satellite {
.leaflet-control-layers-toggle,
.leaflet-touch .leaflet-control-layers-toggle {
.img-retina('/modules/core/img/map/street.png', '/modules/core/img/map/[email protected]', 46px, 46px);
.img-retina('/img/map/street.png', '/img/map/[email protected]', 46px, 46px);
}
}

Expand Down
2 changes: 1 addition & 1 deletion modules/core/client/services/mapmarkers.client.service.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
var markerIconSize = $window.innerWidth < 768 ? 30 : 20;

// Base path for icon images
var path = '/modules/core/img/map/';
var path = '/img/map/';

// Leaflet.js
var Leaflet = $window.L;
Expand Down
42 changes: 21 additions & 21 deletions modules/core/server/views/layout.server.view.html
Original file line number Diff line number Diff line change
Expand Up @@ -31,24 +31,24 @@
<meta name="mobile-web-app-capable" content="yes">
<meta name="theme-color" content="#12b591">
<link rel="manifest" href="/manifest.json">
<link rel="icon" type="image/png" href="{{hostPort}}/modules/core/img/icons/android/512.png" sizes="512x512">
<link rel="icon" type="image/png" href="{{hostPort}}/modules/core/img/icons/android/192.png" sizes="192x192">
<link rel="icon" type="image/png" href="{{hostPort}}/modules/core/img/icons/android/144.png" sizes="144x144">
<link rel="icon" type="image/png" href="{{hostPort}}/modules/core/img/icons/android/96.png" sizes="96x96">
<link rel="icon" type="image/png" href="{{hostPort}}/modules/core/img/icons/android/72.png" sizes="72x72">
<link rel="icon" type="image/png" href="{{hostPort}}/modules/core/img/icons/android/48.png" sizes="48x48">
<link rel="icon shortcut" type="image/png" href="{{hostPort}}/modules/core/img/[email protected]" sizes="32x32" id="favicon2x">
<link rel="icon shortcut" type="image/png" href="{{hostPort}}/modules/core/img/favicon.png" sizes="16x16" id="favicon">
<link rel="icon" type="image/png" href="{{hostPort}}/img/icons/android/512.png" sizes="512x512">
<link rel="icon" type="image/png" href="{{hostPort}}/img/icons/android/192.png" sizes="192x192">
<link rel="icon" type="image/png" href="{{hostPort}}/img/icons/android/144.png" sizes="144x144">
<link rel="icon" type="image/png" href="{{hostPort}}/img/icons/android/96.png" sizes="96x96">
<link rel="icon" type="image/png" href="{{hostPort}}/img/icons/android/72.png" sizes="72x72">
<link rel="icon" type="image/png" href="{{hostPort}}/img/icons/android/48.png" sizes="48x48">
<link rel="icon shortcut" type="image/png" href="{{hostPort}}/img/[email protected]" sizes="32x32" id="favicon2x">
<link rel="icon shortcut" type="image/png" href="{{hostPort}}/img/favicon.png" sizes="16x16" id="favicon">

{# Apple #}
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="{{hostPort}}/modules/core/img/icons/ios/[email protected]">
<link rel="apple-touch-icon-precomposed" sizes="120x120" href="{{hostPort}}/modules/core/img/icons/ios/[email protected]">
<link rel="apple-touch-icon-precomposed" sizes="76x76" href="{{hostPort}}/modules/core/img/icons/ios/Icon-76.png">
<link rel="apple-touch-icon-precomposed" sizes="60x60" href="{{hostPort}}/modules/core/img/icons/ios/Icon-60.png">
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="{{hostPort}}/modules/core/img/icons/ios/[email protected]">
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="{{hostPort}}/modules/core/img/icons/ios/[email protected]">
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="{{hostPort}}/modules/core/img/icons/ios/Icon-72.png">
<link rel="apple-touch-icon" sizes="57x57" href="{{hostPort}}/modules/core/img/icons/ios/Icon.png">
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="{{hostPort}}/img/icons/ios/[email protected]">
<link rel="apple-touch-icon-precomposed" sizes="120x120" href="{{hostPort}}/img/icons/ios/[email protected]">
<link rel="apple-touch-icon-precomposed" sizes="76x76" href="{{hostPort}}/img/icons/ios/Icon-76.png">
<link rel="apple-touch-icon-precomposed" sizes="60x60" href="{{hostPort}}/img/icons/ios/Icon-60.png">
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="{{hostPort}}/img/icons/ios/[email protected]">
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="{{hostPort}}/img/icons/ios/[email protected]">
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="{{hostPort}}/img/icons/ios/Icon-72.png">
<link rel="apple-touch-icon" sizes="57x57" href="{{hostPort}}/img/icons/ios/Icon.png">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">

Expand All @@ -62,7 +62,7 @@
{# https://developers.facebook.com/docs/sharing/best-practices#images #}
<meta property="og:image" content="https://ucarecdn.com/{{tribe.image_UUID}}/-/progressive/yes/-/scale_crop/1200x630/center/-/quality/lightest/-/format/jpeg/-/overlay/b72e2604-e926-4e17-acbd-e37c0e1f5c73/50%25x50%25/center/{{tribe.slug}}.jpg">
{% else %}
<meta property="og:image" content="{{hostPort}}/modules/core/img/og_image.jpg">
<meta property="og:image" content="{{hostPort}}/img/og_image.jpg">
{% endif %}
{% else %}
{% if invite %}
Expand All @@ -72,7 +72,7 @@
{% endif %}
<meta property="og:description" content="{{description}}">
<meta property="og:url" content="{{canonicalUrl}}">
<meta property="og:image" content="{{hostPort}}/modules/core/img/og_image.jpg">
<meta property="og:image" content="{{hostPort}}/img/og_image.jpg">
{% endif %}
<meta property="og:site_name" content="{{title}}">
<meta property="og:type" content="website">
Expand All @@ -88,19 +88,19 @@
{% if tribe.image_UUID %}
<meta name="twitter:image" content="https://ucarecdn.com/{{tribe.image_UUID}}/-/progressive/yes/-/scale_crop/1200x630/center/-/quality/lightest/-/format/jpeg/-/overlay/b72e2604-e926-4e17-acbd-e37c0e1f5c73/50%25x50%25/center/{{tribe.slug}}.jpg">
{% else %}
<meta name="twitter:image" content="{{hostPort}}/modules/core/img/og_image.jpg">
<meta name="twitter:image" content="{{hostPort}}/img/og_image.jpg">
{% endif %}
{% else %}
<meta name="twitter:title" content="{{title}}">
<meta name="twitter:description" content="{{description}}">
<meta name="twitter:url" content="{{hostPort}}/">
<meta name="twitter:image" content="{{hostPort}}/modules/core/img/og_image.jpg">
<meta name="twitter:image" content="{{hostPort}}/img/og_image.jpg">
{% endif %}

{# MS #}
<meta name="msapplication-tap-highlight" content="no">
<meta name="msapplication-TileColor" content="#FFFFFF">
<meta name="msapplication-TileImage" content="{{hostPort}}/modules/core/img/icons/apple-touch-icon-144x144-precomposed.png">
<meta name="msapplication-TileImage" content="{{hostPort}}/img/icons/apple-touch-icon-144x144-precomposed.png">

{# Google Analytics #}
{% if googleAnalytics.enabled === true %}
Expand Down
2 changes: 1 addition & 1 deletion modules/core/server/views/partials/footer.server.view.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
Trustroots Foundation
</a>
<link itemprop="url" href="https://www.trustroots.org/">
<link itemprop="logo" href="https://www.trustroots.org/modules/core/img/logo/color.png">
<link itemprop="logo" href="https://www.trustroots.org/img/logo/color.png">

<ul class="list-inline text-center">
<li>
Expand Down
4 changes: 2 additions & 2 deletions modules/core/server/views/partials/header.server.view.html
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@
<a ng-click="app.goHome()"
class="navbar-brand hidden-xs"
aria-hidden="true">
<img class="hidden-xs hidden-sm" src="/modules/core/img/logo/horizontal-white.svg" alt="Trustroots" width="177" height="31" />
<img class="hidden-md hidden-lg" src="/modules/core/img/tree-white.svg" alt="Trustroots" width="31" height="31" />
<img class="hidden-xs hidden-sm" src="/img/logo/horizontal-white.svg" alt="Trustroots" width="177" height="31" />
<img class="hidden-md hidden-lg" src="/img/tree-white.svg" alt="Trustroots" width="31" height="31" />
</a>
</div>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ describe('Text processor tests', function () {
'<h5>h5</h5>' +
'<h6>h6</h6>' +
'&nbsp;' +
'<img src="//www.trustroots.org/modules/users/img/avatar.png"/>' +
'<img src="//www.trustroots.org/img/avatar.png"/>' +
'<p>unclosed tag' +
'<p>foo<br>bar</p>';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@

var favicon1xElem = angular.element('#favicon'),
favicon2xElem = angular.element('#favicon2x'),
faviconPath = '/modules/core/img/';
faviconPath = '/img/';

scope.unread = PollMessagesCount.getUnreadCount();

Expand Down
6 changes: 3 additions & 3 deletions modules/offers/client/less/edit.less
Original file line number Diff line number Diff line change
Expand Up @@ -74,12 +74,12 @@
background-position-y: calc(~"50% - "(38px/2));
background-position-x: 50%;
background-repeat: no-repeat;
.img-retina("/modules/core/img/map/marker-locator.png", "/modules/core/img/map/[email protected]", 56px, 41px);
.img-retina("/img/map/marker-locator.png", "/img/map/[email protected]", 56px, 41px);
&.offer-hosting-yes {
.img-retina("/modules/core/img/map/marker-locator-yes.png", "/modules/core/img/map/[email protected]", 56px, 41px);
.img-retina("/img/map/marker-locator-yes.png", "/img/map/[email protected]", 56px, 41px);
}
&.offer-hosting-maybe {
.img-retina("/modules/core/img/map/marker-locator-maybe.png", "/modules/core/img/map/[email protected]", 56px, 41px);
.img-retina("/img/map/marker-locator-maybe.png", "/img/map/[email protected]", 56px, 41px);
}
}
// Mobile improvements on above elements
Expand Down
6 changes: 3 additions & 3 deletions modules/pages/client/less/home.less
Original file line number Diff line number Diff line change
Expand Up @@ -131,10 +131,10 @@
}
}
.home-browser-screenshot-search {
.img-retina('/modules/pages/img/screenshot-search.png', '/modules/pages/img/[email protected]', 600px, 387px);
.img-retina('/img/screenshot-search.png', '/img/[email protected]', 600px, 387px);
}
.home-browser-screenshot-profile {
.img-retina('/modules/pages/img/screenshot-profile.png', '/modules/pages/img/[email protected]', 600px, 387px);
.img-retina('/img/screenshot-profile.png', '/img/[email protected]', 600px, 387px);
}

// Home section - hospex & how
Expand Down Expand Up @@ -242,7 +242,7 @@
.home-wohoo {
width: 207px;
height: 162px;
.img-retina('/modules/pages/img/wohoo.png', '/modules/pages/img/[email protected]', 207px, 162px);
.img-retina('/img/wohoo.png', '/img/[email protected]', 207px, 162px);
}

// Home section - footer
Expand Down
4 changes: 2 additions & 2 deletions modules/pages/client/views/home.client.view.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@

<div class="row">
<div class="col-xs-12 col-sm-8 col-sm-offset-2">
<img class="home-logo hidden-xs center-block" src="/modules/core/img/logo/white.svg" alt="Trustroots" width="210" height="210" aria-hidden="true">
<img class="home-logo visible-xs-block center-block" src="/modules/core/img/logo/white.svg" alt="Trustroots" width="130" height="130" aria-hidden="true">
<img class="home-logo hidden-xs center-block" src="/img/logo/white.svg" alt="Trustroots" width="210" height="210" aria-hidden="true">
<img class="home-logo visible-xs-block center-block" src="/img/logo/white.svg" alt="Trustroots" width="130" height="130" aria-hidden="true">
<h1 class="sr-only">Trustroots</h1>
<h3 class="home-tagline">Travellers' community</h3>
<h4 class="home-subtagline">Sharing, hosting and getting people together.</h4>
Expand Down
4 changes: 2 additions & 2 deletions modules/pages/client/views/media.client.view.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<br><br>
<h2 class="visible-xs-block">Media</h2>
<h2 class="hidden-xs">
<img src="/modules/core/img/tree-white.svg" alt="Trustroots" width="75" height="75" /> in Media
<img src="/img/tree-white.svg" alt="Trustroots" width="75" height="75" /> in Media
</h2>
<br><br>
<p class="lead">Trustroots is a new non-profit hospitality exchange community.</p>
Expand Down Expand Up @@ -175,7 +175,7 @@ <h3 id="files">Files</h3>

<div class="media" id="logo">
<div class="media-left">
<img class="media-object" src="/modules/core/img/logo/color.svg" alt="Trustroots logo" width="130" height="130" />
<img class="media-object" src="/img/logo/color.svg" alt="Trustroots logo" width="130" height="130" />
</div>
<div class="media-body">
<h4 class="media-heading">Trustroots logo</h4>
Expand Down
6 changes: 3 additions & 3 deletions modules/pages/client/views/team.client.view.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<!-- Intro -->
<div class="row">
<div class="col-xs-12 col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4 text-center">
<img class="hidden-xs" src="/modules/core/img/tree-color.svg" alt="Trustroots" width="120" height="120" />
<img class="hidden-xs" src="/img/tree-color.svg" alt="Trustroots" width="120" height="120" />
<br><br>
<h1>Trustroots Team</h1>
<p class="lead">
Expand Down Expand Up @@ -50,7 +50,7 @@ <h4 class="media-heading">Mikael</h4>

<!-- Carlos -->
<div class="media">
<img class="media-object img-circle pull-left" src="/modules/pages/img/team-carlos.jpg" width="100" alt="Carlos">
<img class="media-object img-circle pull-left" src="/img/team-carlos.jpg" width="100" alt="Carlos">
<div class="media-body">
<h4 class="media-heading">Carlos</h4>
<p class="text-color-links">
Expand All @@ -68,7 +68,7 @@ <h4 class="media-heading">Carlos</h4>

<!-- Natalia -->
<div class="media">
<img class="media-object img-circle pull-left" src="/modules/pages/img/team-natalia.jpg" width="100" alt="Natalia">
<img class="media-object img-circle pull-left" src="/img/team-natalia.jpg" width="100" alt="Natalia">
<div class="media-body">
<h4 class="media-heading">Natalia</h4>
<p class="text-color-links">
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<section class="container board container-fullscreen text-center" tr-boards="'bokeh'">
<div class="row">
<div class="col-xs-12">
<img class="hidden-xs" src="/modules/core/img/logo/color.svg" alt="Trustroots" width="140" height="140" />
<img class="hidden-xs" src="/img/logo/color.svg" alt="Trustroots" width="140" height="140" />
<br><br><br>
<h2>Trustroots Statistics</h2>
<br><br><br>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@
description: inviteTextGeneric,
// Image used for sharing
// Image URL would be appended to "note" section in invite emails as well
// media: domain + '/modules/core/img/og_image.jpg',
// media: domain + '/img/og_image.jpg',
email_template: 'invite',
email_vars: {
'code': code,
Expand Down
6 changes: 3 additions & 3 deletions modules/users/client/directives/tr-avatar.client.directive.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@

// Options
var defaultSize = 256,
defaultAvatar = '/modules/users/img/avatar.png';
defaultAvatar = '/img/avatar.png';

return {
template:
Expand Down Expand Up @@ -95,14 +95,14 @@
}
// Locally uploaded avatar
} else if ($scope.source === 'local') {
if ($scope.user.avatarUploaded) {
if ($scope.user.avatarUploaded && $scope.user && $scope.user._id) {
// Cache buster
var timestamp = new Date($scope.user.updated).getTime();

// 32 is the smallest and 2048 biggest file size we're generating.
var fileSize = ($scope.size < 32) ? 32 : $scope.size;

$scope.avatar = '/modules/users/img/profile/uploads/' + $scope.user._id + '/avatar/' + fileSize + '.jpg?' + timestamp;
$scope.avatar = '/uploads-profile/' + $scope.user._id + '/avatar/' + fileSize + '.jpg?' + timestamp;
} else {
$scope.avatar = defaultAvatar;
}
Expand Down
Binary file removed modules/users/client/img/avatar.png
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

<div class="row">
<div class="col-xs-12 text-center">
<img class="hidden-xs" src="/modules/core/img/tree-color.svg" alt="Trustroots" width="120" height="120" aria-hidden="true">
<img class="visible-xs-inline-block" src="/modules/core/img/tree-color.svg" alt="Trustroots" width="80" height="80" aria-hidden="true">
<img class="hidden-xs" src="/img/tree-color.svg" alt="Trustroots" width="120" height="120" aria-hidden="true">
<img class="visible-xs-inline-block" src="/img/tree-color.svg" alt="Trustroots" width="80" height="80" aria-hidden="true">
<br><br>
</div>
</div>
Expand Down
Loading

0 comments on commit 6f31a6f

Please sign in to comment.