Using summaries table for improved performance.
| 
						 | 
				
			
			@ -28,7 +28,12 @@
 | 
			
		|||
		</template>
 | 
			
		||||
 | 
			
		||||
		<span
 | 
			
		||||
			v-if="!loading && actors.length === 0 && releases.length === 0"
 | 
			
		||||
			v-if="error"
 | 
			
		||||
			class="error summary"
 | 
			
		||||
		>{{ error }}</span>
 | 
			
		||||
 | 
			
		||||
		<span
 | 
			
		||||
			v-else-if="!loading && actors.length === 0 && releases.length === 0"
 | 
			
		||||
			class="summary"
 | 
			
		||||
		>No results</span>
 | 
			
		||||
	</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -39,16 +44,23 @@ import Actor from '../actors/tile.vue';
 | 
			
		|||
import Releases from '../releases/releases.vue';
 | 
			
		||||
 | 
			
		||||
async function search() {
 | 
			
		||||
	const results = await this.$store.dispatch('search', {
 | 
			
		||||
		query: this.query,
 | 
			
		||||
		limit: 10,
 | 
			
		||||
	});
 | 
			
		||||
	try {
 | 
			
		||||
		const results = await this.$store.dispatch('search', {
 | 
			
		||||
			query: this.query,
 | 
			
		||||
			limit: 10,
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
	this.loading = false;
 | 
			
		||||
		this.loading = false;
 | 
			
		||||
 | 
			
		||||
	if (results) {
 | 
			
		||||
		this.actors = results.actors;
 | 
			
		||||
		this.releases = results.releases;
 | 
			
		||||
		if (results) {
 | 
			
		||||
			this.actors = results.actors;
 | 
			
		||||
			this.releases = results.releases;
 | 
			
		||||
		}
 | 
			
		||||
	} catch (error) {
 | 
			
		||||
		this.loading = false;
 | 
			
		||||
		this.error = 'Failed to retrieve search results, sorry about that.';
 | 
			
		||||
 | 
			
		||||
		console.error(error);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -101,6 +113,10 @@ export default {
 | 
			
		|||
    margin: 0 0 1rem 0;
 | 
			
		||||
    color: var(--shadow);
 | 
			
		||||
    font-weight: bold;
 | 
			
		||||
 | 
			
		||||
	&.error {
 | 
			
		||||
		color: var(--error);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.tiles {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,7 +22,7 @@ function initEntitiesActions(store, router) {
 | 
			
		|||
                $offset: Int = 0,
 | 
			
		||||
                $after: Datetime = "1900-01-01",
 | 
			
		||||
                $before: Datetime = "2100-01-01",
 | 
			
		||||
                $orderBy: [ReleasesOrderBy!]
 | 
			
		||||
                $orderBy: [ReleasesSummariesOrderBy!]
 | 
			
		||||
                $exclude: [String!]
 | 
			
		||||
				$hasAuth: Boolean!
 | 
			
		||||
				$userId: Int
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +67,6 @@ function initEntitiesActions(store, router) {
 | 
			
		|||
							independent
 | 
			
		||||
							hasLogo
 | 
			
		||||
							${campaignsFragment}
 | 
			
		||||
							sceneTotal
 | 
			
		||||
							children: childEntitiesConnection {
 | 
			
		||||
								totalCount
 | 
			
		||||
							}
 | 
			
		||||
| 
						 | 
				
			
			@ -85,50 +84,34 @@ function initEntitiesActions(store, router) {
 | 
			
		|||
						${campaignsFragment}
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
				connection: releasesConnection(
 | 
			
		||||
				connection: releasesSummariesConnection(
 | 
			
		||||
					first: $limit
 | 
			
		||||
					offset: $offset
 | 
			
		||||
					orderBy: $orderBy
 | 
			
		||||
					filter: {
 | 
			
		||||
					  	entity: {
 | 
			
		||||
							or: [
 | 
			
		||||
						 		{
 | 
			
		||||
									slug: { equalTo: $entitySlug }
 | 
			
		||||
									type: { equalTo: $entityType }
 | 
			
		||||
						  		}
 | 
			
		||||
						  		{
 | 
			
		||||
									parent:{
 | 
			
		||||
							  			slug: { equalTo: $entitySlug }
 | 
			
		||||
							  			type: { equalTo: $entityType }
 | 
			
		||||
									}
 | 
			
		||||
						  		}
 | 
			
		||||
						  		{
 | 
			
		||||
									parent:{
 | 
			
		||||
							  			parent: {
 | 
			
		||||
											slug: { equalTo: $entitySlug }
 | 
			
		||||
											type: { equalTo: $entityType }
 | 
			
		||||
							  			}
 | 
			
		||||
									}
 | 
			
		||||
						  		}
 | 
			
		||||
							]
 | 
			
		||||
					  	}
 | 
			
		||||
						effectiveDate: {
 | 
			
		||||
							lessThan: $before,
 | 
			
		||||
							greaterThan: $after
 | 
			
		||||
						}
 | 
			
		||||
						releasesTagsConnection: {
 | 
			
		||||
							none: {
 | 
			
		||||
								tag: {
 | 
			
		||||
									slug: {
 | 
			
		||||
										in: $exclude
 | 
			
		||||
									}
 | 
			
		||||
								}
 | 
			
		||||
					    not: { tags: { overlaps: $exclude } }
 | 
			
		||||
					    effectiveDate: { lessThan: $before, greaterThan: $after }
 | 
			
		||||
					    showcased: { equalTo: true }
 | 
			
		||||
						or: [
 | 
			
		||||
							{
 | 
			
		||||
								channelSlug: { equalTo: $entitySlug }
 | 
			
		||||
								channelType: { equalTo: $entityType }
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
							{
 | 
			
		||||
								networkSlug: { equalTo: $entitySlug }
 | 
			
		||||
								networkType: { equalTo: $entityType }
 | 
			
		||||
							}
 | 
			
		||||
							{
 | 
			
		||||
								parentNetworkSlug: { equalTo: $entitySlug }
 | 
			
		||||
								parentNetworkType: { equalTo: $entityType }
 | 
			
		||||
							}
 | 
			
		||||
						]
 | 
			
		||||
					}
 | 
			
		||||
				) {
 | 
			
		||||
					releases: nodes {
 | 
			
		||||
						${releaseFields}
 | 
			
		||||
						release {
 | 
			
		||||
							${releaseFields}
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
					totalCount
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			@ -153,7 +136,7 @@ function initEntitiesActions(store, router) {
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		return {
 | 
			
		||||
			entity: curateEntity(entity, null, connection.releases, { lastBatch: lastBatch?.id }),
 | 
			
		||||
			entity: curateEntity(entity, null, connection.releases.map(({ release }) => release), { lastBatch: lastBatch?.id }),
 | 
			
		||||
			totalCount: connection.totalCount,
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -419,6 +419,7 @@ const releaseFields = `
 | 
			
		|||
`;
 | 
			
		||||
// isNew too performance-intensive
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
const releasesFragment = `
 | 
			
		||||
    connection: releasesConnection(
 | 
			
		||||
        filter: {
 | 
			
		||||
| 
						 | 
				
			
			@ -447,6 +448,27 @@ const releasesFragment = `
 | 
			
		|||
		totalCount
 | 
			
		||||
    }
 | 
			
		||||
`;
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
const releasesFragment = `
 | 
			
		||||
    connection: releasesSummariesConnection(
 | 
			
		||||
		first: $limit
 | 
			
		||||
		offset: $offset
 | 
			
		||||
        orderBy: $orderBy
 | 
			
		||||
		filter: {
 | 
			
		||||
		  not: { tags: { overlaps: $exclude } }
 | 
			
		||||
		  effectiveDate: { lessThan: $before, greaterThan: $after }
 | 
			
		||||
		  showcased: { equalTo: true }
 | 
			
		||||
		}
 | 
			
		||||
    ) {
 | 
			
		||||
		releases: nodes {
 | 
			
		||||
			release {
 | 
			
		||||
				${releaseFields}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		totalCount
 | 
			
		||||
    }
 | 
			
		||||
`;
 | 
			
		||||
 | 
			
		||||
const mediaFields = `
 | 
			
		||||
	id
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,7 +23,7 @@ function initReleasesActions(store, router) {
 | 
			
		|||
                $offset:Int = 0,
 | 
			
		||||
                $after:Datetime = "1900-01-01 00:00:00",
 | 
			
		||||
                $before:Datetime = "2100-01-01 00:00:00",
 | 
			
		||||
                $orderBy: [ReleasesOrderBy!],
 | 
			
		||||
                $orderBy: [ReleasesSummariesOrderBy!],
 | 
			
		||||
                $exclude: [String!]
 | 
			
		||||
            ) {
 | 
			
		||||
                ${releasesFragment}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,19 +15,19 @@ function initTagsActions(store, _router) {
 | 
			
		|||
	}) {
 | 
			
		||||
		const { before, after, orderBy } = getDateRange(range);
 | 
			
		||||
 | 
			
		||||
		const { tagBySlug, batches: [lastBatch] } = await graphql(`
 | 
			
		||||
		const { tagBySlug, scenesConnection, batches: [lastBatch] } = await graphql(`
 | 
			
		||||
            query Tag(
 | 
			
		||||
                $tagSlug:String!
 | 
			
		||||
                $tagSlug: String!
 | 
			
		||||
				$offset: Int = 0,
 | 
			
		||||
                $limit:Int = 1000,
 | 
			
		||||
                $after:Datetime = "1900-01-01",
 | 
			
		||||
                $before:Datetime = "2100-01-01",
 | 
			
		||||
                $orderBy: [ReleasesOrderBy!],
 | 
			
		||||
                $orderBy: [ReleasesSummariesOrderBy!],
 | 
			
		||||
                $exclude: [String!]
 | 
			
		||||
				$hasAuth: Boolean!
 | 
			
		||||
				$userId: Int
 | 
			
		||||
            ) {
 | 
			
		||||
                tagBySlug(slug:$tagSlug) {
 | 
			
		||||
                tagBySlug(slug: $tagSlug) {
 | 
			
		||||
                    id
 | 
			
		||||
                    name
 | 
			
		||||
                    slug
 | 
			
		||||
| 
						 | 
				
			
			@ -155,32 +155,25 @@ function initTagsActions(store, _router) {
 | 
			
		|||
							}
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
                    scenesConnection(
 | 
			
		||||
                        filter: {
 | 
			
		||||
							effectiveDate: {
 | 
			
		||||
								lessThan: $before,
 | 
			
		||||
								greaterThan: $after,
 | 
			
		||||
							},
 | 
			
		||||
							releasesTagsConnection: {
 | 
			
		||||
								none: {
 | 
			
		||||
									tag: {
 | 
			
		||||
										slug: {
 | 
			
		||||
											in: $exclude
 | 
			
		||||
										}
 | 
			
		||||
									}
 | 
			
		||||
								}
 | 
			
		||||
							}
 | 
			
		||||
                        },
 | 
			
		||||
                        first: $limit,
 | 
			
		||||
                        orderBy: $orderBy,
 | 
			
		||||
						offset: $offset
 | 
			
		||||
                    ) {
 | 
			
		||||
						releases: nodes {
 | 
			
		||||
                }
 | 
			
		||||
				scenesConnection: releasesSummariesConnection(
 | 
			
		||||
					first: $limit
 | 
			
		||||
					offset: $offset
 | 
			
		||||
					orderBy: $orderBy
 | 
			
		||||
					filter: {
 | 
			
		||||
					    not: { tags: { overlaps: $exclude } }
 | 
			
		||||
					    tags: { anyEqualTo: $tagSlug }
 | 
			
		||||
					    effectiveDate: { lessThan: $before, greaterThan: $after }
 | 
			
		||||
					    showcased: { equalTo: true }
 | 
			
		||||
					}
 | 
			
		||||
				) {
 | 
			
		||||
					releases: nodes {
 | 
			
		||||
						release {
 | 
			
		||||
							${releaseFields}
 | 
			
		||||
						}
 | 
			
		||||
						totalCount
 | 
			
		||||
					}
 | 
			
		||||
                }
 | 
			
		||||
					totalCount
 | 
			
		||||
				}
 | 
			
		||||
				${batchFragment}
 | 
			
		||||
            }
 | 
			
		||||
        `, {
 | 
			
		||||
| 
						 | 
				
			
			@ -197,8 +190,8 @@ function initTagsActions(store, _router) {
 | 
			
		|||
 | 
			
		||||
		return {
 | 
			
		||||
			tag: curateTag(tagBySlug, null, curateRelease),
 | 
			
		||||
			releases: tagBySlug.scenesConnection.releases.map((release) => curateRelease(release, 'scene', { lastBatch: lastBatch.id })),
 | 
			
		||||
			totalCount: tagBySlug.scenesConnection.totalCount,
 | 
			
		||||
			releases: scenesConnection.releases.map(({ release }) => curateRelease(release, 'scene', { lastBatch: lastBatch.id })),
 | 
			
		||||
			totalCount: scenesConnection.totalCount,
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,45 @@
 | 
			
		|||
const config = require('config');
 | 
			
		||||
 | 
			
		||||
exports.up = async (knex) => {
 | 
			
		||||
	await knex.raw(`
 | 
			
		||||
		CREATE MATERIALIZED VIEW releases_summaries AS (
 | 
			
		||||
			SELECT
 | 
			
		||||
				releases.id as release_id,
 | 
			
		||||
				channels.slug as channel_slug,
 | 
			
		||||
				channels.type as channel_type,
 | 
			
		||||
				networks.slug as network_slug,
 | 
			
		||||
				networks.type as network_type,
 | 
			
		||||
				parent_networks.slug as parent_network_slug,
 | 
			
		||||
				parent_networks.type as parent_network_type,
 | 
			
		||||
				studios.showcased IS NOT false
 | 
			
		||||
				AND (channels.showcased IS NOT false OR COALESCE(studios.showcased, false) = true)
 | 
			
		||||
				AND (networks.showcased IS NOT false OR COALESCE(channels.showcased, false) = true OR COALESCE(studios.showcased, false) = true)
 | 
			
		||||
				AS showcased,
 | 
			
		||||
				releases.effective_date,
 | 
			
		||||
				releases.created_at,
 | 
			
		||||
				array_agg(tags.slug) FILTER (WHERE tags.slug IS NOT NULL) AS tags
 | 
			
		||||
			FROM releases
 | 
			
		||||
			LEFT JOIN releases_tags ON releases_tags.release_id = releases.id
 | 
			
		||||
			LEFT JOIN tags ON tags.id = releases_tags.tag_id
 | 
			
		||||
			LEFT JOIN entities AS channels ON channels.id = releases.entity_id
 | 
			
		||||
			LEFT JOIN entities AS studios ON studios.id = releases.studio_id
 | 
			
		||||
			LEFT JOIN entities AS networks ON networks.id = channels.parent_id
 | 
			
		||||
			LEFT JOIN entities AS parent_networks ON parent_networks.id = networks.parent_id
 | 
			
		||||
			GROUP BY releases.id, studios.showcased,
 | 
			
		||||
			channels.showcased, channels.slug, channels.type,
 | 
			
		||||
			networks.showcased, networks.slug, networks.type,
 | 
			
		||||
			parent_networks.slug, parent_networks.type
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
		COMMENT ON MATERIALIZED VIEW releases_summaries IS E'@foreignKey (release_id) references releases (id)';
 | 
			
		||||
		GRANT ALL ON ALL TABLES IN SCHEMA public TO :visitor;
 | 
			
		||||
	`, {
 | 
			
		||||
		visitor: knex.raw(config.database.query.user),
 | 
			
		||||
	});
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.down = async (knex) => {
 | 
			
		||||
	await knex.raw(`
 | 
			
		||||
		DROP MATERIALIZED VIEW IF EXISTS releases_summaries;
 | 
			
		||||
	`);
 | 
			
		||||
};
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB  | 
| 
		 Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB  | 
| 
		 Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.5 KiB  | 
| 
		 Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.3 KiB  | 
| 
		 Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB  | 
| 
		 Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.6 KiB  | 
| 
		 Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.7 KiB  | 
| 
		 Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB  | 
| 
		 Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB  | 
| 
		 Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.2 KiB  | 
| 
		 Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.3 KiB  | 
| 
		 Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.1 KiB  | 
| 
		 Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.3 KiB  | 
| 
		 Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB  | 
| 
		 Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB  | 
| 
		 Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB  | 
| 
		 Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.3 KiB  | 
| 
		 Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.2 KiB  | 
| 
		 Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.2 KiB  | 
| 
		 Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.6 KiB  | 
| 
		 Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB  | 
| 
		 Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB  | 
| 
		 Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB  | 
| 
		 Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB  | 
| 
		 Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB  | 
| 
		 Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB  | 
| 
		 Before Width: | Height: | Size: 873 B After Width: | Height: | Size: 909 B  | 
| 
		 Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB  | 
| 
		 Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB  | 
| 
		 Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB  | 
| 
		 Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB  | 
| 
		 Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/img/logos/teamskeet/lazy/team-skeet-x-brit-studio-xxx_tld.png
								
								
								
								
									
									
									Executable file → Normal file
								
							
							
						
						| 
		 Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB  | 
| 
		 Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.6 KiB  | 
| 
		 Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.8 KiB  | 
| 
		 Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.5 KiB  | 
| 
		 Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.4 KiB  | 
| 
		 Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB  | 
| 
		 Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/img/logos/teamskeet/lazy/teamskeetxaussiefellatioqueens.png
								
								
								
								
									
									
									Executable file → Normal file
								
							
							
						
						| 
		 Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.3 KiB  | 
| 
		 Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB  | 
| 
		 Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 9.3 KiB  | 
| 
		 Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.9 KiB  | 
| 
		 Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB  | 
| 
		 Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.5 KiB  | 
| 
		 Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB  | 
| 
		 Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB  | 
| 
		 Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB  | 
| 
		 Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.6 KiB  | 
| 
		 Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 9.0 KiB  | 
| 
		 Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.2 KiB  | 
| 
		 Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB  | 
| 
		 Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB  | 
| 
		 Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB  | 
| 
		 Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.6 KiB  | 
| 
		 Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.8 KiB  | 
| 
		 Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB  | 
| 
		 Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB  | 
| 
		 Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB  | 
| 
		 Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.5 KiB  | 
| 
		 Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB  | 
| 
		 Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB  | 
| 
		 Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB  | 
| 
		 Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB  | 
| 
		 Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB  | 
| 
		 Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB  | 
| 
		 Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB  | 
| 
		 Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.6 KiB  | 
| 
		 Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.2 KiB  | 
| 
		 Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB  | 
| 
		 Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB  | 
| 
		 Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB  | 
| 
		 Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB  | 
| 
		 Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.5 KiB  | 
| 
		 After Width: | Height: | Size: 2.8 KiB  | 
| 
		 Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB  | 
| 
		 Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB  | 
| 
		 Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.7 KiB  | 
| 
		 Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB  | 
| 
		 Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.9 KiB  | 
| 
		 Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.1 KiB  | 
| 
						 | 
				
			
			@ -0,0 +1,48 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 | 
			
		||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 | 
			
		||||
	 viewBox="0 0 211 75" style="enable-background:new 0 0 211 75;" xml:space="preserve">
 | 
			
		||||
<style type="text/css">
 | 
			
		||||
	.st0{fill:#FFFFFF;}
 | 
			
		||||
	.st1{fill:#FF0023;}
 | 
			
		||||
</style>
 | 
			
		||||
<g>
 | 
			
		||||
	<g>
 | 
			
		||||
		<path class="st0" d="M28.2,53.6c0,4,1.4,6,4.1,6c0.4,0,1.1-0.1,1.9-0.2c0.9-0.1,1.5-0.2,1.9-0.2c0.7,0,1.3,0.3,1.8,0.8
 | 
			
		||||
			c0.5,0.5,0.8,1.1,0.8,1.8c0,1.8-1.2,2.8-3.6,2.8c-0.1,0-0.3,0-0.5,0c-0.3-0.1-0.5-0.1-0.6-0.1L30.1,64c-1.5-0.2-3.2-0.3-5.1-0.3
 | 
			
		||||
			c-2,0-3.8,0.1-5.4,0.3l-4,0.6c-0.2,0-0.3,0-0.6,0.1c-0.3,0-0.5,0-0.6,0c-2.4,0-3.5-0.9-3.5-2.8c0-1.7,0.9-2.5,2.6-2.5
 | 
			
		||||
			c0.4,0,1.1,0.1,1.9,0.2c0.9,0.1,1.5,0.2,1.9,0.2c2.7,0,4-2,4-6V48V41v-6.8V21c0-3.8-2-5.7-5.9-5.7h-2.5c-3.9,0-5.8,1.9-5.8,5.6
 | 
			
		||||
			c0,1.3,0,2.2,0.1,2.7l0.3,3c0.1,0.5,0.1,1.2,0.1,2c0,3.4-1,5.1-3.1,5.1c-2,0-3-1.2-3-3.7c0-0.7,0.1-1.9,0.2-3.6
 | 
			
		||||
			c0.1-2.6,0.2-4.2,0.2-4.9c0-1.3,0-2.7-0.1-4.2c-0.2-2.8-0.3-4-0.3-3.6c0-2.2,1-3.4,3-3.4c0.7,0,2.5,0.1,5.2,0.2
 | 
			
		||||
			c0.3,0,2.5,0.1,6.6,0.3h9.1c1.1,0,3.9,0,8.6-0.1c1,0,2.8-0.1,5.2-0.2c2.2-0.1,3.9-0.2,5.1-0.2c2.7,0,4,1.1,4,3.3v0.2
 | 
			
		||||
			c0,0.5-0.1,1.5-0.2,3c-0.1,1.4-0.3,3-0.4,4.7v0.9c0,0.8,0.1,2.1,0.2,3.8c0.2,2.2,0.3,3.6,0.3,4.2c0,2.2-1,3.3-3.1,3.3
 | 
			
		||||
			c-2,0-3.1-1.3-3.1-4c0-1,0.1-2.4,0.2-4.3c0.2-1.9,0.2-3.3,0.2-4.3c0-3.7-2.1-5.6-6.3-5.6h-2.2c-2,0-3.4,0.4-4.3,1.2
 | 
			
		||||
			c-0.9,0.8-1.3,2.2-1.4,4.1l-0.3,5.6V53.6z"/>
 | 
			
		||||
	</g>
 | 
			
		||||
	<g>
 | 
			
		||||
		<path class="st0" d="M159,23.3c0,5.5-3.1,9.3-9.3,11.6c2.2,0.7,4.1,1.5,5.5,2.3c4.3,2.5,6.5,6.3,6.5,11.3c0,4.9-1.9,8.8-5.7,11.8
 | 
			
		||||
			c-3.8,2.9-8.9,4.4-15.3,4.4c-2.3,0-5.2-0.1-8.7-0.4c-3.5-0.3-6.1-0.4-7.8-0.4c-1.4,0-2.8,0.1-4.1,0.2l-3.8,0.5
 | 
			
		||||
			c-0.1,0-0.3,0-0.6,0.1c-0.3,0-0.5,0-0.6,0c-2.3-0.1-3.5-1-3.5-2.9c0-1.7,0.8-2.6,2.5-2.6c0.4,0,1.2,0.1,2.2,0.2
 | 
			
		||||
			c0.7,0.1,1.3,0.2,1.7,0.2c2.7,0,4.1-2,4.1-5.9V21.4c0-4-1.4-6-4.1-6c-0.5,0-1,0.1-1.7,0.2c-1,0.2-1.7,0.2-2.2,0.2
 | 
			
		||||
			c-1.7,0-2.5-0.9-2.5-2.6c0-1.9,1.2-2.8,3.7-2.8h1l3.9,0.6c1.1,0.2,2.6,0.2,4.6,0.2c2,0,4.9-0.2,8.7-0.5c2.5-0.2,5.2-0.3,8.1-0.3
 | 
			
		||||
			c5.4,0,9.6,1.1,12.6,3.4C157.5,16.1,159,19.3,159,23.3z M128.3,26.8c0,2.8,0.3,4.6,0.8,5.3c0.5,0.7,1.9,1,4.2,1h4.5
 | 
			
		||||
			c9.5,0,14.2-3.1,14.2-9.2c0-5.6-3.9-8.4-11.7-8.4c-5.5,0-8.8,0.3-10.1,1c-1.3,0.7-1.9,2.5-1.9,5.4V26.8z M128.3,43.1V52
 | 
			
		||||
			c0,3.5,0.6,5.6,1.8,6.4c1.2,0.8,4.4,1.2,9.6,1.2c10,0,15-3.7,15-11.2c0-6.9-4.8-10.4-14.4-10.4h-6.7c-2.9,0-4.5,0.6-5,1.9
 | 
			
		||||
			C128.4,40.6,128.3,41.6,128.3,43.1z"/>
 | 
			
		||||
	</g>
 | 
			
		||||
	<g>
 | 
			
		||||
		<path class="st0" d="M188.3,9c5.9,0,10.8,2.3,14.5,6.8v-0.9c0-0.3,0-0.6,0-0.9c-0.1-0.3-0.2-0.5-0.2-0.6c-0.1-1.2-0.2-1.8-0.2-1.6
 | 
			
		||||
			c0-1.9,0.8-2.8,2.5-2.8c1.8,0,2.6,1.1,2.6,3.4c0,0.4-0.1,1.7-0.2,3.9c-0.3,2.7-0.4,4.5-0.4,5.5c0,1.4,0.1,2.9,0.2,4.4l0.3,3.1V30
 | 
			
		||||
			c0,2.4-1,3.6-2.9,3.6c-2.1,0-3.1-1.1-3.1-3.4v-2.9c0.1-3.8-1.1-6.9-3.6-9.3c-2.5-2.4-5.8-3.6-9.8-3.6c-5.3,0-9.4,2-12.4,6.1
 | 
			
		||||
			c-3,4.1-4.5,9.7-4.5,16.9c0,7.3,1.5,13.1,4.6,17.2c3.1,4.1,7.4,6.2,12.9,6.2c3,0,5.7-0.7,8-2.2c2.4-1.5,4-3.4,5-5.7
 | 
			
		||||
			c0.6-1.6,1-3.7,1-6.3c0-2.5,1-3.7,3.1-3.7c2.2,0,3.3,1.2,3.3,3.7c0,5.7-2,10.4-5.9,14c-4,3.6-9.1,5.5-15.3,5.5
 | 
			
		||||
			c-7.2,0-13-2.5-17.3-7.6c-4.3-5.1-6.5-11.9-6.5-20.3c0-8.7,2.2-15.8,6.6-21.1C175.3,11.6,181.1,9,188.3,9z"/>
 | 
			
		||||
	</g>
 | 
			
		||||
	<g>
 | 
			
		||||
		<path class="st1" d="M82.4,64.5c-1.5-0.5-5.8-3.9-12.8-10.5c-5.7-5.3-9.7-9.4-12.1-12.5c-4.1-5.4-6.2-10.6-6.2-15.7
 | 
			
		||||
			c0-4.8,1.8-8.7,5.3-12c3.4-3.1,7.5-4.6,12.4-4.6c6.4,0,10.9,2.7,13.4,8.2c2.5-5.5,7-8.2,13.4-8.2c4.9,0,9,1.5,12.4,4.6
 | 
			
		||||
			c3.5,3.2,5.3,7.2,5.3,12c0,3.7-1.1,7.6-3.3,11.6c-2.2,4-7.2,9.6-14.9,16.7c-2.5,2.4-4.6,4.3-6.3,5.7
 | 
			
		||||
			C85.6,62.8,83.4,64.3,82.4,64.5z"/>
 | 
			
		||||
	</g>
 | 
			
		||||
</g>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 3.6 KiB  | 
| 
		 After Width: | Height: | Size: 35 KiB  | 
| 
		 Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB  | 
| 
		 Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB  |