Added paradise version. Added Coptic text texture. Added polar coordinate and "sun" support to the renderer.

This commit is contained in:
Rezmason
2018-09-09 16:42:22 -07:00
parent a8dcc52c8e
commit e61f96e614
8 changed files with 252 additions and 22 deletions

View File

@@ -16,7 +16,7 @@ You can customize the digital rain by putting a '?' at the end of the link above
Here's a list of customization options: Here's a list of customization options:
- **version** - the version of the Matrix to simulate. Can be "nightmare" or "1999" (default). - **version** - the version of the Matrix to simulate. Can be "paradise", "nightmare" or "1999" (default).
- **width** - the number of columns (and rows) to draw. Default is 80. - **width** - the number of columns (and rows) to draw. Default is 80.
- **animationSpeed** - the overall speed of the animation. Can be any number, even negative! Default is 1.0. - **animationSpeed** - the overall speed of the animation. Can be any number, even negative! Default is 1.0.
- **fallSpeed** - the speed of the rain. Can be any number, even negative! Default is 1.0. - **fallSpeed** - the speed of the rain. Can be any number, even negative! Default is 1.0.
@@ -32,6 +32,8 @@ The Matrix glyphs in this project are cleaned up vectors [from an old SWF](https
The Gothic glyphs in this project are derived from [Dr. jur. Robert Pfeffer's font "Silubur"](http://www.robert-pfeffer.net/gotica/englisch/index.html), which are inspired by the uncial script found in the [Codex Argenteus](https://en.wikipedia.org/wiki/Codex_Argenteus). The Gothic glyphs in this project are derived from [Dr. jur. Robert Pfeffer's font "Silubur"](http://www.robert-pfeffer.net/gotica/englisch/index.html), which are inspired by the uncial script found in the [Codex Argenteus](https://en.wikipedia.org/wiki/Codex_Argenteus).
The Coptic glyphs in this project are derived from [George Douros's font "Symbola"](http://users.teilar.gr/~g1951d), due to their similarity to the script in [CG II of Nag Hammadi](https://en.wikipedia.org/wiki/Nag_Hammadi_Codex_II).
The glyphs are formatted as a multi-channel distance field (or MSDF) via Victor Chlumsky's [msdfgen](https://github.com/Chlumsky/msdfgen). This format preserves the crisp edges and corners of vector graphics when rendered as textures. Chlumsky's thesis paper, which is in English and is also easy to read, is [available to download here](https://dspace.cvut.cz/handle/10467/62770). The glyphs are formatted as a multi-channel distance field (or MSDF) via Victor Chlumsky's [msdfgen](https://github.com/Chlumsky/msdfgen). This format preserves the crisp edges and corners of vector graphics when rendered as textures. Chlumsky's thesis paper, which is in English and is also easy to read, is [available to download here](https://dspace.cvut.cz/handle/10467/62770).
The raindrops themselves are particles [computed on the GPU inside of a texture](https://threejs.org/examples/webgl_gpgpu_water.html), much smaller than the final render. The data sent from the CPU to the GPU every frame is negligible. The raindrops themselves are particles [computed on the GPU inside of a texture](https://threejs.org/examples/webgl_gpgpu_water.html), much smaller than the final render. The data sent from the CPU to the GPU every frame is negligible.

View File

@@ -11,6 +11,10 @@ Reach out to Ashley's partner about producing sounds
https://youtu.be/721sG2D_9-U?t=67 https://youtu.be/721sG2D_9-U?t=67
And some kind of ambient sound that they play over And some kind of ambient sound that they play over
Why's it look different on Mobile Safari?
Much later: Much later:
Deluxe compute variables Deluxe compute variables
Flashing row effect Flashing row effect

BIN
coptic_msdf.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

View File

@@ -25,9 +25,36 @@
<script> <script>
const versions = { const versions = {
paradise: {
texture: './coptic_msdf.png',
glyphSequenceLength: 32,
bloom: {
strength: 4,
radius: 1,
threshold: 0
},
palette: [
{color: new THREE.Vector3(0.00, 0.00, 0.00), at: 0.0},
{color: new THREE.Vector3(0.52, 0.17, 0.05), at: 0.4},
{color: new THREE.Vector3(0.82, 0.37, 0.12), at: 0.7},
{color: new THREE.Vector3(1.00, 0.74, 0.29), at: 0.9},
{color: new THREE.Vector3(1.00, 1.00, 1.00), at: 1.0},
],
fallSpeed: 0.05,
cycleSpeed: 0.05,
hasThunder: false,
hasSun: true,
isPolar: true,
numColumns: 50
},
nightmare: { nightmare: {
texture: './gothic_msdf.png', texture: './gothic_msdf.png',
glyphSequenceLength: 27, glyphSequenceLength: 27,
bloom: {
strength: 2,
radius: 0.8,
threshold: 0.5
},
palette: [ palette: [
{color: new THREE.Vector3(0.00, 0.00, 0.00), at: 0.0}, {color: new THREE.Vector3(0.00, 0.00, 0.00), at: 0.0},
{color: new THREE.Vector3(0.52, 0.00, 0.00), at: 0.2}, {color: new THREE.Vector3(0.52, 0.00, 0.00), at: 0.2},
@@ -36,13 +63,20 @@
{color: new THREE.Vector3(1.00, 1.00, 0.90), at: 1.0}, {color: new THREE.Vector3(1.00, 1.00, 0.90), at: 1.0},
], ],
fallSpeed: 0.4, fallSpeed: 0.4,
cycleSpeed: 0.5, cycleSpeed: 0.02,
hasThunder: true, hasThunder: true,
hasSun: false,
isPolar: false,
numColumns: 60 numColumns: 60
}, },
["1999"]: { ["1999"]: {
texture: './matrixcode_msdf.png', texture: './matrixcode_msdf.png',
glyphSequenceLength: 57, glyphSequenceLength: 57,
bloom: {
strength: 2,
radius: 0.5,
threshold: 0.3
},
palette: [ palette: [
{color: new THREE.Vector3(0.00, 0.00, 0.00), at: 0.0}, {color: new THREE.Vector3(0.00, 0.00, 0.00), at: 0.0},
{color: new THREE.Vector3(0.05, 0.52, 0.17), at: 0.4}, {color: new THREE.Vector3(0.05, 0.52, 0.17), at: 0.4},
@@ -52,6 +86,8 @@
fallSpeed: 1, fallSpeed: 1,
cycleSpeed: 1, cycleSpeed: 1,
hasThunder: false, hasThunder: false,
hasSun: false,
isPolar: false,
numColumns: 80 numColumns: 80
} }
}; };
@@ -59,7 +95,7 @@
const urlParams = new Map(window.location.href.replace(/^[^\?]+\?/, "").split("&").map(pair => pair.split("="))); const urlParams = new Map(window.location.href.replace(/^[^\?]+\?/, "").split("&").map(pair => pair.split("=")));
const getParam = (key, defaultValue) => urlParams.has(key) ? urlParams.get(key) : defaultValue; const getParam = (key, defaultValue) => urlParams.has(key) ? urlParams.get(key) : defaultValue;
const version = versions[getParam("version", "1999")]; const version = versions[getParam("version", "1999")] || versions["1999"];
const sharpness = parseFloat(getParam("sharpness", 0.5)); const sharpness = parseFloat(getParam("sharpness", 0.5));
const animationSpeed = parseFloat(getParam("animationSpeed", 1)); const animationSpeed = parseFloat(getParam("animationSpeed", 1));
@@ -70,6 +106,8 @@
const glyphSequenceLength = version.glyphSequenceLength; const glyphSequenceLength = version.glyphSequenceLength;
const palette = version.palette; const palette = version.palette;
const hasThunder = version.hasThunder; const hasThunder = version.hasThunder;
const hasSun = version.hasSun;
const isPolar = version.isPolar;
const effect = getParam("effect", "plain"); const effect = getParam("effect", "plain");
@@ -91,13 +129,15 @@
animationSpeed, fallSpeed, cycleSpeed, animationSpeed, fallSpeed, cycleSpeed,
glyphSequenceLength, glyphSequenceLength,
numGlyphColumns, numGlyphColumns,
hasThunder hasThunder,
hasSun,
isPolar,
}); });
matrixRenderer.pass.renderToScreen = false; matrixRenderer.pass.renderToScreen = false;
composer.addPass( matrixRenderer.pass ); composer.addPass( matrixRenderer.pass );
const bloomPass = new THREE.UnrealBloomPass( new THREE.Vector2( window.innerWidth, window.innerHeight ), 2, 0.5, 0.3 ); const bloomPass = new THREE.UnrealBloomPass( new THREE.Vector2( window.innerWidth, window.innerHeight ), version.bloom.strength, version.bloom.radius, version.bloom.threshold );
composer.addPass( bloomPass ); composer.addPass( bloomPass );
switch (effect) { switch (effect) {

View File

@@ -11,21 +11,23 @@ const easeInOutQuad = input => {
return 1 - 2 * input * input; return 1 - 2 * input * input;
} }
const ARRAY_SIZE = 2048;
THREE.ColorMapPass = function (entries, ditherMagnitude = 1) { THREE.ColorMapPass = function (entries, ditherMagnitude = 1) {
const colors = Array(256).fill().map(_ => new THREE.Vector3()); const colors = Array(ARRAY_SIZE).fill().map(_ => new THREE.Vector3(0, 0, 0));
const sortedEntries = entries.slice().sort((e1, e2) => e1.at - e2.at).map(entry => ({ const sortedEntries = entries.slice().sort((e1, e2) => e1.at - e2.at).map(entry => ({
color: entry.color, color: entry.color,
at255: Math.floor(Math.max(Math.min(1, entry.at), 0) * (colors.length - 1)) arrayIndex: Math.floor(Math.max(Math.min(1, entry.at), 0) * (ARRAY_SIZE - 1))
})); }));
sortedEntries.unshift({color:sortedEntries[0].color, at255:0}); sortedEntries.unshift({color:sortedEntries[0].color, arrayIndex:0});
sortedEntries.push({color:sortedEntries[sortedEntries.length - 1].color, at255:255}); sortedEntries.push({color:sortedEntries[sortedEntries.length - 1].color, arrayIndex:ARRAY_SIZE - 1});
sortedEntries.forEach((entry, index) => { sortedEntries.forEach((entry, index) => {
colors[entry.at255].copy(entry.color); colors[entry.arrayIndex].copy(entry.color);
if (index + 1 < sortedEntries.length) { if (index + 1 < sortedEntries.length) {
const nextEntry = sortedEntries[index + 1]; const nextEntry = sortedEntries[index + 1];
const diff = nextEntry.at255 - entry.at255; const diff = nextEntry.arrayIndex - entry.arrayIndex;
for (let i = 0; i < diff; i++) { for (let i = 0; i < diff; i++) {
colors[entry.at255 + i].lerpVectors(entry.color, nextEntry.color, i / diff); colors[entry.arrayIndex + i].lerpVectors(entry.color, nextEntry.color, i / diff);
} }
} }
}); });

View File

@@ -4,7 +4,9 @@ const makeMatrixRenderer = (renderer, texture, {
animationSpeed, fallSpeed, cycleSpeed, animationSpeed, fallSpeed, cycleSpeed,
glyphSequenceLength, glyphSequenceLength,
numGlyphColumns, numGlyphColumns,
hasThunder hasThunder,
hasSun,
isPolar
}) => { }) => {
const matrixRenderer = {}; const matrixRenderer = {};
const camera = new THREE.OrthographicCamera( -0.5, 0.5, 0.5, -0.5, 0.0001, 10000 ); const camera = new THREE.OrthographicCamera( -0.5, 0.5, 0.5, -0.5, 0.0001, 10000 );
@@ -41,6 +43,10 @@ const glyphVariable = gpuCompute.addVariable(
return fract(sin(sn) * c); return fract(sin(sn) * c);
} }
highp float blast( const in float x, const in float power ) {
return pow(pow(pow(x, power), power), power);
}
void main() { void main() {
vec2 cellSize = 1.0 / resolution.xy; vec2 cellSize = 1.0 / resolution.xy;
@@ -62,17 +68,22 @@ const glyphVariable = gpuCompute.addVariable(
float newBrightness = 3.0 * log(value * 1.25); float newBrightness = 3.0 * log(value * 1.25);
#ifdef hasThunder #ifdef hasSun
float thunder = 10.0 * (pow(pow(sin(SQRT_5 * simTime), 10.0), 10.0) + pow(pow(sin(SQRT_2 * simTime), 10.0), 10.0)) + 0.6; newBrightness = pow(fract(newBrightness * 0.5), 3.0) * uv.y * 2.0;
#endif
newBrightness *= thunder; #ifdef hasThunder
vec2 distVec = (gl_FragCoord.xy / resolution.xy - vec2(0.5, 1.0)) * vec2(1.0, 2.0);
float thunder = (blast(sin(SQRT_5 * simTime * 2.0), 10.0) + blast(sin(SQRT_2 * simTime * 2.0), 10.0));
thunder *= 20.0 * (1.0 - 1.5 * length(distVec));
newBrightness *= max(0.0, thunder) * 0.4 + 0.6;
if (newBrightness > brightness) { if (newBrightness > brightness) {
brightness = newBrightness; brightness = newBrightness;
} else { } else {
brightness = mix(brightness, newBrightness, brightnessChangeBias * 0.1); brightness = mix(brightness, newBrightness, brightnessChangeBias * 0.1);
} }
brightness = min(1.0, brightness);
#else #else
brightness = mix(brightness, newBrightness, brightnessChangeBias); brightness = mix(brightness, newBrightness, brightnessChangeBias);
#endif #endif
@@ -84,7 +95,7 @@ const glyphVariable = gpuCompute.addVariable(
float symbolX = mod(symbol, numGlyphColumns); float symbolX = mod(symbol, numGlyphColumns);
float symbolY = ((numGlyphColumns - 1.0) - (symbol - symbolX) / numGlyphColumns); float symbolY = ((numGlyphColumns - 1.0) - (symbol - symbolX) / numGlyphColumns);
gl_FragColor = vec4(1.0); gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
gl_FragColor.r = brightness; gl_FragColor.r = brightness;
gl_FragColor.g = cycle; gl_FragColor.g = cycle;
gl_FragColor.b = symbolX / numGlyphColumns; gl_FragColor.b = symbolX / numGlyphColumns;
@@ -96,7 +107,7 @@ const glyphVariable = gpuCompute.addVariable(
); );
gpuCompute.setVariableDependencies( glyphVariable, [ glyphVariable ] ); gpuCompute.setVariableDependencies( glyphVariable, [ glyphVariable ] );
const brightnessChangeBias = animationSpeed == 0 ? 1 : Math.min(1, Math.abs(animationSpeed)); const brightnessChangeBias = (animationSpeed * fallSpeed) == 0 ? 1 : Math.min(1, Math.abs(animationSpeed * fallSpeed));
Object.assign(glyphVariable.material.uniforms, { Object.assign(glyphVariable.material.uniforms, {
now: { type: "f", value: 0 }, now: { type: "f", value: 0 },
delta: { type: "f", value: 0.01 }, delta: { type: "f", value: 0.01 },
@@ -110,6 +121,9 @@ const glyphVariable = gpuCompute.addVariable(
if (hasThunder) { if (hasThunder) {
glyphVariable.material.defines.hasThunder = 1.0; glyphVariable.material.defines.hasThunder = 1.0;
} }
if (hasSun) {
glyphVariable.material.defines.hasSun = 1.0;
}
const error = gpuCompute.init(); const error = gpuCompute.init();
if ( error !== null ) { if ( error !== null ) {
@@ -140,6 +154,7 @@ const glyphVariable = gpuCompute.addVariable(
} }
`, `,
fragmentShader: ` fragmentShader: `
#define PI 3.14159265359
#ifdef GL_OES_standard_derivatives #ifdef GL_OES_standard_derivatives
#extension GL_OES_standard_derivatives: enable #extension GL_OES_standard_derivatives: enable
#endif #endif
@@ -159,17 +174,26 @@ const glyphVariable = gpuCompute.addVariable(
void main() { void main() {
#ifdef isPolar
vec2 diff = vUV - vec2(0.5, 1.25);
float radius = length(diff);
float angle = atan(diff.y, diff.x) + PI;
vec2 uv = vec2(angle / PI, 1.0 - pow(radius * 0.75, 0.6));
#else
vec2 uv = vUV;
#endif
// Unpack the values from the glyph texture // Unpack the values from the glyph texture
vec4 glyph = texture2D(glyphs, vUV); vec4 glyph = texture2D(glyphs, uv);
float brightness = glyph.r; float brightness = glyph.r;
vec2 symbolUV = glyph.ba; vec2 symbolUV = glyph.ba;
vec4 sample = texture2D(msdf, fract(vUV * numColumns) / numGlyphColumns + symbolUV); vec4 sample = texture2D(msdf, fract(uv * numColumns) / numGlyphColumns + symbolUV);
// The rest is straight up MSDF // The rest is straight up MSDF
float sigDist = median(sample.r, sample.g, sample.b) - 0.5; float sigDist = median(sample.r, sample.g, sample.b) - 0.5;
float alpha = clamp(sigDist/fwidth(sigDist) + 0.5, 0.0, 1.0); float alpha = clamp(sigDist/fwidth(sigDist) + 0.5, 0.0, 1.0);
float dscale = 0.353505 / sharpness; float dscale = 0.353505 / sharpness;
vec2 duv = dscale * (dFdx(vUV) + dFdy(vUV)); vec2 duv = dscale * (dFdx(uv) + dFdy(uv));
float isBigEnough = max(abs(duv.x), abs(duv.y)); float isBigEnough = max(abs(duv.x), abs(duv.y));
if (isBigEnough > BIG_ENOUGH) { if (isBigEnough > BIG_ENOUGH) {
float ratio = BIG_ENOUGH / isBigEnough; float ratio = BIG_ENOUGH / isBigEnough;
@@ -183,6 +207,13 @@ const glyphVariable = gpuCompute.addVariable(
` `
}) })
); );
if (isPolar) {
mesh.material.defines.isPolar = 1.0;
}
// mesh.material = new THREE.MeshBasicMaterial({map: glyphRTT});
scene.add( mesh ); scene.add( mesh );
let start = NaN; let start = NaN;

View File

@@ -1,2 +1,3 @@
./msdfgen/out/msdfgen msdf -svg ./svg\ sources/texture_simplified.svg -size 512 512 -pxrange 4 -o ./matrixcode_msdf.png ./msdfgen/out/msdfgen msdf -svg ./svg\ sources/texture_simplified.svg -size 512 512 -pxrange 4 -o ./matrixcode_msdf.png
./msdfgen/out/msdfgen msdf -svg ./svg\ sources/gothic_texture_simplified.svg -size 512 512 -pxrange 4 -o ./gothic_msdf.png ./msdfgen/out/msdfgen msdf -svg ./svg\ sources/gothic_texture_simplified.svg -size 512 512 -pxrange 4 -o ./gothic_msdf.png
./msdfgen/out/msdfgen msdf -svg ./svg\ sources/coptic_texture_simplified.svg -size 512 512 -pxrange 4 -o ./coptic_msdf.png

View File

@@ -0,0 +1,150 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.1.0, 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 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<path d="M51.7,41.6c-0.9,0.6-1.8,1.2-2.9,1.9c-1.6,1-2.5,1.5-2.8,1.5c-1.4,0-3.2-1.3-5.4-3.9c-1.6-1.9-3-3.9-4.1-5.8
c-4,5.5-10.2,8.3-18.4,8.3c-1.9,0-3.6-0.3-4.9-0.8l-0.8-1.6c4.4-2.8,7.9-5.6,10.4-8.4c2.5-2.8,4.8-6.3,6.9-10.5
c-1.1-2.1-1.9-3.5-2.4-4.2c-1.3-2.1-2.3-3.1-3-3.3l-0.9-1.3c3.2-2.3,5.3-3.4,6.2-3.4c0.7,0,1.9,1.6,3.7,4.8c1.2,2.2,3,5.6,5.5,10.3
c5.4,9.9,9.4,15,12,15.1L51.7,41.6z M34.4,31.9c-0.5-1-1.2-2.4-2.2-4.4C28.6,32,24.6,35.7,20,38.6c1.2,0.9,2.7,1.3,4.4,1.3
c2.2,0,4.5-0.9,6.7-2.7C33.3,35.5,34.4,33.7,34.4,31.9z M108.8,35.8c0,3-1.4,5.1-4.1,6.4c-1.9,0.9-4.8,1.3-8.7,1.4
c-2.1,0.1-5,0.1-8.8,0.1c-1.6,0-2.5-1.2-2.6-3.7v-1.4V16c0-1.4-0.4-2.2-1.2-2.5l-0.3-1.8c3.7-0.7,5.8-1,6.2-1c0.9,0,1.5,0.5,2.1,1.4
c3.4-1.5,6.6-2.2,9.6-2.2c3.3,0,5,1.2,5,3.5c0,2.1-1.5,4.2-4.4,6.3c-1.2,0.9-3.6,2.2-7.3,4.1C104,26.1,108.8,30.1,108.8,35.8z
M98.6,15.5c0-1.6-1-2.3-3.1-2.3c-1.1,0-2.3,0.4-3.6,1.2v8.4C96.4,19.9,98.6,17.5,98.6,15.5z M101.3,35.8c0-2.7-2.4-5.5-7.2-8.3
c-0.5-0.3-1.2-0.6-2.2-1.1v12.2c0,2.1,1.6,3.1,4.7,3.1C99.7,41.8,101.3,39.8,101.3,35.8z M174.8,13.3c0,1.7-0.3,2.9-0.9,3.4
l-7.6,1.3l-0.3-1.9c0.4,0,0.7-0.3,0.7-0.9c0-1.3-0.7-1.9-2.2-1.9H154v26.9c0,1.2,0.3,1.9,0.9,1.9l0.3,1.8c-0.7,0.2-1.7,0.4-3.2,0.8
c-1.5,0.4-2.4,0.5-2.8,0.5c-1.7,0-2.6-1.7-2.6-5V15.2c0-1.4-0.4-2.2-1.2-2.4l-0.3-1.8c3.8-0.6,6-1,6.4-1c0.5,0,1.2,0.2,2,0.5
c0.9,0.3,1.5,0.5,2,0.5h12.2c0.6,0,1.5-0.1,2.7-0.3c1.2-0.2,2.1-0.3,2.7-0.3c0.5,0,0.9,0.4,1.3,1.2
C174.7,12.3,174.8,12.9,174.8,13.3z M249.1,43.9c0,1.4-0.3,2.3-0.9,2.9l-7.6,1.3l-0.3-1.8c0.4-0.1,0.6-0.4,0.6-0.9
c0-1.3-0.7-1.9-2.1-1.9h-29.7c-1.4,0-2.1,0.6-2.1,1.9c0,0.5,0.2,0.8,0.6,0.9l-0.3,1.8l-7.6-1.3c-0.6-0.6-0.9-1.6-0.9-2.9
c0-0.5,0.1-1.1,0.4-1.9c0.4-0.9,0.8-1.3,1.2-1.3c1.2,0,2.6,0.1,4.1,0.3c1.9-0.9,4.5-4.3,7.8-10.4c2.8-5,4.7-9.1,5.9-12.3
c-1-1.7-1.7-2.8-2-3.5c-0.7-1.5-1.1-2.7-1.1-3.8l7.4-1.2c0.3,1.4,0.8,3,1.6,4.8c4.6,10.1,9.3,17.8,14.2,23.2
c2.1,2.3,3.5,3.4,4.3,3.4c0.5,0,1.2,0,2.2-0.1c1,0,1.7-0.1,2.2-0.1c0.5,0,0.9,0.4,1.3,1.2C249,42.8,249.1,43.4,249.1,43.9z
M233.6,41.1c-1-0.9-2.2-2.5-3.7-4.8c-1.6-2.7-4.1-6.7-7.5-12c-4.8,8.3-8.7,13.9-11.5,16.8H233.6z M304.4,37.2
c-2.7,5.3-7.3,8-13.8,8c-1.9,0-4-0.4-6.3-1.2c-8.4-2.9-12.6-8.4-12.6-16.5c0-4.3,1.8-8.3,5.5-11.8c3.8-3.7,8.3-5.5,13.4-5.5
c4.7,0,8.5,1.4,11.4,4.1c1.6,1.5,2.3,2.9,2.3,4.4v1.1h-7.6c-0.2-5.3-2.2-7.9-6.1-7.9c-0.8,0-1.8,0.2-3,0.7c-2.4,0.9-4.4,2.8-5.8,5.5
c-1.2,2.2-1.9,4.4-2,6.8h14.9c3.5,0,5.2,1.1,5.2,3.4c0,1.2-0.4,2-1.2,2.6h-7.1V29c0.5-0.1,0.7-0.3,0.7-0.7c0-0.9-0.7-1.3-2.1-1.3
h-10.6v0.4c0,3.7,0.8,7,2.3,9.9c2,3.7,4.9,5.6,8.7,5.6c2.1,0,3.7-0.8,4.8-2.4c0.9-1.3,1.4-3,1.4-5h7.6V37.2z M371.5,12.9
c-2.8,5.3-6.5,8-10.9,8c-2.3,0-5.5-1-9.6-3.1c-4.1-2.1-7.3-3.1-9.6-3.1c-1.9,0-3.5,0.8-4.8,2.4c-1.2,1.5-1.8,3-1.8,4.6
c0,1.6,1.2,3.4,3.5,5.4c2.7,2,5.4,4,8.1,5.9c3.2,2.4,5.6,4.7,7.1,6.9c1.6,2.5,2.5,5.4,2.5,8.9c0,4-1.9,6.9-5.8,8.9
c-1.1,0.5-2,0.8-2.8,0.8c-1.4,0-2-0.5-2-1.5c0-0.5,0.2-1,0.5-1.4c0.5,0.1,0.9,0.2,1.3,0.2c1.7,0,3.2-0.7,4.5-1.9
c1.1-1.2,1.7-2.6,1.7-4.1c0-2.4-2.5-5.5-7.5-9.2c-1.9-1.3-3.7-2.7-5.6-4c-2.4-1.8-4.1-3.3-5-4.5c-1.8-2.4-2.7-5.2-2.7-8.7
c0-2.3,0.5-4.4,1.5-6.1c1.3-2.3,3.2-4,5.6-5.4s5.2-2,8.2-2c1.9,0,4.5,0.8,8,2.4c3.5,1.6,6.3,2.4,8.4,2.4c2.1,0,4.1-1.1,6.1-3.3
L371.5,12.9z M430.8,43.8c0,1.4-0.3,2.3-0.9,2.9l-7.6,1.3l-0.3-1.9c0.4-0.1,0.6-0.4,0.6-0.9c0-1.3-0.7-1.9-2.2-1.9
c-0.5,0-3.6,0.1-9.2,0.3c-2.1,0-5.4,0.2-9.7,0.5l-0.4-1.6l19.3-27.4c-2.1,0.7-3.9,1-5.5,1c-7.4,0-11.2-1.8-11.6-5.3l7.5-1.3
c0.2,1.6,0.5,2.7,1.1,3.3c0.7,0.8,1.8,1.1,3.5,1.1c2.1,0,4.6-0.7,7.7-2.2c0.9-0.4,2.4-0.8,4.6-1.1c0.6-0.1,1.6-0.3,3-0.5l0.2,1.6
l-21.2,29.8h6.7c0.8,0,2.1,0,3.7,0c1.6,0,2.9,0,3.7,0c0.6,0,1.5-0.1,2.7-0.3c1.2-0.2,2.1-0.3,2.7-0.3c0.5,0,0.9,0.4,1.3,1.3
C430.7,42.7,430.8,43.3,430.8,43.8z M496.2,43.8c-0.7,0.2-1.7,0.4-3.2,0.8c-1.5,0.4-2.4,0.5-2.8,0.5c-1.7,0-2.6-1.7-2.6-5V28.3
h-14.9v11.9c0,1.2,0.3,1.9,0.9,1.9l0.3,1.8c-0.7,0.2-1.7,0.4-3.2,0.8c-1.5,0.4-2.4,0.5-2.8,0.5c-1.7,0-2.6-1.7-2.6-5V15.2
c0-1.4-0.4-2.2-1.2-2.4l-0.3-1.8c3.8-0.6,6-1,6.4-1c0.8,0,1.4,0.4,1.9,1.2c0.4,0.6,0.5,1.3,0.5,2v12.8h14.9v-11
c0-1.3-0.4-2.1-1.2-2.3l-0.2-1.8c3.8-0.6,6-1,6.4-1c1.6,0,2.4,1.1,2.4,3.2v26.9c0,1.3,0.3,1.9,0.9,1.9L496.2,43.8z M51.1,91.4
c0,4.8-1.8,9-5.3,12.4c-3.7,3.6-8.3,5.3-14,5.3c-5.5,0-10-1.8-13.7-5.5c-3.5-3.5-5.2-7.5-5.2-12.2c0-4.3,1.8-8.2,5.5-11.8
c3.8-3.7,8.3-5.6,13.4-5.6c5.3,0,9.9,1.8,13.7,5.4C49.2,83,51.1,86.9,51.1,91.4z M43.2,90.3c-0.2-3.6-1.1-6.6-2.8-9.2
c-2.1-3.2-4.9-4.8-8.6-4.8c-3.4,0-6.1,1.7-8.1,5c-1.6,2.6-2.5,5.6-2.7,9H43.2z M43.2,92.5H20.9c0.2,3.6,1.1,6.7,2.6,9.3
c2,3.3,4.7,5,8.3,5c3.8,0,6.7-1.6,8.7-4.9C42.1,99.4,43,96.3,43.2,92.5z M101,107.8c-0.7,0.2-1.7,0.4-3.2,0.8
c-1.5,0.4-2.4,0.5-2.8,0.5c-1.7,0-2.6-1.7-2.6-5V79.2c0-1.4-0.4-2.2-1.2-2.4L91,75c3.8-0.6,6-1,6.4-1c0.8,0,1.4,0.4,1.9,1.2
c0.4,0.6,0.5,1.3,0.5,2v26.9c0,1.3,0.3,1.9,0.9,1.9L101,107.8z M178.6,107.7c-3.2,1-5.9,1.4-8.1,1.4c-1.8,0-4.8-2.4-8.8-7.3
c-1.4-1.6-2.7-3.3-4-4.9c-1.9-2.2-3.4-3.6-4.4-4.2c-0.7-0.4-1.4-0.6-2.1-0.6c-0.5,0-0.8,0.1-0.8,0.4v11.6c0,1.3,0.3,2,0.9,2l0.3,1.7
c-0.7,0.2-1.7,0.4-3.2,0.8c-1.5,0.4-2.4,0.5-2.8,0.5c-1.7,0-2.6-1.7-2.6-5V79.2c0-1.4-0.4-2.2-1.2-2.4l-0.3-1.8c3.8-0.6,6-1,6.4-1
c0.8,0,1.4,0.4,1.9,1.2c0.4,0.6,0.5,1.3,0.5,2v12.9l2.1-0.6c3-0.9,5.6-2.7,7.7-5.4c2.1-2.6,3.2-5.3,3.3-8.1l7.3-2.1
c0.3,1.1,0.5,1.8,0.5,2.2c0,1.7-1.7,4-5,6.9c-2.4,2.1-5.1,4-8.1,5.8c1.5,0.3,4.2,2.9,8.4,7.8c2.2,2.6,3.7,4.3,4.3,5
c2.1,2.3,3.7,3.7,4.8,4.1c0.8,0.3,1.6,0.4,2.5,0.3L178.6,107.7z M242.2,107.6c-0.8,0.2-2,0.5-3.6,0.9c-1.7,0.4-2.7,0.6-3.3,0.6
c-1.6,0-5.8-5.7-12.5-17l-8.8,13.5l-7.6,3.3l-0.6-1.4l14.9-19c-1.2-2.1-2.3-4.2-3.5-6.2c-1.7-3-3-4.8-3.8-5.5l-0.2-1.7
c3.5-0.7,5.8-1.1,7-1.1c0.4,0,1.1,0.7,2.1,2.2c0.6,0.9,1.6,2.6,3.1,5.2c2.6,4.6,5.1,9.1,7.7,13.7c4.3,7.1,7.3,10.7,9,10.8
L242.2,107.6z M308.2,107.8c-0.7,0.2-1.7,0.4-3.2,0.8c-1.5,0.4-2.4,0.5-2.8,0.5c-1.7,0-2.6-1.7-2.6-5V87.5
c-5.5,6.4-9.6,9.7-12.1,9.7c-0.8,0-1.5-0.2-2.1-0.5c-0.9-0.5-2.2-2-4-4.5c-1.2-1.8-2.4-3.6-3.7-5.3c-0.3-0.4-0.8-1.1-1.3-2v19.3
c0,1.3,0.3,2,0.9,2l0.3,1.7c-0.2,0.1-1.2,0.3-3,0.8c-1.4,0.4-2.3,0.5-2.7,0.5c-1.7,0-2.6-1.7-2.6-5V79.2c0-1.4-0.4-2.2-1.2-2.4
l-0.3-1.8c3.8-0.7,5.8-1,6.1-1c1.1,0,2,0.4,2.7,1.1c1.2,1.4,2.9,3.8,5.1,7.2c2.6,4.1,4.3,6.7,5,7.7c1.3,1.8,2.3,2.7,3,2.7
c0.8,0,2-0.9,3.6-2.6c1.6-1.7,2.9-3.6,4.1-5.7c1.4-2.6,2.1-4.4,2.1-5.3c0-1.4-0.4-2.2-1.1-2.4l-0.3-1.8c3.8-0.6,6-1,6.4-1
c1.6,0,2.4,1.1,2.4,3.2v26.9c0,1.3,0.3,2,1,2L308.2,107.8z M368.6,107.8c-0.7,0.2-1.7,0.4-3.2,0.8c-1.5,0.4-2.4,0.5-2.8,0.5
c-1.2,0-2.2-0.7-3-1.9l-15.5-28v25c0,1.2,0.3,1.9,0.9,1.9l0.3,1.8c-0.7,0.2-1.7,0.4-3.2,0.8c-1.5,0.4-2.4,0.5-2.8,0.5
c-1.7,0-2.6-1.7-2.6-5V79.2c0-1.4-0.4-2.2-1.2-2.4l-0.3-1.8c3.8-0.7,5.9-1,6.4-1c1.7,0,2.9,0.5,3.5,1.6l14.8,26.9V79.1
c0-1.3-0.4-2.1-1.2-2.3l-0.3-1.8c3.8-0.6,6-1,6.4-1c0.8,0,1.4,0.4,1.9,1.2c0.4,0.6,0.5,1.3,0.5,2v26.9c0,1.3,0.3,1.9,0.9,1.9
L368.6,107.8z M431.8,108.8c0,1.4-0.5,2.2-1.5,2.4l-7,1.6l-0.4-1.7c1.1-0.4,1.7-1.1,1.7-2.1c0-1.4-2-2.1-6.1-2.1
c-7.2,0-13.2,0.8-17.9,2.3l-0.4-1.8c4-2,7.5-4.1,10.6-6.4c4.4-3.2,6.5-6,6.5-8.3c0-2.4-1.1-3.6-3.2-3.6c-2,0-4.1,0.8-6.3,2.4
l-7.3,1.3l-0.2-1.9l16.1-11.3c-1,0.2-1.9,0.4-2.6,0.4c-3,0-5.2-0.2-6.6-0.7c-2.2-0.8-3.5-2.3-3.7-4.6l7.5-1.3c0.2,1.5,0.4,2.5,0.6,3
c0.5,0.9,1.4,1.4,2.7,1.4c2.1,0,4.6-0.7,7.6-2.2c0.9-0.4,2.4-0.8,4.6-1.1c0.6-0.1,1.6-0.3,3-0.5l0.2,1.6l-16.1,11.7l0.5-0.1
c0.5-0.1,1-0.2,1.6-0.2c6.1,0,9.2,2.1,9.2,6.4c0,2-2,4.3-6.1,6.9c-3,1.9-6.7,3.8-10.9,5.5c4.6-0.8,8.2-1.1,11-1.1h3.5
c3.3,0,5.9,0.5,7.7,1.5C431.2,106.8,431.8,107.7,431.8,108.8z M499.1,91.4c0,4.8-1.8,9-5.3,12.4c-3.7,3.6-8.3,5.3-14,5.3
c-5.5,0-10-1.8-13.7-5.5c-3.5-3.5-5.2-7.5-5.2-12.2c0-4.3,1.8-8.2,5.5-11.8c3.8-3.7,8.3-5.6,13.4-5.6c5.3,0,9.9,1.8,13.7,5.4
C497.2,83,499.1,86.9,499.1,91.4z M491.2,91.4c0-3.6-0.8-6.9-2.5-9.7c-2.1-3.6-5-5.4-8.9-5.4c-3.6,0-6.5,1.9-8.5,5.6
c-1.6,2.9-2.4,6.1-2.4,9.5c0,3.7,0.8,7,2.3,9.9c2,3.7,4.9,5.6,8.7,5.6c4,0,7.1-1.8,9.1-5.5C490.4,98.6,491.2,95.3,491.2,91.4z
M48.8,140.8c-1,0.4-1.5,1.4-1.5,2.8v24.6c0,1.2,0.3,1.9,0.9,1.9l0.3,1.8c-0.7,0.2-1.7,0.4-3.2,0.8c-1.5,0.4-2.4,0.5-2.8,0.5
c-1.7,0-2.6-1.7-2.6-5v-24.4c0-1.6-0.3-2.4-1-2.4H24.1v26.9c0,1.2,0.3,1.9,0.9,1.9l0.3,1.8c-0.7,0.2-1.7,0.4-3.2,0.8
c-1.5,0.4-2.4,0.5-2.8,0.5c-1.7,0-2.6-1.7-2.6-5v-24.9c0-1.4-0.4-2.2-1.2-2.4l-0.3-1.8c3.8-0.6,6-1,6.4-1c0.5,0,1.2,0.2,2,0.5
c0.9,0.3,1.5,0.5,2,0.5h12.8c0.1,0,0.1,0,0.2,0c3.8-0.6,5.9-1,6.2-1c0.4,0,1.8,0.4,3.9,1.1V140.8z M108.1,146.8
c0,3.7-2.2,6.4-6.7,8.2c-2.2,0.9-5.2,1.3-9,1.3v17c0,1.3,0.3,2,0.9,2l0.3,1.7c-0.6,0.2-1.6,0.4-2.8,0.7c-1.3,0.3-2.2,0.4-2.8,0.4
c-1.7,0-2.6-1.5-2.6-4.5v-30.3c0-1.4-0.4-2.2-1.2-2.5l-0.3-1.8c3.9-0.5,5.9-0.7,6-0.7c0.6,0,1.2,0.3,1.7,0.9
c1.7-0.8,3.4-1.1,5.3-1.1c3.4,0,6,0.7,8,2.2C107,141.8,108.1,144,108.1,146.8z M100.5,146.8c0-1.5-0.5-2.9-1.6-4.1
c-1.2-1.3-2.7-2-4.6-2c-0.6,0-1.2,0.2-1.9,0.6c0,0.2,0,0.4,0,0.7v12c0.5,0,1.2-0.2,2.1-0.4C98.5,152.5,100.5,150.2,100.5,146.8z
M176.4,163.5c-0.2,2.7-1.8,5-4.9,6.9c-2.8,1.8-5.8,2.7-9,2.7c-5.5,0-10-1.8-13.7-5.5c-3.5-3.5-5.2-7.5-5.2-12.2
c0-4.3,1.8-8.2,5.5-11.8c3.8-3.7,8.3-5.6,13.4-5.6c3.4,0,6.4,0.9,9.1,2.6c2.9,1.9,4.4,4.2,4.6,7.1h-7.6c-0.2-4.9-2.2-7.4-6.1-7.4
c-3.6,0-6.4,1.8-8.5,5.5c-1.6,2.9-2.5,6.1-2.5,9.6c0,3.7,0.8,7,2.3,9.9c2,3.7,4.9,5.6,8.7,5.6c2.1,0,3.7-0.8,4.8-2.4
c0.9-1.3,1.4-3,1.4-5H176.4z M245.5,141.4c0,0.6-0.2,1.6-0.7,3.1c-0.5,1.6-0.9,2.6-1.3,2.9c-0.5,0.5-1.8,0.8-3.9,0.8
c-0.3,0-0.7,0-1.3,0c-0.6,0-1.1,0-1.5,0v-1.6c0-0.1,0.5-1.6,1.4-4.5h-10.4v24.6c0,0.9-0.4,1.6-1.1,2.1l-6.1,4.7l-0.9-1.4
c0.5-1.1,0.8-2.1,0.8-3v-27h-10.5c1,2.7,1.4,4.5,1.4,5.5c0,0.2,0,0.4-0.1,0.6c-0.3,0-0.8,0-1.5,0c-0.6,0-1,0-1.3,0
c-2.1,0-3.4-0.3-3.9-0.8c-0.4-0.4-0.8-1.3-1.3-2.9c-0.5-1.5-0.7-2.5-0.7-3.1v-1.6h43V141.4z M310.2,140.3c0,0.4,0,0.8-0.1,1.2
c-0.3,2.3-0.4,3.5-0.4,3.8c-0.3,0.3-1,0.7-2,1.1c-1.1,0.4-1.8,0.5-2.3,0.5c-0.7,0-1.2-0.4-1.6-1.3l-11,14.1v16.2
c0,0.9-0.3,1.5-1,2.1l-6.1,4.7l-0.9-1.5c0.4-0.9,0.7-1.9,0.7-2.9v-18.7l-14.2-16.2l-4.4,0.7l-1-6.4l7.3-1.2l16.8,23l13.2-17
c-0.1-0.6-0.1-1.3-0.1-2c0-0.5,0.1-1,0.2-1.3l6.9-1.2C310.1,139.3,310.2,140.1,310.2,140.3z M375.8,155.5c0,0.9-0.6,2.4-1.9,4.5
c-4.2,6.9-10.4,10.8-18.8,11.7v5c0,0.8-0.4,1.5-1.1,2.1l-5.8,4.8l-0.9-1.5c0.7-1.2,1.1-2.3,1.1-3.4v-7c-3.8-0.6-7.5-2.1-11-4.4
c-3.4-2.3-6-4.9-7.8-7.9c-1-1.6-1.5-2.9-1.5-3.8c0-0.9,0.5-2.2,1.5-3.8c1.8-3,4.4-5.5,7.8-7.8c3.5-2.3,7.2-3.7,11-4.2v-0.9
c0-1.4-0.4-2.2-1.2-2.5l-0.3-1.8c3.2-0.6,5.1-1,5.7-1c0.8,0,1.5,0.4,2,1.2c0.4,0.7,0.5,1.3,0.5,2v2.8c3.9,0.4,7.1,1.4,9.8,2.9
c4.8,2.7,8,6,9.8,9.9C375.5,153.9,375.8,154.9,375.8,155.5z M348.5,169.3V142c-1.8,0.5-4,2-6.4,4.4c-2,2-3.8,4.1-5.3,6.4
c-0.8,1.2-1.2,2.1-1.2,2.6c0,0.5,0.3,1.5,0.9,2.8C339.3,164.3,343.3,168,348.5,169.3z M368.4,155.5c0-0.4-0.3-1.2-1-2.4
c-3.4-6.6-7.5-10.4-12.2-11.2v27.6c5-0.8,9-4.3,12-10.6C368,157,368.4,155.9,368.4,155.5z M436.1,144.6l-6.5,3.7l-0.8-1.6
c0-0.2,0-0.4,0-0.5c0-1.2-0.4-1.9-1.1-2c-1.5,0.5-3.1,1.7-4.7,3.3c-1.3,1.5-2.6,3-3.9,4.4c2.5,3.3,5,6.6,7.5,9.9
c3.6,4.5,6.4,7.3,8.4,8.3l0.2,1.6c-0.8,0.2-2,0.5-3.7,0.9c-1.7,0.4-2.8,0.6-3.5,0.6c-1,0-5.5-5.2-13.5-15.7c-3.7,5-6.4,9.2-8.3,12.5
l-7.7,3.3l-0.6-1.4c6.1-7.4,10.9-13,14.6-16.8c-2.6-3.5-5.1-7.1-7.4-10.8c-0.3-0.9-1-2.1-1.9-3.7c-0.2-0.2-0.6-0.4-1-0.4
c-0.7,0-1.1,0.7-1.1,2.1c0,0.5,0.3,1.2,0.8,2c0.5,0.9,1,1.3,1.6,1.4l0.2,1.6l-7.4,1.3c-0.4-1-0.5-1.9-0.5-2.7c0-2,0.9-3.9,2.7-5.5
c1.8-1.6,3.8-2.4,6.2-2.4c2.4,0,6.7,3.9,12.7,11.8c7.6-7.9,12.9-11.8,15.8-11.8C435,138,435.9,140.2,436.1,144.6z M507.4,139.6
l-5.7,6.1l-1.1-1.4c0-0.2,0-0.4-0.1-0.5c-0.3-1.4-0.7-2-1.4-1.8c-1,0.2-2.3,1.7-3.9,4.6l-10.3,17.3v12c0,0.9-0.4,1.6-1.1,2.1
l-5.9,4.8l-1-1.5c0.8-1.6,1.2-2.8,1.2-3.4v-13.2l-1.4-0.3c-2.3-0.5-4.3-1.4-5.9-2.7c-2.5-2.1-5.5-7.3-8.9-15.8
c-0.1-0.6-0.3-1.6-0.7-2.9c-0.2-1-0.7-1.5-1.4-1.7c-0.7-0.2-1.2,0.4-1.5,1.8c-0.1,0.5,0,1.2,0.3,2.1c0.3,1,0.8,1.6,1.3,1.7l-0.1,1.7
l-7.5-0.3c-0.1-1.1-0.1-2,0-2.7c0.4-2,1.7-4.8,3.7-6c2.1-1.2,4.3-1.6,6.6-1.1c3.3,0.7,6.4,4.5,9.2,11.5c0.8,2.1,1.7,4.2,2.5,6.3
c1.3,2.9,2.4,4.9,3.7,5.3v-24.5c0-1.4-0.4-2.2-1.2-2.4l-0.3-1.8c3.2-0.6,5.1-1,5.7-1c0.8,0,1.5,0.4,1.9,1.2c0.4,0.6,0.6,1.3,0.6,2
v23.6l6.1-11c3.5-6.3,6.3-10.4,8.4-12.2c1.2-1,2.5-1.7,3.9-1.9C505,133.4,506.3,135.4,507.4,139.6z M60,219.7c0,2.8-0.7,5.3-2,7.4
c-1.8,2.8-4.3,5.2-7.6,7.1c-3.5,2-7.1,3-10.7,3c-4.8,0-8-0.9-9.6-2.7c-1.5,1.8-3.8,2.7-6.9,2.7c-5.5,0-10.1-1.8-13.8-5.3
c-3.5-3.4-5.3-7.4-5.3-12.2c0-2.4,0.8-5.1,2.5-8.2s3.6-5.3,5.8-6.9c1.1-0.8,2-1.2,2.8-1.4l7.2-1.2l0.2,1.7c-3.8,0.8-6.6,3-8.5,6.5
c-1.7,3.1-2.5,6.3-2.5,9.4c0,3.3,0.5,6,1.5,8c1,2,2.3,3.6,4,4.9c2,1.5,4.1,2.3,6.4,2.3c1.8,0,3.2-0.6,4.2-1.9
c0.8-1.1,1.2-2.5,1.2-4.1v-18.8c0-1.4-0.4-2.2-1.2-2.5l-0.3-1.8c3.9-0.7,6.1-1,6.4-1c0.8,0,1.4,0.4,1.9,1.2c0.4,0.6,0.5,1.3,0.5,2
v23.9c0,1.9,1.1,2.9,3.3,2.9c3.7,0,6.9-1.8,9.4-5.5c2.2-3.1,3.3-6.4,3.3-9.7c0-2.8-0.6-5.5-1.8-8.3c-1.4-3.4-3.4-5.6-5.8-6.6
c-1.1-0.5-2.3-0.8-3.5-1.1l0.2-1.7l7.2,1.2c3,0.5,5.7,2.7,8,6.4C58.9,213.1,60,216.4,60,219.7z M124,219.7c0,4.2-0.6,7.8-1.8,10.7
c-2,4.8-6.3,9.7-12.9,14.6c-2.7,2-4.6,3.1-5.7,3.3l-7.4,1.4l-0.3-1.8c5.9-1.2,10.7-4,14.3-8.5c1.2-1.5,2.1-2.9,2.7-4.2
c-2.7,1.2-5.8,1.8-9.2,1.8c-4.8,0-8-0.9-9.6-2.7c-1.5,1.8-3.8,2.7-6.9,2.7c-5.5,0-10.1-1.8-13.8-5.3c-3.5-3.4-5.3-7.4-5.3-12.2
c0-2.4,0.8-5.1,2.5-8.2s3.6-5.3,5.8-6.9c1.1-0.8,2-1.2,2.8-1.4l7.2-1.2l0.2,1.7c-3.8,0.8-6.6,3-8.5,6.5c-1.7,3.1-2.5,6.3-2.5,9.4
c0,3.3,0.5,6,1.5,8c1,2,2.3,3.6,4,4.9c2,1.5,4.1,2.3,6.4,2.3c1.8,0,3.2-0.6,4.2-1.9c0.8-1.1,1.2-2.5,1.2-4.1v-18.8
c0-1.4-0.4-2.2-1.2-2.5l-0.3-1.8c3.9-0.7,6.1-1,6.4-1c0.8,0,1.4,0.4,1.9,1.2c0.4,0.6,0.5,1.3,0.5,2v23.9c0,1.9,1.1,2.9,3.3,2.9
c4.3,0,7.4-0.9,9.2-2.8c2.3-2.4,3.5-6.5,3.5-12.4c0-2.8-0.6-5.5-1.8-8.3c-1.4-3.4-3.4-5.6-5.8-6.6c-1.1-0.5-2.3-0.8-3.5-1.1l0.2-1.7
l7.2,1.2c3,0.5,5.7,2.7,8,6.4C122.9,213.1,124,216.4,124,219.7z M175,235.8c-0.7,0.2-1.7,0.4-3.2,0.8c-1.5,0.4-2.4,0.5-2.8,0.5
c-1.7,0-2.6-1.7-2.6-5v-10.9c-1.7,1.9-4.7,2.9-9.1,2.9c-3.4,0-6.3-1-8.7-2.9c-2.4-2-3.6-4.4-3.6-7.2c0-3.1,1.5-5.8,4.4-7.8
c2.5-1.8,5.7-3,9.8-3.7l0.3,1.7c-0.7,0.1-1.5,0.4-2.4,0.9c-3.1,1.8-4.7,4.2-4.7,7.3c0,2.4,0.6,4.5,1.9,6.4c1.5,2.2,3.5,3.4,6.1,3.4
c2.2,0,3.8-1.1,4.8-3.2c0.8-1.6,1.2-3.5,1.2-5.7v-5.9c0-1.4-0.4-2.2-1.2-2.4L165,203c3.8-0.6,5.9-1,6.4-1c0.8,0,1.4,0.4,1.9,1.2
c0.4,0.6,0.5,1.3,0.5,2v26.9c0,1.3,0.3,2,1,2L175,235.8z M243.2,226.4c0,9.3-3.9,15-11.7,17.2c-2.1,0.6-4.5,0.9-7.1,0.9H215
c-1.4,0-2.1,0.6-2.1,1.9c0,0.5,0.2,0.8,0.6,0.9l-0.3,1.8l-7.6-1.3c-0.6-0.5-0.9-1.5-0.9-2.8c0-0.5,0.1-1.1,0.4-1.7
c0.4-0.8,0.8-1.2,1.3-1.2c0.6,0,1.5,0.1,2.7,0.3c1.2,0.2,2.1,0.3,2.7,0.3h12.5c4.4,0,7.7-2.1,9.9-6.4c1-2.1,1.6-4.9,1.6-8.5
c0-6.5-1.6-10.8-4.7-12.9c-0.8-0.6-1.7-0.9-2.5-0.9c-3.3,0-6,1.8-8,5.3v10.7c0,1.3,0.3,2,0.9,2l0.3,1.8c-0.1,0-1.1,0.3-3.2,0.8
c-1.5,0.4-2.4,0.5-2.9,0.5c-1.7,0-2.6-1.7-2.6-5.1v-22.7c0-1.4-0.4-2.2-1.2-2.4l-0.2-1.8c3.8-0.6,6-1,6.4-1c1.6,0,2.4,1.1,2.4,3.2
v8.9c3-1.8,6.6-2.7,11-2.7c1.4,0,2.7,0.4,4,1.1c2.4,1.3,4.4,3.4,5.8,6.2C242.6,221.1,243.2,223.7,243.2,226.4z M299.9,230.2
c0.2,1.2,0.1,2.2-0.2,2.8c-1.3,2.8-4.3,4.1-8.8,4.1c-6.3,0-10.8-2-13.5-5.9c-0.6-0.9-1.1-2.2-1.4-3.9c6.2-2,10.5-4.8,13-8.4
c1.7-2.4,2.5-4.9,2.5-7.5c0-1.5-0.3-3-0.9-4.6c-0.8-2-1.9-3-3.3-3c-2,0-3,1.2-3,3.6c0,0.9,0.4,1.7,1.1,2.5c0.8,0.9,1.7,1.4,2.8,1.4
l0.3,1.8c-3.6,0.8-5.7,1.2-6.4,1.2c-0.3,0-0.8-0.2-1.3-0.6c-2.2-1.6-3.3-3.6-3.3-5.9c0-1.6,1.1-3,3.4-4.2c2-1,4-1.6,6-1.6
c3.4,0,6.1,1.2,8.2,3.6c1.8,2.1,2.7,4.6,2.7,7.5c0,1.7-0.8,3.6-2.4,5.6c-3.1,3.9-7.1,6.6-12,8.2c1,3.6,2.8,6.1,5.2,7.7
c0.6,0.4,1.2,0.6,1.7,0.6c0.9,0,1.7-1.2,2.3-3.7L299.9,230.2z M376.1,235.9c0,1.3-0.3,2.3-0.8,2.9l-7.6,1.3l-0.3-1.8
c0.4-0.2,0.6-0.5,0.6-0.9c0-1.3-0.7-1.9-2.1-1.9h-27.6c-1.4,0-2.1,0.6-2.1,1.9c0,0.4,0.2,0.8,0.6,0.9l-0.3,1.8l-7.6-1.3
c-0.6-0.7-0.9-1.6-0.9-2.9c0-0.5,0.1-1.1,0.4-1.9c0.3-0.9,0.8-1.3,1.2-1.3c0.5,0,1.4,0.1,2.4,0.2c1.1,0.1,1.9,0.2,2.4,0.2
c0.7,0,1.3-0.3,1.8-0.9c2.5-3,6.5-7.5,11.7-13.4c-3.1-4.1-5.6-7.7-7.4-10.8c-0.3-0.9-0.9-2.2-1.9-3.7c-0.3-0.3-0.6-0.4-1-0.4
c-0.8,0-1.1,0.7-1.1,2.1c0,0.5,0.2,1.2,0.7,1.9c0.5,0.9,1.1,1.4,1.6,1.5l0.2,1.6l-7.4,1.3c-0.3-1-0.5-1.8-0.5-2.7
c0-2,0.9-3.9,2.7-5.5c1.8-1.6,3.8-2.4,6.2-2.4c2.4,0,6.7,3.9,12.7,11.8c7.6-7.9,12.9-11.8,15.8-11.8c1.7,0,2.6,2.2,2.8,6.6l-6.5,3.7
l-0.8-1.6c0-0.2,0-0.4,0-0.5c0-1.2-0.4-1.9-1.1-2c-1.5,0.5-3.1,1.7-4.7,3.3c-1.3,1.5-2.6,3-3.9,4.4c2,2.8,5.2,6.9,9.5,12.3
c1.8,2.1,3.2,3.6,4.3,4.5c0.5,0.4,1.1,0.7,1.6,0.7c0.5,0,1.2,0,2.3-0.1c1,0,1.8-0.1,2.3-0.1c0.5,0,0.9,0.4,1.2,1.2
C376,234.8,376.1,235.4,376.1,235.9z M359.3,233.1c-1-1.2-4.1-5.1-9.4-11.9c-3.6,4.9-6.3,8.9-8,11.9H359.3z M434.9,211.7l-7.8,1.8
l-0.4-1.6c0.2-0.9,0.3-1.9,0.3-3c0-1.5-0.6-2.7-1.9-3.6c-1.3-0.9-2.8-1.4-4.7-1.4c-3.6,0-7.1,1.6-10.5,4.7c0.4,0.2,1.1,0.6,2,1.1
c10,5.1,15,10.4,15,15.9c0,4.8-2.2,8.2-6.6,10.1c-2.5,1.1-4.8,1.6-6.9,1.6c-4.4,0-8.3-1.7-11.7-5c-3.2-3.2-4.8-6.6-4.8-10.4
c0-3.5,1.4-7,4.1-10.4c2.6-3.2,5.8-5.7,9.6-7.5c2.8-1.3,5.9-1.9,9.2-1.9c3.3,0,5.9,0.4,7.8,1.1C432.6,204.9,434.9,207.8,434.9,211.7
z M419.6,226.5c0-6-2.7-11-8.1-14.8c-0.9-0.6-1.9-1.3-2.8-1.8c-2.7,3-4,7.1-4,12.1c0,1.6,0.3,3.3,0.9,4.9c0.7,1.9,1.8,3.7,3.1,5.3
c1.8,2.1,3.6,3.1,5.5,3.1c0.5,0,1.1-0.2,1.8-0.5C418.4,233.5,419.6,230.7,419.6,226.5z M501.4,217.6c0,0.6-0.2,1.7-0.7,3.2
c-0.5,1.6-0.9,2.6-1.3,2.9c-0.5,0.5-1.8,0.7-3.9,0.7c-0.3,0-0.7,0-1.3,0c-0.6,0-1.1,0-1.5,0v-1.5c0-0.1,0.5-1.6,1.4-4.5h-10.7v26.9
c0,0.8-0.4,1.5-1.2,2.1l-5.7,4.7l-1-1.5c0.8-1.4,1.2-2.5,1.2-3.3v-29h-10.8c1,2.7,1.4,4.5,1.4,5.4c0,0.2,0,0.4-0.1,0.6
c-0.4,0-0.9,0-1.5,0c-0.6,0-1.1,0-1.3,0c-2.1,0-3.4-0.2-3.9-0.7c-0.4-0.4-0.8-1.3-1.3-2.9c-0.4-1.5-0.7-2.6-0.7-3.2V216h18.2v-9
c0-1.3-0.4-2.1-1.2-2.3l-0.3-1.8c3.2-0.6,5.1-1,5.7-1c0.8,0,1.4,0.4,1.9,1.2c0.4,0.6,0.5,1.3,0.5,2V216h18.1V217.6z"/>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB