问:
How to save data from datagridview to sql database without using a button
I need to save data automatically without pressing any button from datagridview to sql database where admission number and names are retrieved from another table and insert score to another table.</p>

```<code>For Each row As DataGridViewRow In DataGridView1.Rows

        If cmbexam.Text = "CAT 1" And cmbpaper.Text = "Paper 1" Then

            sqlSTR = "SELECT AdmNo, Name, Class, Stream, Term, Exam, Subject, Paper, Limit, Score  FROM CT11 WHERE (AdmNo = '" & row.Cells(0).Value & "') AND (Name = '" & row.Cells(1).Value & "')"
            ExecuteSQLQuery(sqlSTR)

            If sqlDT.Rows.Count > 0 Then

                sqlSTR = "UPDATE CT11 SET AdmNo ='" & row.Cells(0).Value & "', Name ='" & row.Cells(1).Value & "', Class ='" & cmbform.Text & "', Stream ='" & cmbstream.Text & "', Term ='" & cmbterm.Text & "', Exam ='" & cmbexam.Text & "', Subject ='" & cmbsubject.Text & "', Limit ='" & txtlimit.Text & "', Score ='" & row.Cells(2).Value & "'  WHERE (AdmNo = '" & row.Cells(0).Value & "') AND (Name = '" & row.Cells(1).Value & "') AND (Class ='" & cmbform.Text & "') AND (Stream = '" & cmbstream.Text & "') AND (Term = '" & cmbterm.Text & "') AND (Exam = '" & cmbexam.Text & "') AND (Subject = '" & cmbsubject.Text & "')"
                ExecuteSQLQuery(sqlSTR)
            Else

                sqlSTR = "INSERT INTO CT11(AdmNo, Name, Class, Stream, Term, Exam, Subject, SP, Paper, Limit,Score) VALUES ('" & row.Cells(0).Value & "', '" & row.Cells(1).Value & "', '" & cmbform.Text & "', '" & cmbstream.Text & "', '" & cmbterm.Text & "', '" & cmbexam.Text & "', '" & cmbsubject.Text & "', '" & CheckBox2.CheckState & "', 'Paper 1', '" & txtlimit.Text & "','" & row.Cells(2).Value & "')"
                ExecuteSQLQuery(sqlSTR)
            End If

        End If

    Next
</code>```

答:
It's all about Events:

The concept of event-oriented programming is also well suited for the implementation of graphical user interfaces, where the events are mostly user actions, such as pressing a key or clicking a button. Another important field of application are computer simulations, which are set up in such a way that state changes are only triggered by events, and which in turn trigger events (see event-oriented simulation).

Quote from Wikipedia.

I think most developers use the FocusLost-Event to handle Datatransfer if you want to update your database immediately every time you change a value you can try the CellValueChanged-Event.

Body:
I need to save data automatically without pressing any button from datagridview to sql database where admission number and names are retrieved from another table and insert score to another table.

For Each row As DataGridViewRow In DataGridView1.Rows

        If cmbexam.Text = "CAT 1" And cmbpaper.Text = "Paper 1" Then

            sqlSTR = "SELECT AdmNo, Name, Class, Stream, Term, Exam, Subject, Paper, Limit, Score  FROM CT11 WHERE (AdmNo = '" & row.Cells(0).Value & "') AND (Name = '" & row.Cells(1).Value & "')"
            ExecuteSQLQuery(sqlSTR)

            If sqlDT.Rows.Count > 0 Then

                sqlSTR = "UPDATE CT11 SET AdmNo ='" & row.Cells(0).Value & "', Name ='" & row.Cells(1).Value & "', Class ='" & cmbform.Text & "', Stream ='" & cmbstream.Text & "', Term ='" & cmbterm.Text & "', Exam ='" & cmbexam.Text & "', Subject ='" & cmbsubject.Text & "', Limit ='" & txtlimit.Text & "', Score ='" & row.Cells(2).Value & "'  WHERE (AdmNo = '" & row.Cells(0).Value & "') AND (Name = '" & row.Cells(1).Value & "') AND (Class ='" & cmbform.Text & "') AND (Stream = '" & cmbstream.Text & "') AND (Term = '" & cmbterm.Text & "') AND (Exam = '" & cmbexam.Text & "') AND (Subject = '" & cmbsubject.Text & "')"
                ExecuteSQLQuery(sqlSTR)
            Else

                sqlSTR = "INSERT INTO CT11(AdmNo, Name, Class, Stream, Term, Exam, Subject, SP, Paper, Limit,Score) VALUES ('" & row.Cells(0).Value & "', '" & row.Cells(1).Value & "', '" & cmbform.Text & "', '" & cmbstream.Text & "', '" & cmbterm.Text & "', '" & cmbexam.Text & "', '" & cmbsubject.Text & "', '" & CheckBox2.CheckState & "', 'Paper 1', '" & txtlimit.Text & "','" & row.Cells(2).Value & "')"
                ExecuteSQLQuery(sqlSTR)
            End If

        End If

    Next


来源: stackexchange

问:
How to pass a dictionary data in tensorflow function
I am new to tensorflow.
I want to build a 3 layer neural network,

i) I have declared weight W inside tf.function for which it is throwing the following error:

```<code>ValueError: tf.function-decorated function tried to create variables on non-first call.
</code>```

ii) And also I have created a dictionary data of sample_batch which has x :features and y:labels which I want to pass to tf.function and use it later.But I am not understanding how to do it?

Here is a snippet of my code:

```<code> @tf.function

 def forward_pass1(batch):

    print((batch))

    W = tf.Variable(tf.initializers.TruncatedNormal(stddev=np.sqrt(2.0 / 784))(shape=(784,      128)), name="W")

    biases = tf.Variable(tf.zeros(shape=(128)), name="b")

    hidden1 = tf.nn.relu(tf.matmul(batch['x'], W) + biases)

    print(hidden1)

sample_batch = federated_train_data[5][-1]

forward_pass1((sample_batch))

</code>```

Can any one please help?

答:
In your case:

Initialize the variables outside the function and pass it as arguments

```<code>W = tf.Variable(tf.initializers.TruncatedNormal(stddev=np.sqrt(2.0 / 784))(shape=(784,      128)), name="W")

biases = tf.Variable(tf.zeros(shape=(128)), name="b")

</code>```

Your function should be like this:

```<code>@tf.function

 def forward_pass1(batch,W,biases):

    print((batch))

    hidden1 = tf.nn.relu(tf.matmul(batch['x'], W) + biases)

    print(hidden1)

sample_batch = federated_train_data[5][-1]

forward_pass1((sample_batch))
</code>```

The better way is to do in this way as per the Tensorflow Guide:

```<code>from tensorflow.keras import layers

class Linear(layers.Layer):

  def __init__(self, units=128, input_dim=784):
    super(Linear, self).__init__()
    w_init = tf.random_normal_initializer()
    self.W = tf.Variable(initial_value=w_init(shape=(input_dim, units),
                                              dtype='float32'),
                         trainable=True)
    b_init = tf.zeros_initializer()
    self.biases = tf.Variable(initial_value=b_init(shape=(units,),
                                              dtype='float32'),
                         trainable=True)

  def call(self, inputs):
    return tf.nn.relu(tf.matmul(inputs, self.W) + self.biases)

x = tf.ones((2, 2))
linear_layer = Linear(4, 2)
y = linear_layer(x)
print(y)

</code>```

ContentLicense: CC BY-SA 4.0

Body:
I am new to tensorflow.
I want to build a 3 layer neural network,

i) I have declared weight W inside tf.function for which it is throwing the following error:

ValueError: tf.function-decorated function tried to create variables on non-first call.

ii) And also I have created a dictionary data of sample_batch which has x :features and y:labels which I want to pass to tf.function and use it later.But I am not understanding how to do it?

Here is a snippet of my code:

 @tf.function

 def forward_pass1(batch):

    print((batch))

    W = tf.Variable(tf.initializers.TruncatedNormal(stddev=np.sqrt(2.0 / 784))(shape=(784,      128)), name="W")

    biases = tf.Variable(tf.zeros(shape=(128)), name="b")

    hidden1 = tf.nn.relu(tf.matmul(batch['x'], W) + biases)

    print(hidden1)

sample_batch = federated_train_data[5][-1]

forward_pass1((sample_batch))

Can any one please help?

Body:
In your case:

Initialize the variables outside the function and pass it as arguments

W = tf.Variable(tf.initializers.TruncatedNormal(stddev=np.sqrt(2.0 / 784))(shape=(784,      128)), name="W")

biases = tf.Variable(tf.zeros(shape=(128)), name="b")

Your function should be like this:

@tf.function

 def forward_pass1(batch,W,biases):

    print((batch))

    hidden1 = tf.nn.relu(tf.matmul(batch['x'], W) + biases)

    print(hidden1)

sample_batch = federated_train_data[5][-1]

forward_pass1((sample_batch))

The better way is to do in this way as per the Tensorflow Guide:

from tensorflow.keras import layers

class Linear(layers.Layer):

  def __init__(self, units=128, input_dim=784):
    super(Linear, self).__init__()
    w_init = tf.random_normal_initializer()
    self.W = tf.Variable(initial_value=w_init(shape=(input_dim, units),
                                              dtype='float32'),
                         trainable=True)
    b_init = tf.zeros_initializer()
    self.biases = tf.Variable(initial_value=b_init(shape=(units,),
                                              dtype='float32'),
                         trainable=True)

  def call(self, inputs):
    return tf.nn.relu(tf.matmul(inputs, self.W) + self.biases)

x = tf.ones((2, 2))
linear_layer = Linear(4, 2)
y = linear_layer(x)
print(y)


问:
push hash onto array in perl, result defies understanding
Why does this..

```<code>my @menu;

my %el1 = ("element1" => "hello");
push @menu, \%el1;

my %el2 = ("element2" => "world");
push @menu, \%el2;

print to_json({"menu", @menu});
</code>```

produce this..

```<code>{
    "menu": {
        "element1": "hello"
    },
    "HASH(0x18e2280)": null
}
</code>```

and not this..

```<code>{
    "menu": {
        "element1": "hello",
        "element2": "world"
    }
}
</code>```

答:
You have pushed two hash references onto @menu. So when you run this code:

```<code>print to_json({"menu", @menu});
</code>```

It's exactly as if you ran:

```<code>print to_json({ "menu", \%el1, \%el2 });
</code>```

The bit between { ... } is interpreted as a hash so the first and third items are seen as hash keys and the second item is seen as a value. So you get the output that you see. (And, as has been pointed out in comments, you would get a warning under use warnings as that second key has no associated value).

I think that what you wanted to write was:

```<code>print to_json({ "menu", \@menu });
</code>```

But even that isn't right. You get the following:

```<code>{
    "menu":[{
        "element1":"hello"
    },{
        "element2":"world"
    }]
}
</code>```

The two hashes that you added to the array are still quite separate.

But what you actually want is a single hash. So create that instead.

```<code>#!/usr/bin/perl

use strict;
use warnings;
use JSON;
use Data::Dumper;

my @menu;

my %el1 = (
    "element1" => "hello",
    "element2" => "world",
);

print to_json({"menu", \%el1});
</code>```

Body:
Why does this..

my @menu;

my %el1 = ("element1" => "hello");
push @menu, \%el1;

my %el2 = ("element2" => "world");
push @menu, \%el2;

print to_json({"menu", @menu});

produce this..

{
    "menu": {
        "element1": "hello"
    },
    "HASH(0x18e2280)": null
}

and not this..

{
    "menu": {
        "element1": "hello",
        "element2": "world"
    }
}

Body:
You have pushed two hash references onto @menu. So when you run this code:

print to_json({"menu", @menu});

It's exactly as if you ran:

print to_json({ "menu", \%el1, \%el2 });

The bit between { ... } is interpreted as a hash so the first and third items are seen as hash keys and the second item is seen as a value. So you get the output that you see. (And, as has been pointed out in comments, you would get a warning under use warnings as that second key has no associated value).

I think that what you wanted to write was:

print to_json({ "menu", \@menu });

But even that isn't right. You get the following:

{
    "menu":[{
        "element1":"hello"
    },{
        "element2":"world"
    }]
}

The two hashes that you added to the array are still quite separate.

But what you actually want is a single hash. So create that instead.

#!/usr/bin/perl

use strict;
use warnings;
use JSON;
use Data::Dumper;

my @menu;

my %el1 = (
    "element1" => "hello",
    "element2" => "world",
);

print to_json({"menu", \%el1});


问:
Include SASS compiler in build definition in Visual Studio? (and avoid merging the CSS files when using TFS)
We plan on using SASS instead of plain CSS for our SharePoint project very soon. While testing and trying to set everything up, I ran into some problems:

We're using Visual Studio 2015 and on my developer machine I installed the Web Compiler Extension to compile the .scss-files and partial files to a regular .css-file.

That worked very nicely but the problem is, that there will be a few developers working simultaneously on the styles. I want to avoid merging the resulting css-file each time someone tries to check in something into source control (we're using Team Foundation Server).

Since there is a build running every time someone is checking in their changes, and to deploy the resulting solution to the nightly build machine, the idea was to somehow include the SASS compiler in the build definition. This way the more readable scss-files get merged and the build creates the resulting css-file to include it in the solution.
Maybe I'm thinking too complicated, but I just couldn't get that to work so far.

Any ideas how I can achieve that?
(Maybe I should also mention that none of the dev machines got any internet connection)

答:
If you're building an MVC app, you can use MVC's bundling feature along with the SASS NuGet package. And, be sure to enable minification. There's a UseNativeMinification property on SassAndScssSettings. That way you don't need to deal with merging the css file when you get latest or check in. Reference this thread: SASS/TFS best practice

Another way is running a script (e.g with PowerShell task) on the server that to install the gulp components and then call the sass compile task to compile the SASS. Refer to Powershell build - compiling SASS for details.


问:
Extracting a step from a text file and placing into a list with Python
I am opening a txt and assigning every third word to go into a list called three.

I thought this would step correctly, but I am just getting the entire file as a list.

```<code>three=[]

with open('school_prompt.txt', 'r') as f:
    for line in f.split()[::3]:
        three.append(line)
</code>```

答:
You could try something like this making use of enumerate() to keep track of the count and every 3rd word you want:</p>

```<code>three = []
with open('school_prompt.txt', 'r') as f:
   for count, word in enumerate(f, start=1):
      if count % 3 == 0:
        three.append(word)
</code>```

Body:
I am opening a txt and assigning every third word to go into a list called three.

I thought this would step correctly, but I am just getting the entire file as a list.

three=[]

with open('school_prompt.txt', 'r') as f:
    for line in f.split()[::3]:
        three.append(line)

Body:
You could try something like this making use of enumerate() to keep track of the count and every 3rd word you want:

three = []
with open('school_prompt.txt', 'r') as f:
   for count, word in enumerate(f, start=1):
      if count % 3 == 0:
        three.append(word)


问:
How to use val instead of var in scala
I simply want to remove var and use Val instead in below code

```<code>def getConfigId: Long = {
val object1: java.util.List[objectA] = objectRepo.findByUser(User(session.id))

var object2: objectA = null
if (object1.size() == 1) {
  object2 = object1.get(0)
} else if (object1.size() > 1) {
  object2 = object1.get(0)
  object1.forEach(a => if (a.endDate.compareTo(object2.endDate) >= 0) {
    object2 = a
  })
}
object2.configId
}
</code>```

I am trying to use case match, but it's not working

```<code>def getConfigId: Long = {
val object1: java.util.List[objectA] = objectRepo.findByUser(User(session.id))

val object2: objectA = {
  case x if object1.size() == 1 => object1.get(0)

  case x => if (object1.size() > 1) {
    object1.get(0)
    object1.forEach(a => if(a.endDate.compareTo(object2.endDate) >= 0) {
     object2 = a
   })
}
</code>```

答:
Here it is:

```<code>import scala.jdk.javaapi.CollectionConverters

def getConfigId: Long = {
  val values = objectRepo.findByUser(User(session.id))
  val index = values.asScala.map(_.endDate).zipWithIndex.max._2
  values.get(index).configId
}
</code>```

Or:

```<code>import scala.jdk.javaapi.CollectionConverters

def getConfigId: Long =
  objectRepo.findByUser(User(session.id)).asScala.reverse.maxBy(_.endDate).configId
</code>```

Title: How to use val instead of var in scala

Body:
I simply want to remove var and use Val instead in below code

def getConfigId: Long = {
val object1: java.util.List[objectA] = objectRepo.findByUser(User(session.id))

var object2: objectA = null
if (object1.size() == 1) {
  object2 = object1.get(0)
} else if (object1.size() > 1) {
  object2 = object1.get(0)
  object1.forEach(a => if (a.endDate.compareTo(object2.endDate) >= 0) {
    object2 = a
  })
}
object2.configId
}

I am trying to use case match, but it's not working

def getConfigId: Long = {
val object1: java.util.List[objectA] = objectRepo.findByUser(User(session.id))

val object2: objectA = {
  case x if object1.size() == 1 => object1.get(0)

  case x => if (object1.size() > 1) {
    object1.get(0)
    object1.forEach(a => if(a.endDate.compareTo(object2.endDate) >= 0) {
     object2 = a
   })
}

Body:
Here it is:

import scala.jdk.javaapi.CollectionConverters

def getConfigId: Long = {
  val values = objectRepo.findByUser(User(session.id))
  val index = values.asScala.map(_.endDate).zipWithIndex.max._2
  values.get(index).configId
}

Or:

import scala.jdk.javaapi.CollectionConverters

def getConfigId: Long =
  objectRepo.findByUser(User(session.id)).asScala.reverse.maxBy(_.endDate).configId


问:
Stop people uploading malicious PHP files via forms
I have an upload form created in php on my website where people are able to upload a zip file. The zip file is then extracted and all file locations are added to a database. The upload form is for people to upload pictures only, obviously, with the files being inside the zip folder I cant check what files are being uploaded until the file has been extracted. I need a piece of code which will delete all the files which aren't image formats (.png, .jpeg, etc). I'm really worried about people being able to upload malicious php files, big security risk! I also need to be aware of people changing the extensions of php files trying to get around this security feature.

This is the original script I used http://net.tutsplus.com/videos/screencasts/how-to-open-zip-files-with-php/

This is the code which actually extracts the .zip file:

```<code>function openZip($file_to_open) {
    global $target;

    $zip = new ZipArchive();
    $x = $zip->open($file_to_open);
    if($x === true) {
        $zip->extractTo($target);
        $zip->close();

        unlink($file_to_open);
    } else {
        die("There was a problem. Please try again!");
    }
}
</code>```

Thanks, Ben.

答:
First you should forbid every file that doesn’t have a proper image file extension. And after that, you could use the getimagesize function to check whether the files are regular image files.

But furthermore you should be aware that some image formats allow comments and other meta information. This could be used for malicious code such as JavaScript that some browsers will execute under certain circumstances (see Risky MIME sniffing in Internet Explorer).

OwnerDisplayName: Ben McRae

ContentLicense: CC BY-SA 3.0

Body:
I have an upload form created in php on my website where people are able to upload a zip file. The zip file is then extracted and all file locations are added to a database. The upload form is for people to upload pictures only, obviously, with the files being inside the zip folder I cant check what files are being uploaded until the file has been extracted. I need a piece of code which will delete all the files which aren't image formats (.png, .jpeg, etc). I'm really worried about people being able to upload malicious php files, big security risk! I also need to be aware of people changing the extensions of php files trying to get around this security feature.

This is the original script I used http://net.tutsplus.com/videos/screencasts/how-to-open-zip-files-with-php/

This is the code which actually extracts the .zip file:

function openZip($file_to_open) {
    global $target;

    $zip = new ZipArchive();
    $x = $zip->open($file_to_open);
    if($x === true) {
        $zip->extractTo($target);
        $zip->close();

        unlink($file_to_open);
    } else {
        die("There was a problem. Please try again!");
    }
}

Thanks, Ben.

LastEditorDisplayName: gs

OwnerDisplayName: Gumbo

ContentLicense: CC BY-SA 2.5


问:
Running Servlets in Apache Tomcat
I'm working through the Java Ranch Cattle Drive online tutorials and got up to the Servlets projects. I wanted to install and run Apache instead of Orion, because I wanted to learn a more mainstream HTTP server.

I got Apache up and running on my machine (this is a Windows XP/Cygwin environment, so I'm using the Apache package that comes with the latest version of cygwin, currently httpd version 1.3.33)

I'm to the point of directing a browser to http://localhost and the server is correctly fetching the welcome page (index.html) at C:\cygwin\var\www\htdocs.

I've installed Java EE and was able to compile the following Servlet:

```<code>import java.io.* ;
import javax.servlet.http.* ;

public class BeeServlet extends HttpServlet
{

    public void doGet( HttpServletRequest request , HttpServletResponse response )
    {
        response.setContentType("text/html");
        try
        {
            PrintWriter out = response.getWriter();
            out.println( "a-buzz-buzz ..." );
            out.close();
        }
        catch( Exception e )
        {
            System.out.println( "cannot get writer: " + e );
        }
    }

}
</code>```

This compiles into a .class file without errors. My question is, where do I install this file in the server?

The file is called BeeServlet.class and the tutorial says to direct a browser to http://localhost/servlet/BeeServlet after installing the BeeServlet.class in the appropriate directory in the web server.

(EDIT: I've successfully installed Tomcat and have the basic welcome page showing, as explained in the steps below. I'm still not sure where to put the .class file though or how to access it):

Here's are the steps of installing Tomcat and running it through Cygwin:

Go to http://tomcat.apache.org/ and download the latest version of Tomcat (for the above system configuration, select the 32-bit/64-bit Windows Service Installer method, which will create a 9 MB installation at C:\Program Files\Apache Software Foundation\Tomcat 7.0).

Add this path to the Windows system environment variable 'Path'

Start a Cygwin bash shell

type 'tomcat7' (with Path set, it will find this .exe in the above path). This will start the tomcat server.

Start a browser and direct it to http://localhost:8080.  This will bring up the Tomcat welcome screen (which is really Tomcat reading the file: C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\ROOT\index.jsp).

Create new directories under C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps named examples\WEB-INF\classes.

Add a @WebServlet annotation to the source code file (this would be located after any imports): @WebServlet(urlPatterns={"/servlet/BeeServlet"}).  Compile the BeeServlet.java file and place the .class file in C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\examples\WEB-INF\classes\BeeServlet.class

Direct your browser to http://localhost:8080/examples/servlet/BeeServlet

答: Apache is a web server, not a servlet/JSP engine.  Tomcat is a servlet/JSP engine; so is Jetty.  You'll need to deploy your servlets/JSPs on Tomcat and tell Apache to forward requests to your servlets/JSPs to Tomcat.</p>

Title: Running Servlets in Apache Tomcat

Body:
I'm working through the Java Ranch Cattle Drive online tutorials and got up to the Servlets projects. I wanted to install and run Apache instead of Orion, because I wanted to learn a more mainstream HTTP server.

I got Apache up and running on my machine (this is a Windows XP/Cygwin environment, so I'm using the Apache package that comes with the latest version of cygwin, currently httpd version 1.3.33)

I'm to the point of directing a browser to http://localhost and the server is correctly fetching the welcome page (index.html) at C:\cygwin\var\www\htdocs.

I've installed Java EE and was able to compile the following Servlet:

import java.io.* ;
import javax.servlet.http.* ;

public class BeeServlet extends HttpServlet
{

    public void doGet( HttpServletRequest request , HttpServletResponse response )
    {
        response.setContentType("text/html");
        try
        {
            PrintWriter out = response.getWriter();
            out.println( "a-buzz-buzz ..." );
            out.close();
        }
        catch( Exception e )
        {
            System.out.println( "cannot get writer: " + e );
        }
    }

}

This compiles into a .class file without errors. My question is, where do I install this file in the server?

The file is called BeeServlet.class and the tutorial says to direct a browser to http://localhost/servlet/BeeServlet after installing the BeeServlet.class in the appropriate directory in the web server.

(EDIT: I've successfully installed Tomcat and have the basic welcome page showing, as explained in the steps below. I'm still not sure where to put the .class file though or how to access it):

Here's are the steps of installing Tomcat and running it through Cygwin:

Go to http://tomcat.apache.org/ and download the latest version of Tomcat (for the above system configuration, select the 32-bit/64-bit Windows Service Installer method, which will create a 9 MB installation at C:\Program Files\Apache Software Foundation\Tomcat 7.0).

Add this path to the Windows system environment variable 'Path'

Start a Cygwin bash shell

type 'tomcat7' (with Path set, it will find this .exe in the above path). This will start the tomcat server.

Start a browser and direct it to http://localhost:8080.  This will bring up the Tomcat welcome screen (which is really Tomcat reading the file: C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\ROOT\index.jsp).

Create new directories under C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps named examples\WEB-INF\classes.

Add a @WebServlet annotation to the source code file (this would be located after any imports): @WebServlet(urlPatterns={"/servlet/BeeServlet"}).  Compile the BeeServlet.java file and place the .class file in C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\examples\WEB-INF\classes\BeeServlet.class

Direct your browser to http://localhost:8080/examples/servlet/BeeServlet


问:
Get maximum value of a field in django
I have a model Foo in my models.py like this:

```<code>class Foo(models.Model):

    transaction_no = models.IntegerField(default=0, blank=True, null=True)
    transaction_date = models.DateField(default=datetime.now)
    quantity = models.IntegerField(default=0, blank=True, null=True)
</code>```

I want to get the max quantity from the table. How can I get that?

答:
You can do like this for your solution...</p>

```<code>from django.db.models import Max
Foo.objects.all().aggregate(Max('quantity'))['quantity__max']
</code>```

Title: Get maximum value of a field in django

Body:
I have a model Foo in my models.py like this:

class Foo(models.Model):

    transaction_no = models.IntegerField(default=0, blank=True, null=True)
    transaction_date = models.DateField(default=datetime.now)
    quantity = models.IntegerField(default=0, blank=True, null=True)

I want to get the max quantity from the table. How can I get that?

Body:
You can do like this for your solution...

from django.db.models import Max
Foo.objects.all().aggregate(Max('quantity'))['quantity__max']


问:
Error when installing keras in anaconda. /p KERAS_BACKEND= 0<temp.txt
I was creating a new env in anaconda and after installing spyder, tensorflow and theano I attempted to install keras but I got an error message (see below). Now I cannot even open spyder as it stops working. Spyder only works if I uninstall keras again.

Do you have any idea what could be going on? I have another env in this same computer that works perfectly with the same packages installed.

```<code>(py36) C:\Users\LeicaMicroscope>conda install -c conda-forge keras
Solving environment: done

## Package Plan ##

  environment location: C:\Users\LeicaMicroscope\Anaconda3\envs\py36

  added / updated specs:
    - keras

The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    certifi-2018.4.16          |           py36_0         143 KB  conda-forge

The following NEW packages will be INSTALLED:

    keras:           2.1.6-py36_0      conda-forge

The following packages will be UPDATED:

    ca-certificates: 2018.03.07-0                  --> 2018.4.16-0      conda-fo
rge
    certifi:         2018.4.16-py36_0              --> 2018.4.16-py36_0 conda-fo
rge
    openssl:         1.0.2o-h8ea7d77_0             --> 1.0.2o-vc14_0    conda-fo
rge [vc14]

Proceed ([y]/n)? y

Downloading and Extracting Packages
certifi-2018.4.16    |  143 KB | ###################################### | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done

(py36) C:\Users\LeicaMicroscope>set "KERAS_BACKEND="

(py36) C:\Users\LeicaMicroscope>python C:\Users\LeicaMicroscope\Anaconda3\envs\p
y36\etc\keras\load_config.py  1>temp.txt

(py36) C:\Users\LeicaMicroscope>set /p KERAS_BACKEND= 0<temp.txt

(py36) C:\Users\LeicaMicroscope>del temp.txt

(py36) C:\Users\LeicaMicroscope>python -c "import keras"  1>nul 2>&1

(py36) C:\Users\LeicaMicroscope>if errorlevel 1 (
ver  1>nul
 set "KERAS_BACKEND=theano"
 python -c "import keras"  1>nul 2>&1
)
</code>```

答:
I've tried

conda install -c anaconda keras-gpu
```

for installing keras and it worked.

Body:
I was creating a new env in anaconda and after installing spyder, tensorflow and theano I attempted to install keras but I got an error message (see below). Now I cannot even open spyder as it stops working. Spyder only works if I uninstall keras again.

Do you have any idea what could be going on? I have another env in this same computer that works perfectly with the same packages installed.

(py36) C:\Users\LeicaMicroscope>conda install -c conda-forge keras
Solving environment: done

## Package Plan ##

  environment location: C:\Users\LeicaMicroscope\Anaconda3\envs\py36

  added / updated specs:
    - keras

The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    certifi-2018.4.16          |           py36_0         143 KB  conda-forge

The following NEW packages will be INSTALLED:

    keras:           2.1.6-py36_0      conda-forge

The following packages will be UPDATED:

    ca-certificates: 2018.03.07-0                  --> 2018.4.16-0      conda-fo
rge
    certifi:         2018.4.16-py36_0              --> 2018.4.16-py36_0 conda-fo
rge
    openssl:         1.0.2o-h8ea7d77_0             --> 1.0.2o-vc14_0    conda-fo
rge [vc14]

Proceed ([y]/n)? y

Downloading and Extracting Packages
certifi-2018.4.16    |  143 KB | ###################################### | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done

(py36) C:\Users\LeicaMicroscope>set "KERAS_BACKEND="

(py36) C:\Users\LeicaMicroscope>python C:\Users\LeicaMicroscope\Anaconda3\envs\p
y36\etc\keras\load_config.py  1>temp.txt

(py36) C:\Users\LeicaMicroscope>set /p KERAS_BACKEND= 0<temp.txt

(py36) C:\Users\LeicaMicroscope>del temp.txt

(py36) C:\Users\LeicaMicroscope>python -c "import keras"  1>nul 2>&1

(py36) C:\Users\LeicaMicroscope>if errorlevel 1 (
ver  1>nul
 set "KERAS_BACKEND=theano"
 python -c "import keras"  1>nul 2>&1
)

Body:
I've tried

conda install -c anaconda keras-gpu

for installing keras and it worked.


问:
How to remove new line characters in spark scala
The below code is working fine in python. I am having difficulty in writing equivalent code in scala

```<code>map(lambda x:x[1].replace("\n","|"))
</code>```

What is the equivalent code in Scala?

I have tried to run the below command in Scala and getting the below error.

```<code>scala> val read_rdd=sc.wholeTextFiles("/user/test/test1.txt").map(x => x[1].replace("\n","\u001F"))
<console>:1: error: identifier expected but integer literal found.
</code>```

答:
sc.wholeTextFiles() return scala tuple (String, String). To access members use x._1 and x._2. </p>

```<code>val read_rdd=sc.wholeTextFiles("e_edge.csv").map(x => x._2.replace("\n","\u001F"))
</code>```

Body:
The below code is working fine in python. I am having difficulty in writing equivalent code in scala

map(lambda x:x[1].replace("\n","|"))

What is the equivalent code in Scala?

I have tried to run the below command in Scala and getting the below error.

scala> val read_rdd=sc.wholeTextFiles("/user/test/test1.txt").map(x => x[1].replace("\n","\u001F"))
<console>:1: error: identifier expected but integer literal found.

Body:
sc.wholeTextFiles() return scala tuple (String, String). To access members use x._1 and x._2.

val read_rdd=sc.wholeTextFiles("e_edge.csv").map(x => x._2.replace("\n","\u001F"))


问:
PHP / MySQL: Undefined index after user update a data
Currently, I develop a system that required an update function. The flow of the system will be like this:

1) list of data row in dashboard.php

2) User can select one of the data to view the details. It will redirect to view_task.php

3) At view_task.php, user can update the task name and click 'save' button to save.

The problem is. After I click button save, It will show the error 'undefined index: report id at line 7' and "undefined variable: task_name at line 55"

below is my current code:

view_task.php

```<code><?php

  require_once "../../../../config/configPDO.php";
  require_once "../../../../config/check.php";

  $report_id = $_GET['report_id']; //line 7

  $sql = "SELECT * FROM ot_report WHERE report_id = :report_id";
  $query = $conn->prepare($sql);
  $query->execute(array(':report_id' => $report_id));
  while($row = $query->fetch(PDO::FETCH_ASSOC)){

      $report_id = $row["report_id"];
      $task_name = $row["task_name"];
  }

?>

<form action="update_task_name.php" method="POST">
  <td><b>Task Name</b></td>
  <td colspan = '2'><input type="text" class="form-control" name="task_name" value="<?php echo $task_name; ?>"/></td> //line 55
  <input type="hidden" name="report_id" value="<?php echo $report_id ?>">
  <td><input type="submit" class="btn btn-primary btn-block" value = "Save" onclick="confirm('Are you sure?')"></td>
</form>
</code>```

update_task_name.php

```<code><?php

    require_once '../../../../config/configPDO.php';

    $update = "UPDATE ot_report SET task_name = :task_name WHERE report_id = :report_id";
    $stmt = $conn->prepare($update);
    $stmt->bindParam(':task_name', $_POST['task_name']);
    $stmt->bindParam(':report_id', $_POST['report_id']);
    $stmt->execute();

    class Result {}
    $response = new Result();
    $response->result = 'OK';
    $response->message = 'Update successful';
    header("Location: view_task.php");

?>
</code>```

Although get the error at view_task.php, but the data successfully save!

Can anyone know what is the error?

答:
You mentioned that:

Although get the error at view_task.php, but the data successfully save!

Base on that, I can assume that you entered the view_task.php from the dashboard.php without any error

And error only happen after you click SAVE button.

So, task_name and report_id must be sent to the update_task_name.php successfully

But when you try to redirect back to task_view.php with:

```<code>header("Location: view_task.php");
</code>```

you didn't bring report_id to view_task.php, and caused the error you mentioned in your question

SO, here is my answer, in your update_task_name.php

replace this:

```<code>header("Location: view_task.php");
</code>```

with this:

```<code>header("view_task.php?report_id=".$_POST['report_id'])
</code>```

Body:
Currently, I develop a system that required an update function. The flow of the system will be like this:

1) list of data row in dashboard.php

2) User can select one of the data to view the details. It will redirect to view_task.php

3) At view_task.php, user can update the task name and click 'save' button to save.

The problem is. After I click button save, It will show the error 'undefined index: report id at line 7' and "undefined variable: task_name at line 55"

below is my current code:

view_task.php

<?php

  require_once "../../../../config/configPDO.php";
  require_once "../../../../config/check.php";

  $report_id = $_GET['report_id']; //line 7

  $sql = "SELECT * FROM ot_report WHERE report_id = :report_id";
  $query = $conn->prepare($sql);
  $query->execute(array(':report_id' => $report_id));
  while($row = $query->fetch(PDO::FETCH_ASSOC)){

      $report_id = $row["report_id"];
      $task_name = $row["task_name"];
  }

?>

<form action="update_task_name.php" method="POST">
  Task Name
  <input type="text" class="form-control" name="task_name" value="<?php echo $task_name; ?>"/>	 //line 55
  <input type="hidden" name="report_id" value="<?php echo $report_id ?>">
  <input type="submit" class="btn btn-primary btn-block" value = "Save" onclick="confirm('Are you sure?')">
</form>

update_task_name.php

<?php

    require_once '../../../../config/configPDO.php';

    $update = "UPDATE ot_report SET task_name = :task_name WHERE report_id = :report_id";
    $stmt = $conn->prepare($update);
    $stmt->bindParam(':task_name', $_POST['task_name']);
    $stmt->bindParam(':report_id', $_POST['report_id']);
    $stmt->execute();

    class Result {}
    $response = new Result();
    $response->result = 'OK';
    $response->message = 'Update successful';
    header("Location: view_task.php");

?>

Although get the error at view_task.php, but the data successfully save!

Can anyone know what is the error?

Body:
You mentioned that:

Although get the error at view_task.php, but the data successfully save!

Base on that, I can assume that you entered the view_task.php from the dashboard.php without any error

And error only happen after you click SAVE button.

So, task_name and report_id must be sent to the update_task_name.php successfully

But when you try to redirect back to task_view.php with:

header("Location: view_task.php");

you didn't bring report_id to view_task.php, and caused the error you mentioned in your question

SO, here is my answer, in your update_task_name.php

replace this:

header("Location: view_task.php");

with this:

header("view_task.php?report_id=".$_POST['report_id'])


问:
cudaMemcpy2D for shared memory copies
I have some memory that has been allocated on device that is just a single malloc of H*W*sizeof(float) in size.

This is to represent an H*W matrix.

I have a code where I need to swap the quadrants of the matrix. Can i use cudaMemcpy2D to accomplish this? Would I just need to specify the spitch and dpitch to be W*sizeof(float) and just use pointers to each quadrant of the matrix to accomplish this?

Also, when these cudaMemcpy talk about the memory areas not overlapping - does that mean src and dst cannot overlap at all? As in, if I had a 10 byte wide array that I wanted to shift left one time - it will fail?

Thanks

答:
I suggest writing a simple kernel to do this matrix manipulation.  I think it would be easier to write than using cudaMemcpy(2D) and almost definitely faster assuming you write it to get good memory coherence.

It's probably easiest to do an out-of-place transform (i.e. different input and output arrays) to avoid clobbering the input matrix.  Each thread would simply read from its input offset and write to the transformed offset.

It would be similar to a matrix transpose.  There is a matrix transpose example in the CUDA SDK.

Title: cudaMemcpy2D for shared memory copies


问:
How to write a Linux kernel module makefile?
I'm trying to write a simple hello world kernel module. I'm working in Ubuntu 18.04.2 LTS on Virtual Box. In the directory /usr/src I created a directory named hello and inside that hello directory I've created hello.c and a makefile. Here is my makefile:

```<code>obj-m += hello.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
</code>```

When I make the command "sudo make" I get this output:

```<code>make -C /lib/modules/5.3.0-28-generic/build M= modules
make[1]: Entering directory '/usr/src/linux-headers-5.3.0-28-generic'
make[2]: *** No rule to make target 'arch/x89/tools/relocs_32.c', needed by 'arch/x86/tools/relocs_32.o'. Stop.
arch/x86/Makefile:232: recipe for target 'archscripts' failed
make[1]: *** [archscripts] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-5.3.0-28-generic'
makefile:4: recipe for target 'all' failed
make: *** [all] Error 2
</code>```

I've tried a few variations of my makefile including changing "PWD" to "shell pwd". I've installed all the essential tools and libraries as far as I know. What could be the problem here?

答:
Variable PWD is set by the shell, so your Makefile relies on make invocation to be performed from the shell, as we normally do when type make in the terminal.

But sudo make executes make from a plain user environment. This environment lacks for PWD variable, so your Makefile behaves incorrectly. This can be found from your output:

```<code>make -C /lib/modules/5.3.0-28-generic/build M= modules
</code>```

Use $(shell pwd) expression instead, it is more reliable:

```<code>obj-m += hello.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules
clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) clean
</code>```

Alternatively, you may call make with root privileges using this way:

```<code>sudo /bin/sh -c make
</code>```

This way make is executed not from the plain root environment, but under an intermediate shell. This shell sets PWD variable.

Update

As noted by @Ian Abbott in the comments, another alternative for $(PWD) is $(CURDIR). Variable CURDIR is set by the make itself (precisely, by GNU Make). See also that question: bash: What is the difference between PWD and CURDIR?.

Body:
I'm trying to write a simple hello world kernel module. I'm working in Ubuntu 18.04.2 LTS on Virtual Box. In the directory /usr/src I created a directory named hello and inside that hello directory I've created hello.c and a makefile. Here is my makefile:

obj-m += hello.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

When I make the command "sudo make" I get this output:

make -C /lib/modules/5.3.0-28-generic/build M= modules
make[1]: Entering directory '/usr/src/linux-headers-5.3.0-28-generic'
make[2]: *** No rule to make target 'arch/x89/tools/relocs_32.c', needed by 'arch/x86/tools/relocs_32.o'. Stop.
arch/x86/Makefile:232: recipe for target 'archscripts' failed
make[1]: *** [archscripts] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-5.3.0-28-generic'
makefile:4: recipe for target 'all' failed
make: *** [all] Error 2

I've tried a few variations of my makefile including changing "PWD" to "shell pwd". I've installed all the essential tools and libraries as far as I know. What could be the problem here?

Body:
Variable PWD is set by the shell, so your Makefile relies on make invocation to be performed from the shell, as we normally do when type make in the terminal.

But sudo make executes make from a plain user environment. This environment lacks for PWD variable, so your Makefile behaves incorrectly. This can be found from your output:

make -C /lib/modules/5.3.0-28-generic/build M= modules

Use $(shell pwd) expression instead, it is more reliable:

obj-m += hello.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules
clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) clean

Alternatively, you may call make with root privileges using this way:

sudo /bin/sh -c make

This way make is executed not from the plain root environment, but under an intermediate shell. This shell sets PWD variable.

Update

As noted by @Ian Abbott in the comments, another alternative for $(PWD) is $(CURDIR). Variable CURDIR is set by the make itself (precisely, by GNU Make). See also that question: bash: What is the difference between PWD and CURDIR?.


问:
How can i get type of python object when it is enclosed in a string?
I have a python object a="123.50" which is string type(a)=string
I want something that tells me  variable a is float object.

I have tried ast.literal_eval(value) , but since it accepts every other things.

Is there anything similar to it (ast.literal_eval) ?

答: You can refer PYTHON : There is a function similar to ast.literal_eval ()?.</p>


问:
GitHub API Patch make template not working
I am using GitHub API to make my public repos to private and turn them into templates.
The repo permission is changing to private but they are not being modified to be templates. I can change them to templates from the GitHub UI.

The GitHub repo patch guide says is_template=true should work.

Below is my code:

```<code>make_private = requests.patch(f"https://api.github.com/repos/{repo['owner']['login']}/{repo['name']}",
                              data=json.dumps({
                                              "private": True,
                                              "is_template": True
                                          }),
                              headers={'Authorization': 'token cefr9r2rrRandomRandomString',
                                       'Content-Type': 'application/json'})
</code>```

答:
You seem to be missing the Accept header mentioned in those docs:

Note: The is_template and template_repository keys are currently available for developer to preview. ... To access these new
  response keys during the preview period, you must provide a custom
  media type in the Accept header:

```<code>application/vnd.github.baptiste-preview+json
</code>```

Body:
I am using GitHub API to make my public repos to private and turn them into templates.
The repo permission is changing to private but they are not being modified to be templates. I can change them to templates from the GitHub UI.

The GitHub repo patch guide says is_template=true should work.

Below is my code:

make_private = requests.patch(f"https://api.github.com/repos/{repo['owner']['login']}/{repo['name']}",
                              data=json.dumps({
                                              "private": True,
                                              "is_template": True
                                          }),
                              headers={'Authorization': 'token cefr9r2rrRandomRandomString',
                                       'Content-Type': 'application/json'})

Body:
You seem to be missing the Accept header mentioned in those docs:

Note: The is_template and template_repository keys are currently available for developer to preview. ... To access these new
  response keys during the preview period, you must provide a custom
  media type in the Accept header:

application/vnd.github.baptiste-preview+json


问:
Is there a workaround for animated SVGs (using CSS) on Edge and IE?
I have an SVG animation which is not working on Edge and obviously not on IE. I have done extensive research on the issue and am aware of using pixels for stroke-dashoffset and stroke-dasharray in order for it to work. I have done the same but it is not working. Now, as far as I know, Edge supports SVG animations at the moment; yet again, it is not working for me.

I was wondering if there are any workarounds, like a way to use a background image when the animation is not working? I searched a lot and was unable to find related topics. Any ideas would be appreciated.

@-webkit-keyframes handwriting {
  to {
    stroke-dashoffset: 0px;
  }
}

@-moz-keyframes handwriting {
  to {
    stroke-dashoffset: 0px;
  }
}

@keyframes handwriting {
  to {
    stroke-dashoffset: 0px;
  }
}

.svg-text {
  width: 23rem;
  height: 100%;
  margin-top: 1rem;
  margin-bottom: -2rem;
  fill: none;
  stroke: #000;
  stroke-miterlimit: 10;
  stroke-width: 7px;
  -webkit-filter: drop-shadow(3px 3px 2px rgba(0, 0, 0, 0.7));
  filter: drop-shadow(3px 3px 2px rgba(0, 0, 0, 0.7));
  z-index: 100;
}

.svg-text__animate {
  stroke-dasharray: 300px;
  stroke-dashoffset: 300px;
  animation: handwriting 0.8s linear forwards;
}

.svg-text--container .svg-text__animate {
  opacity: 1;
}

.svg-text--container .svg-text__animate--1 {
  -webkit-animation-delay: 0.8s;
  animation-delay: 0.8s;
}

.svg-text--container .svg-text__animate--2 {
  -webkit-animation-delay: 1.1s;
  animation-delay: 1.1s;
}

.svg-text--container .svg-text__animate--3 {
  -webkit-animation-delay: 1.3s;
  animation-delay: 1.3s;
}

.svg-text--container .svg-text__animate--4 {
  -webkit-animation-delay: 1.8s;
  animation-delay: 1.8s;
}

.svg-text--container .svg-text__animate--5 {
  -webkit-animation-delay: 2s;
  animation-delay: 2s;
}

.svg-text--container .svg-text__animate--6 {
  -webkit-animation-delay: 2.2s;
  animation-delay: 2.2s;
}

.svg-text--container .svg-text__animate--7 {
  -webkit-animation-delay: 2.4s;
  animation-delay: 2.4s;
}

.svg-text--container .svg-text__animate--8 {
  -webkit-animation-delay: 2.6s;
  animation-delay: 2.6s;
}

.svg-text--container .svg-text__animate--9 {
  -webkit-animation-delay: 2.9s;
  animation-delay: 2.9s;
}

.svg-text--container .svg-text__animate--10 {
  -webkit-animation-delay: 3.3s;
  animation-delay: 3.3s;
}

.svg-text--container .svg-text__animate--11 {
  -webkit-animation-delay: 3.5s;
  animation-delay: 3.5s;
}

.svg-text--container .svg-text__animate--12 {
  -webkit-animation-delay: 3.7s;
  animation-delay: 3.7s;
}

.svg-text--container .svg-text__animate--12 {
  -webkit-animation-delay: 4s;
  animation-delay: 4s;
}

.svg-text--container .svg-text__animate--13 {
  -webkit-animation-delay: 4.3s;
  animation-delay: 4.3s;
}

.svg-text--container .svg-text__animate--14 {
  -webkit-animation-delay: 4.6s;
  animation-delay: 4.6s;
}```

<svg class="svg-text" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 410 94.376">
    <defs>
        <clipPath id="clip-path" transform="translate(-277.94 -292.292)">
            <path id="h"
                d="M310.345,298.912a.987.987,0,0,1,.457.774q0,.632-.809.632a1.542,1.542,0,0,1-.738-.211,6.2,6.2,0,0,0-2.426-.808q-2.145,0-4.781,4.289-9.282,15.117-13.746,39.586A60.811,60.811,0,0,1,301.415,325.6a4.584,4.584,0,0,1,2.32-1.407c.141,0,3.7,1.829,3.868,1.969a3.621,3.621,0,0,1,.914,2.813,11.783,11.783,0,0,1-.071,1.23,70.081,70.081,0,0,1-3.586,15.153q1.089-1.477,3.446-4.325a1.514,1.514,0,0,1,.949-.6q.387,0,.387.457a2.2,2.2,0,0,1-.457,1.195q-2.04,2.954-5.414,8.648-.282.563-1.372,2.954-.456,1.125-1.265,1.125a5.329,5.329,0,0,1-2.637-1.231q-.7-.492-.246-1.547,6.047-15.187,6.4-22.676.107-2.144-.6-2.144a4.88,4.88,0,0,0-1.934,1.195,40.078,40.078,0,0,0-6.644,7.735,65,65,0,0,0-8.051,14.941q-.774,2.181-1.442,2.18a5.593,5.593,0,0,1-2.355-1.442,2.49,2.49,0,0,1-.6-2.461q4.078-22.323,10.618-38.144,4.851-11.778,8.753-15.4a2.9,2.9,0,0,1,1.934-.914,4.6,4.6,0,0,1,2.5,1.125Q308.587,297.472,310.345,298.912Zm-6.61,25.277a4.527,4.527,0,0,1,3.868,1.969,3.621,3.621,0,0,1,.914,2.813"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-2" transform="translate(-277.94 -292.292)">
            <path id="u"
                d="M339.208,327.986a72.646,72.646,0,0,0-7,20.391q.984-1.722,2.391-.395.175-.492.562-.492c.352,0,.527.223.527.668a1.166,1.166,0,0,1-.105.457,55.678,55.678,0,0,0-2.953,7.91q-.422,1.758-1.125,1.758a6.906,6.906,0,0,1-2.742-1.371q-1.09-.772-.739-2.742a86.79,86.79,0,0,1,3.551-13.324,125.245,125.245,0,0,1-11.391,16.277,2.631,2.631,0,0,1-2.214,1.16c-1.974-.283-4.746-1.933-4.746-3.34a5.425,5.425,0,0,1,.07-.843,56.461,56.461,0,0,1,3.656-16.7q-.6.563-1.793,1.653-.458.387-.7.211-.282-.212.1-.809a26.229,26.229,0,0,0,2.25-3.656,17.171,17.171,0,0,1,2.286-4.254,1.763,1.763,0,0,1,1.336-.774,6.131,6.131,0,0,1,2.777,1.125q.492.317.492.633l-.773,1.16q-1.76,2.673-3.727,9.422a45.669,45.669,0,0,0-2.18,11.918q0,1.512.633,1.512.563,0,1.828-1.3a83.886,83.886,0,0,0,7.84-10.9,93.906,93.906,0,0,0,5.485-9.211q1.581-3.586,2.566-4.219a2.1,2.1,0,0,1,1.125-.422,5.413,5.413,0,0,1,1.9.739q1.406.738,1.407,1.089c0,.071-.083.164-.246.282A1.082,1.082,0,0,0,339.208,327.986Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-3" transform="translate(-277.94 -292.292)">
            <path id="m"
                d="M383.61,342.26q-2.286,3.41-6.82,12.023a2.861,2.861,0,0,1-.527.809,2.439,2.439,0,0,1-1.477-.176q-2.425-.738-2.426-1.406a3.182,3.182,0,0,1,.317-1.125,98.045,98.045,0,0,0,4.517-13.131,41.709,41.709,0,0,0,1.811-10.705q0-1.23-.879-1.231a2.381,2.381,0,0,0-1.406.668q-2.988,2.427-7.735,9.422a63.256,63.256,0,0,0-8.05,15.785,2.072,2.072,0,0,1-.422.95q-.211.105-1.02-.176a9.239,9.239,0,0,1-2.285-1.2,1.049,1.049,0,0,1-.527-.808q0-.071.527-1.371a60.039,60.039,0,0,0,4.6-22.324q0-1.089-.632-1.09a2.016,2.016,0,0,0-1.16.6q-3.764,3.165-8.368,10.9a71.915,71.915,0,0,0-6.609,13.851q-.562,1.653-1.16,1.653A7.321,7.321,0,0,1,341,352.6q-.562-.317-.563-.668c0-.258,2.825-6.75,4.043-11.742q2.074-8.544,1.793-12.411-.526.528-1.793,1.741t-1.9,1.845a1.257,1.257,0,0,1-.809.457q-.526,0-.527-.7a1.406,1.406,0,0,1,.387-.984,39.016,39.016,0,0,0,3.9-4.817q.7-.983,1.231-.984c.257,0,2.683,1.547,3.269,1.758a1.308,1.308,0,0,1,.738,1.3,2.742,2.742,0,0,1-.07.6A74.982,74.982,0,0,1,348,340.643q6.224-11.181,11.566-15.891a2.193,2.193,0,0,1,1.442-.668,19.064,19.064,0,0,1,4.148,2.074,3.038,3.038,0,0,1,.528,1.969,45.049,45.049,0,0,1-1.653,12.762q6.856-10.865,12.481-16.137a2.229,2.229,0,0,1,1.547-.7c.7,0,5.3,2.8,5.2,4.746a49.5,49.5,0,0,1-3.656,16.383,37.274,37.274,0,0,0,2.742-3.586,1.277,1.277,0,0,1,1.054-.738c.352,0,.528.188.528.562A1.649,1.649,0,0,1,383.61,342.26Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-4" transform="translate(-277.94 -292.292)">
            <path id="a"
                d="M411.771,330.061a110.6,110.6,0,0,0-4.465,15.046,18.576,18.576,0,0,0,1.388-1.511,14.682,14.682,0,0,1,1.073-1.2,1.366,1.366,0,0,1,1.054-.632.466.466,0,0,1,.528.527,1.389,1.389,0,0,1-.282.738,28.5,28.5,0,0,0-4.394,9.879q-.317,1.406-.949,1.406a5.306,5.306,0,0,1-2.215-1.125,2.693,2.693,0,0,1-1.09-1.054,3.22,3.22,0,0,1,0-1.547,80.333,80.333,0,0,1,3.691-14.836,83.84,83.84,0,0,1-8.332,10.969,48.893,48.893,0,0,1-6.644,6.679,4.649,4.649,0,0,1-2.25,1.02,3.888,3.888,0,0,1-1.934-1.02,3.46,3.46,0,0,1-1.863-3.093,6.26,6.26,0,0,1,.07-.879q.633-5.2,4.571-12.112a48.7,48.7,0,0,1,9.035-11.654,4.469,4.469,0,0,1,2.953-1.512q1.266.072,4.816,3.34a.806.806,0,0,1,.317.6q0,.563-.739.562a1.326,1.326,0,0,1-.527-.105q-2.5-1.054-4.008.07-3.3,2.425-7.312,8.543-4.641,7.032-5.59,12.656a3.167,3.167,0,0,0-.035.457q0,.879.7.879a4.52,4.52,0,0,0,2.847-1.652,93.5,93.5,0,0,0,8.438-9.633,48.781,48.781,0,0,0,5.906-9.07q.95-2.25,1.231-3.164.456-1.582.984-1.582a6.82,6.82,0,0,1,2.461,1.441,1.926,1.926,0,0,1,.879,1.09A3.482,3.482,0,0,1,411.771,330.061Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-5" transform="translate(-277.94 -292.292)">
            <path id="n"
                d="M441.97,340.959q-2.111,3.2-5.485,9.281-.633,1.582-1.23,3.164-.494,1.089-1.3,1.09a5.305,5.305,0,0,1-1.863-.527q-1.371-.562-1.371-1.125a3.338,3.338,0,0,1,.457-1.09,61.207,61.207,0,0,0,4.078-11.566q1.932-7.278,1.652-11.11-.07-1.547-.7-1.547-.458,0-1.371.879-8.859,8.649-15.328,23.133-.81,1.792-1.9,1.793a7.022,7.022,0,0,1-2.566-.879q-.7-.316-.738-.6a4.677,4.677,0,0,1,.386-.984,85.558,85.558,0,0,0,4.043-11.32,59.364,59.364,0,0,0,2.426-11.567q.071-1.264-.07-1.265-.036,0-.984.949t-2.637,2.461a.973.973,0,0,1-.7.316c-.329,0-.492-.128-.492-.386a.969.969,0,0,1,.351-.633q1.511-1.933,3.973-4.817a1.482,1.482,0,0,1,1.09-.6c.562,0,4.265,2.66,4.148,3.832q-.387,3.867-3.973,13.957a63.318,63.318,0,0,1,6.856-10.143q4.5-5.607,6.68-6.627a4.536,4.536,0,0,1,1.546-.492c.305,0,4.383,2.579,4.36,4.148a41.953,41.953,0,0,1-1.2,7.911q-.948,4.5-1.757,7,1.019-1.3,2.6-3.375a.765.765,0,0,1,.563-.352q.526,0,.527.668A1.324,1.324,0,0,1,441.97,340.959Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-6" transform="translate(-277.94 -292.292)">
            <path id="l"
                d="M486.548,298.912a.967.967,0,0,1,.457.738q0,.669-.809.668a1.542,1.542,0,0,1-.738-.211,6.2,6.2,0,0,0-2.426-.808q-2.214,0-4.851,4.289-9.564,15.575-13.606,40.254-.1.668-.351,1.793.808-.844,2.39-2.742.915-1.089,1.336-1.09.915,0,.141,1.09a27.023,27.023,0,0,0-4.465,10.089q-.387,1.3-.984,1.3a1.438,1.438,0,0,1-.739-.316q-1.793-1.2-2.039-1.406a2.473,2.473,0,0,1-.7-1.829,6.6,6.6,0,0,1,.176-1.371q4.078-22.393,10.512-38.144,4.851-11.883,8.683-15.4a2.978,2.978,0,0,1,2.11-.949,4.835,4.835,0,0,1,2.461,1.195Q484.823,297.471,486.548,298.912Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-7" transform="translate(-277.94 -292.292)">
            <path id="a-2" data-name="a"
                d="M496.673,330.061a110.6,110.6,0,0,0-4.465,15.046A18.552,18.552,0,0,0,493.6,343.6a14.556,14.556,0,0,1,1.072-1.2,1.367,1.367,0,0,1,1.055-.632.466.466,0,0,1,.527.527,1.394,1.394,0,0,1-.281.738,28.5,28.5,0,0,0-4.4,9.879q-.317,1.406-.949,1.406a5.311,5.311,0,0,1-2.215-1.125,2.7,2.7,0,0,1-1.09-1.054,3.246,3.246,0,0,1,0-1.547,80.326,80.326,0,0,1,3.692-14.836,83.929,83.929,0,0,1-8.332,10.969,48.94,48.94,0,0,1-6.645,6.679,4.646,4.646,0,0,1-2.25,1.02,3.883,3.883,0,0,1-1.933-1.02,3.459,3.459,0,0,1-1.864-3.093,6.273,6.273,0,0,1,.071-.879q.632-5.2,4.57-12.112a48.721,48.721,0,0,1,9.035-11.654,4.471,4.471,0,0,1,2.953-1.512q1.266.072,4.817,3.34a.8.8,0,0,1,.316.6q0,.563-.738.562a1.331,1.331,0,0,1-.528-.105q-2.5-1.054-4.007.07-3.306,2.425-7.313,8.543-4.641,7.032-5.59,12.656a3.317,3.317,0,0,0-.035.457q0,.879.7.879a4.52,4.52,0,0,0,2.848-1.652,93.5,93.5,0,0,0,8.437-9.633,48.8,48.8,0,0,0,5.907-9.07q.948-2.25,1.23-3.164.456-1.582.984-1.582a6.82,6.82,0,0,1,2.461,1.441,1.926,1.926,0,0,1,.879,1.09A3.466,3.466,0,0,1,496.673,330.061Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-8" transform="translate(-277.94 -292.292)">
            <path id="n-2" data-name="n"
                d="M526.872,340.959q-2.109,3.2-5.484,9.281-.633,1.582-1.231,3.164-.492,1.089-1.3,1.09a5.311,5.311,0,0,1-1.863-.527q-1.371-.562-1.371-1.125a3.338,3.338,0,0,1,.457-1.09,61.137,61.137,0,0,0,4.078-11.566q1.933-7.278,1.653-11.11-.072-1.547-.7-1.547-.456,0-1.371.879-8.859,8.649-15.328,23.133-.808,1.792-1.9,1.793a7.025,7.025,0,0,1-2.567-.879q-.7-.316-.738-.6a4.712,4.712,0,0,1,.387-.984,85.7,85.7,0,0,0,4.043-11.32,59.439,59.439,0,0,0,2.426-11.567q.069-1.264-.071-1.265-.034,0-.984.949t-2.637,2.461a.973.973,0,0,1-.7.316c-.329,0-.492-.128-.492-.386a.969.969,0,0,1,.351-.633q1.512-1.933,3.973-4.817a1.483,1.483,0,0,1,1.09-.6c.562,0,4.266,2.66,4.148,3.832q-.387,3.867-3.972,13.957a63.371,63.371,0,0,1,6.855-10.143q4.5-5.607,6.68-6.627a4.533,4.533,0,0,1,1.547-.492c.3,0,4.382,2.579,4.359,4.148a42.015,42.015,0,0,1-1.195,7.911q-.95,4.5-1.758,7,1.02-1.3,2.6-3.375a.762.762,0,0,1,.562-.352c.352,0,.527.223.527.668A1.324,1.324,0,0,1,526.872,340.959Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-9" transform="translate(-277.94 -292.292)">
            <path id="g"
                d="M555.138,328.619q-10.794,56-28.055,55.969-6.222,0-13.465-6.856a1.815,1.815,0,0,1-.668-1.3q0-1.022.949-1.02a1.457,1.457,0,0,1,.95.387q5.73,4.885,10.265,4.887,14.484,0,24.153-42.54-5.873,10.092-10.231,14.45a4.814,4.814,0,0,1-3.129,1.793,5.663,5.663,0,0,1-3.129-1.407,5.365,5.365,0,0,1-3.2-5.414q.212-4.605,3.551-11.425a35.329,35.329,0,0,1,6.82-10.02,5.634,5.634,0,0,1,3.621-1.9,4.6,4.6,0,0,1,2.637,1.054q.212.177,2.813,2.5a1.262,1.262,0,0,1,.527.914q0,.633-.844.633a2.842,2.842,0,0,1-1.195-.316,4.388,4.388,0,0,0-2.074-.563,3.937,3.937,0,0,0-2.672,1.055,27.76,27.76,0,0,0-5.379,7.313,31.314,31.314,0,0,0-3.762,10.125,15.3,15.3,0,0,0-.176,2.144q0,2.6,1.407,2.6a3.09,3.09,0,0,0,2-.95,42.8,42.8,0,0,0,8.3-10.371,51.635,51.635,0,0,0,5.45-11.5,11.638,11.638,0,0,0,.6-3.551q0-1.335.633-1.335a6.252,6.252,0,0,1,2.6,1.476Q555.594,326.334,555.138,328.619Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-10" transform="translate(-277.94 -292.292)">
            <path id="u-2" data-name="u"
                d="M585.2,327.97a72.646,72.646,0,0,0-7,20.391q.984-1.722,2.391-4.395.175-.492.562-.492.528,0,.528.668a1.151,1.151,0,0,1-.106.457,55.678,55.678,0,0,0-2.953,7.91q-.421,1.758-1.125,1.758a6.913,6.913,0,0,1-2.742-1.371q-1.09-.773-.738-2.742a86.682,86.682,0,0,1,3.55-13.324,125.356,125.356,0,0,1-11.39,16.277,2.63,2.63,0,0,1-2.215,1.16c-1.974-.283-4.746-1.933-4.746-3.34a5.55,5.55,0,0,1,.07-.843,56.492,56.492,0,0,1,3.656-16.7q-.6.563-1.793,1.653-.456.387-.7.211-.282-.211.106-.809a26.439,26.439,0,0,0,2.25-3.656,17.14,17.14,0,0,1,2.285-4.254,1.763,1.763,0,0,1,1.336-.773,6.127,6.127,0,0,1,2.777,1.125q.492.315.492.632l-.773,1.161q-1.758,2.672-3.727,9.421a45.7,45.7,0,0,0-2.179,11.918q0,1.512.633,1.512.561,0,1.828-1.3a84,84,0,0,0,7.839-10.9,93.906,93.906,0,0,0,5.485-9.211q1.582-3.587,2.566-4.219a2.107,2.107,0,0,1,1.125-.422,5.423,5.423,0,0,1,1.9.739q1.405.738,1.406,1.089c0,.071-.083.164-.246.282A1.091,1.091,0,0,0,585.2,327.97Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-11" transform="translate(-277.94 -292.292)">
            <path id="a-3" data-name="a"
                d="M611.458,330.061a110.6,110.6,0,0,0-4.465,15.046,18.552,18.552,0,0,0,1.389-1.511,14.556,14.556,0,0,1,1.072-1.2,1.367,1.367,0,0,1,1.055-.632.466.466,0,0,1,.527.527,1.394,1.394,0,0,1-.281.738,28.5,28.5,0,0,0-4.395,9.879q-.317,1.406-.949,1.406a5.311,5.311,0,0,1-2.215-1.125,2.7,2.7,0,0,1-1.09-1.054,3.246,3.246,0,0,1,0-1.547,80.326,80.326,0,0,1,3.692-14.836,83.929,83.929,0,0,1-8.332,10.969,48.94,48.94,0,0,1-6.645,6.679,4.646,4.646,0,0,1-2.25,1.02,3.883,3.883,0,0,1-1.933-1.02,3.461,3.461,0,0,1-1.864-3.093,6.273,6.273,0,0,1,.071-.879q.633-5.2,4.57-12.112a48.747,48.747,0,0,1,9.035-11.654,4.471,4.471,0,0,1,2.953-1.512q1.266.072,4.817,3.34a.8.8,0,0,1,.316.6q0,.563-.738.562a1.322,1.322,0,0,1-.527-.105q-2.5-1.054-4.008.07-3.3,2.425-7.313,8.543-4.641,7.032-5.59,12.656a3.317,3.317,0,0,0-.035.457q0,.879.7.879a4.52,4.52,0,0,0,2.848-1.652,93.5,93.5,0,0,0,8.437-9.633,48.747,48.747,0,0,0,5.907-9.07q.949-2.25,1.23-3.164.456-1.582.985-1.582a6.837,6.837,0,0,1,2.461,1.441,1.923,1.923,0,0,1,.878,1.09A3.466,3.466,0,0,1,611.458,330.061Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-12" transform="translate(-277.94 -292.292)">
            <path id="g-2" data-name="g"
                d="M639.688,328.619q-10.792,56-28.054,55.969-6.224,0-13.465-6.856a1.815,1.815,0,0,1-.668-1.3q0-1.022.949-1.02a1.453,1.453,0,0,1,.949.387q5.731,4.885,10.266,4.887,14.484,0,24.152-42.54-5.871,10.092-10.23,14.45a4.814,4.814,0,0,1-3.129,1.793,5.66,5.66,0,0,1-3.129-1.407,5.365,5.365,0,0,1-3.2-5.414q.212-4.605,3.551-11.425a35.288,35.288,0,0,1,6.82-10.02,5.634,5.634,0,0,1,3.621-1.9,4.606,4.606,0,0,1,2.637,1.054q.21.177,2.812,2.5a1.26,1.26,0,0,1,.528.914q0,.633-.844.633a2.835,2.835,0,0,1-1.2-.316,4.392,4.392,0,0,0-2.075-.563,3.941,3.941,0,0,0-2.672,1.055,27.782,27.782,0,0,0-5.378,7.313,31.314,31.314,0,0,0-3.762,10.125A15.3,15.3,0,0,0,618,349.08q0,2.6,1.406,2.6a3.09,3.09,0,0,0,2-.95,42.819,42.819,0,0,0,8.3-10.371,51.627,51.627,0,0,0,5.449-11.5,11.61,11.61,0,0,0,.6-3.551q0-1.335.633-1.335a6.251,6.251,0,0,1,2.6,1.476Q640.146,326.334,639.688,328.619Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-13" transform="translate(-277.94 -292.292)">
            <path id="e"
                d="M661.239,343.455c-5.7,7.29-9.713,11.147-12.023,10.934-4.216-.389-6.82-4.207-6.82-5.59a4.907,4.907,0,0,1,.07-.809,58.459,58.459,0,0,1,2.566-10.652q-1.3-.668-1.3-1.266,0-.492.739-.492a2.486,2.486,0,0,1,1.16.316q3.129-7.031,5.625-9.984,1.617-1.968,2.918-1.969a11.294,11.294,0,0,1,2.953,1.02q-.175-1.055.6-1.231c.023,0,3.164.176,3.164.528a4.41,4.41,0,0,1-.106.6,4.407,4.407,0,0,0-.105.914q0,1.266.035,3.129t.035,2.5q0,4.36-2.391,6.083a8.174,8.174,0,0,1-4.921,1.582,24.451,24.451,0,0,1-4.782-.774,19.5,19.5,0,0,0-1.336,4.254,27.565,27.565,0,0,0-.914,7.1q.036,1.827,1.16,1.828a3.818,3.818,0,0,0,1.09-.211q4.078-1.442,11.356-8.789a1.318,1.318,0,0,1,.914-.457q.668,0,.668.632A1.283,1.283,0,0,1,661.239,343.455Zm-4.113-15.539q0-1.371-.6-1.371a2.231,2.231,0,0,0-1.125.562q-3.446,2.778-6.047,9.739.7.105,2.461.211a5.481,5.481,0,0,0,4.254-1.3,5.122,5.122,0,0,0,1.16-3.481Q657.126,334.069,657.126,327.916Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-14" transform="translate(-277.94 -292.292)">
            <path id="s"
                d="M675.056,345.494c-.056,4.506-7.137,8.695-8.192,8.789a9.977,9.977,0,0,1-2.179-.105q-2.074-.317-5.1-.774a1.169,1.169,0,0,1-1.02-1.019q.141-.949,1.969-1.125,2.5-.176,7.383-.879a3.619,3.619,0,0,0,2.6-2.074,4.319,4.319,0,0,0,.457-2.075q0-2.214-2.215-7.8-2.18-5.449-2.039-7.278.28-4.393,8.121-6.117.773-.176.773.563,0,.422-.562.668-3.8,1.653-3.8,4.078a10.268,10.268,0,0,0,.351,2.373q.353,1.424,2.11,6.838A20.474,20.474,0,0,1,675.056,345.494Zm5.625-20.18a24.454,24.454,0,0,1-.844,5.063,3.382,3.382,0,0,1-.7,1.547,4.249,4.249,0,0,1-1.2.527,6.928,6.928,0,0,1-1.617.492q-.527,0-.527-.7a4.926,4.926,0,0,1,.141-1.019,15.251,15.251,0,0,0,.65-4.834q-.194-1.353.791-1.7a7.129,7.129,0,0,1,2.215-.879Q680.68,323.8,680.681,325.314Z"
                style="fill: none" />
        </clipPath>
    </defs>
    <g id="h-grp">
        <g style="clip-path: url(#clip-path)">
            <polyline class="svg-text__animate svg-text__animate--1" id="h-path"
                points="34.06 8.708 27.06 4.708 22.06 10.708 15.06 24.708 11.06 37.708 7.06 57.708 16.06 43.708 24.06 34.708 27.06 33.708 29.06 34.708 22.06 60.708 27.06 54.708 32.06 47.708" />
        </g>
    </g>
    <g id="u-grp">
        <g style="clip-path: url(#clip-path-2)">
            <polyline class="svg-text__animate svg-text__animate--2" id="u-path"
                points="36.06 43.708 39.06 39.708 42.06 34.708 44.06 35.708 41.06 42.708 40.06 46.708 38.06 55.708 38.06 58.708 38.06 59.708 40.06 60.708 43.06 57.708 53.06 43.708 58.06 34.708 60.06 35.708 57.06 42.708 55.06 48.708 52.06 60.708 53.06 60.708 58.06 50.708" />
        </g>
    </g>
    <g id="m-grp">
        <g style="clip-path: url(#clip-path-3)">
            <polyline class="svg-text__animate svg-text__animate--3" id="m-path"
                points="62.06 40.708 69.06 32.708 72.06 34.708 69.06 48.708 65.06 60.708 73.06 45.708 79.06 36.708 83.06 33.708 86.06 34.708 86.06 41.708 84.06 49.708 81.06 60.708 88.06 47.708 94.06 38.708 100.06 33.708 103.06 35.708 103.06 41.708 100.06 53.708 97.06 61.708 107.06 46.708" />
        </g>
    </g>
    <g id="a-grp">
        <g style="clip-path: url(#clip-path-4)">
            <polyline class="svg-text__animate svg-text__animate--4" id="a-path"
                points="129.06 36.708 124.06 32.708 118.06 38.708 111.06 49.708 108.06 58.708 111.06 60.708 116.06 56.708 127.06 43.708 131.06 35.708 133.06 36.708 128.06 52.708 127.06 60.708 130.06 53.708 134.06 48.708" />
        </g>
    </g>
    <g id="n-grp">
        <g style="clip-path: url(#clip-path-5)">
            <polyline class="svg-text__animate svg-text__animate--5" id="n-path"
                points="138.06 38.708 143.06 32.708 147.06 35.708 142.06 51.708 138.06 59.708 140.06 60.708 145.06 49.708 151.06 40.708 157.06 34.708 159.06 33.708 162.06 35.708 159.06 51.708 155.06 60.708 156.06 61.708 160.06 52.708 165.06 46.708" />
        </g>
    </g>
    <g id="l-grp">
        <g style="clip-path: url(#clip-path-6)">
            <polyline class="svg-text__animate  svg-text__animate--6" id="l-path"
                points="210.06 8.708 203.06 4.708 193.06 20.708 183.06 58.708 184.06 60.708 187.06 54.708 191.06 47.708" />
        </g>
    </g>
    <g id="a-grp-2" data-name="a-grp">
        <g style="clip-path: url(#clip-path-7)">
            <polyline class="svg-text__animate svg-text__animate--7" id="a-path-2" data-name="a-path"
                points="213.963 36.708 208.963 32.708 202.963 38.708 195.963 49.708 192.963 58.708 195.963 60.708 200.963 56.708 211.963 43.708 215.963 35.708 217.963 36.708 212.963 52.708 211.963 60.708 214.963 53.708 218.963 48.708" />
        </g>
    </g>
    <g id="n-grp-2" data-name="n-grp">
        <g style="clip-path: url(#clip-path-8)">
            <polyline class="svg-text__animate svg-text__animate--8" id="n-path-2" data-name="n-path"
                points="222.963 38.708 227.963 32.708 231.963 35.708 226.963 51.708 222.963 59.708 224.963 60.708 229.963 49.708 235.963 40.708 241.963 34.708 243.963 33.708 246.963 35.708 243.963 51.708 239.963 60.708 240.963 61.708 244.963 52.708 249.963 46.708" />
        </g>
    </g>
    <g id="g-grp">
        <g style="clip-path: url(#clip-path-9)">
            <polyline class="svg-text__animate svg-text__animate--9" id="g-path"
                points="272.06 36.708 266.06 33.708 260.06 38.708 255.06 48.708 253.06 57.708 258.06 61.708 263.06 55.708 271.06 43.708 274.06 36.708 274.06 33.708 276.06 34.708 271.06 55.708 266.06 70.708 260.06 82.708 253.06 88.708 249.06 90.708 244.06 89.708 233.06 82.708" />
        </g>
    </g>
    <g id="u-grp-2" data-name="u-grp">
        <g style="clip-path: url(#clip-path-10)">
            <polyline class="svg-text__animate svg-text__animate--10" id="u-path-2" data-name="u-path"
                points="282.049 43.692 285.049 39.692 288.049 34.692 290.049 35.692 287.049 42.692 286.049 46.692 284.049 55.692 284.049 58.692 284.049 59.692 286.049 60.692 289.049 57.692 299.049 43.692 304.049 34.692 306.049 35.692 303.049 42.692 301.049 48.692 298.049 60.692 299.049 60.692 304.049 50.692" />
        </g>
    </g>
    <g id="a-grp-3" data-name="a-grp">
        <g style="clip-path: url(#clip-path-11)">
            <polyline class="svg-text__animate svg-text__animate--11" id="a-path-3" data-name="a-path"
                points="328.748 36.708 323.748 32.708 317.748 38.708 310.748 49.708 307.748 58.708 310.748 60.708 315.748 56.708 326.748 43.708 330.748 35.708 332.748 36.708 327.748 52.708 326.748 60.708 329.748 53.708 333.748 48.708" />
        </g>
    </g>
    <g id="g-grp-2" data-name="g-grp">
        <g style="clip-path: url(#clip-path-12)">
            <polyline class="svg-text__animate svg-text__animate--12" id="g-path-2" data-name="g-path"
                points="356.611 36.708 350.611 33.708 344.611 38.708 339.611 48.708 337.611 57.708 342.611 61.708 347.611 55.708 355.611 43.708 358.611 36.708 358.611 33.708 360.611 34.708 355.611 55.708 350.611 70.708 344.611 82.708 337.611 88.708 333.611 90.708 328.611 89.708 317.611 82.708" />
        </g>
    </g>
    <g id="e-grp">
        <g style="clip-path: url(#clip-path-13)">
            <polyline class="svg-text__animate svg-text__animate--13" id="e-path"
                points="364.06 42.708 372.06 45.708 377.06 45.708 381.06 43.708 382.06 39.708 382.06 32.708 380.06 32.708 380.06 33.708 376.06 32.708 372.06 38.708 368.06 47.708 366.06 56.708 367.06 58.708 370.06 60.708 373.06 60.708 385.06 48.708" />
        </g>
    </g>
    <g id="s-path">
        <g style="clip-path: url(#clip-path-14)">
            <polyline class="svg-text__animate svg-text__animate--14" id="s-path-2" data-name="s-path"
                points="400.06 41.708 401.06 32.708 396.06 33.708 391.06 36.708 395.06 51.708 395.06 54.708 391.06 59.708 387.06 60.708 379.06 59.708" />
        </g>
    </g>
</svg>

```

答:
The issue seems due to IE doesn't support SVG animation.

I think the easiest workaround to this is using a gif in IE. I make a gif of the animation and make loop count of it to once using this tool. The outcome gif is like this. We can use IE specific css rules to show the gif and hide other parts in IE:

```<code>@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
   /* IE10+ CSS */
    #gif-img{
        display:block;
    }
    .banner__1__content--l2 svg-text--container {
        display: none;
    }
}
</code>```

```<code><div id="gif-img">
    <img src="https://i.stack.imgur.com/jrK6Y.gif" />
</div>
<div class="banner__1__content--l2 svg-text--container">
    ...
</div>
</code>```

In Edge, I found that the animation will work if we make the value of stroke-width large enough. But the outcome is still a little different from that in Chrome and the New Edge Chromium (You could try to update to the latest Edge Chromium official build):

```<code>@supports (-ms-ime-align: auto) {
    /* Edge 16+ CSS */
    .svg-text {
        stroke-width: 700px;
    }
}
</code>```

Body:
I have an SVG animation which is not working on Edge and obviously not on IE. I have done extensive research on the issue and am aware of using pixels for stroke-dashoffset and stroke-dasharray in order for it to work. I have done the same but it is not working. Now, as far as I know, Edge supports SVG animations at the moment; yet again, it is not working for me.

I was wondering if there are any workarounds, like a way to use a background image when the animation is not working? I searched a lot and was unable to find related topics. Any ideas would be appreciated.

@-webkit-keyframes handwriting {
  to {
    stroke-dashoffset: 0px;
  }
}

@-moz-keyframes handwriting {
  to {
    stroke-dashoffset: 0px;
  }
}

@keyframes handwriting {
  to {
    stroke-dashoffset: 0px;
  }
}

.svg-text {
  width: 23rem;
  height: 100%;
  margin-top: 1rem;
  margin-bottom: -2rem;
  fill: none;
  stroke: #000;
  stroke-miterlimit: 10;
  stroke-width: 7px;
  -webkit-filter: drop-shadow(3px 3px 2px rgba(0, 0, 0, 0.7));
  filter: drop-shadow(3px 3px 2px rgba(0, 0, 0, 0.7));
  z-index: 100;
}

.svg-text__animate {
  stroke-dasharray: 300px;
  stroke-dashoffset: 300px;
  animation: handwriting 0.8s linear forwards;
}

.svg-text--container .svg-text__animate {
  opacity: 1;
}

.svg-text--container .svg-text__animate--1 {
  -webkit-animation-delay: 0.8s;
  animation-delay: 0.8s;
}

.svg-text--container .svg-text__animate--2 {
  -webkit-animation-delay: 1.1s;
  animation-delay: 1.1s;
}

.svg-text--container .svg-text__animate--3 {
  -webkit-animation-delay: 1.3s;
  animation-delay: 1.3s;
}

.svg-text--container .svg-text__animate--4 {
  -webkit-animation-delay: 1.8s;
  animation-delay: 1.8s;
}

.svg-text--container .svg-text__animate--5 {
  -webkit-animation-delay: 2s;
  animation-delay: 2s;
}

.svg-text--container .svg-text__animate--6 {
  -webkit-animation-delay: 2.2s;
  animation-delay: 2.2s;
}

.svg-text--container .svg-text__animate--7 {
  -webkit-animation-delay: 2.4s;
  animation-delay: 2.4s;
}

.svg-text--container .svg-text__animate--8 {
  -webkit-animation-delay: 2.6s;
  animation-delay: 2.6s;
}

.svg-text--container .svg-text__animate--9 {
  -webkit-animation-delay: 2.9s;
  animation-delay: 2.9s;
}

.svg-text--container .svg-text__animate--10 {
  -webkit-animation-delay: 3.3s;
  animation-delay: 3.3s;
}

.svg-text--container .svg-text__animate--11 {
  -webkit-animation-delay: 3.5s;
  animation-delay: 3.5s;
}

.svg-text--container .svg-text__animate--12 {
  -webkit-animation-delay: 3.7s;
  animation-delay: 3.7s;
}

.svg-text--container .svg-text__animate--12 {
  -webkit-animation-delay: 4s;
  animation-delay: 4s;
}

.svg-text--container .svg-text__animate--13 {
  -webkit-animation-delay: 4.3s;
  animation-delay: 4.3s;
}

.svg-text--container .svg-text__animate--14 {
  -webkit-animation-delay: 4.6s;
  animation-delay: 4.6s;
}

<svg class="svg-text" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 410 94.376">
    <defs>
        <clipPath id="clip-path" transform="translate(-277.94 -292.292)">
            <path id="h"
                d="M310.345,298.912a.987.987,0,0,1,.457.774q0,.632-.809.632a1.542,1.542,0,0,1-.738-.211,6.2,6.2,0,0,0-2.426-.808q-2.145,0-4.781,4.289-9.282,15.117-13.746,39.586A60.811,60.811,0,0,1,301.415,325.6a4.584,4.584,0,0,1,2.32-1.407c.141,0,3.7,1.829,3.868,1.969a3.621,3.621,0,0,1,.914,2.813,11.783,11.783,0,0,1-.071,1.23,70.081,70.081,0,0,1-3.586,15.153q1.089-1.477,3.446-4.325a1.514,1.514,0,0,1,.949-.6q.387,0,.387.457a2.2,2.2,0,0,1-.457,1.195q-2.04,2.954-5.414,8.648-.282.563-1.372,2.954-.456,1.125-1.265,1.125a5.329,5.329,0,0,1-2.637-1.231q-.7-.492-.246-1.547,6.047-15.187,6.4-22.676.107-2.144-.6-2.144a4.88,4.88,0,0,0-1.934,1.195,40.078,40.078,0,0,0-6.644,7.735,65,65,0,0,0-8.051,14.941q-.774,2.181-1.442,2.18a5.593,5.593,0,0,1-2.355-1.442,2.49,2.49,0,0,1-.6-2.461q4.078-22.323,10.618-38.144,4.851-11.778,8.753-15.4a2.9,2.9,0,0,1,1.934-.914,4.6,4.6,0,0,1,2.5,1.125Q308.587,297.472,310.345,298.912Zm-6.61,25.277a4.527,4.527,0,0,1,3.868,1.969,3.621,3.621,0,0,1,.914,2.813"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-2" transform="translate(-277.94 -292.292)">
            <path id="u"
                d="M339.208,327.986a72.646,72.646,0,0,0-7,20.391q.984-1.722,2.391-.395.175-.492.562-.492c.352,0,.527.223.527.668a1.166,1.166,0,0,1-.105.457,55.678,55.678,0,0,0-2.953,7.91q-.422,1.758-1.125,1.758a6.906,6.906,0,0,1-2.742-1.371q-1.09-.772-.739-2.742a86.79,86.79,0,0,1,3.551-13.324,125.245,125.245,0,0,1-11.391,16.277,2.631,2.631,0,0,1-2.214,1.16c-1.974-.283-4.746-1.933-4.746-3.34a5.425,5.425,0,0,1,.07-.843,56.461,56.461,0,0,1,3.656-16.7q-.6.563-1.793,1.653-.458.387-.7.211-.282-.212.1-.809a26.229,26.229,0,0,0,2.25-3.656,17.171,17.171,0,0,1,2.286-4.254,1.763,1.763,0,0,1,1.336-.774,6.131,6.131,0,0,1,2.777,1.125q.492.317.492.633l-.773,1.16q-1.76,2.673-3.727,9.422a45.669,45.669,0,0,0-2.18,11.918q0,1.512.633,1.512.563,0,1.828-1.3a83.886,83.886,0,0,0,7.84-10.9,93.906,93.906,0,0,0,5.485-9.211q1.581-3.586,2.566-4.219a2.1,2.1,0,0,1,1.125-.422,5.413,5.413,0,0,1,1.9.739q1.406.738,1.407,1.089c0,.071-.083.164-.246.282A1.082,1.082,0,0,0,339.208,327.986Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-3" transform="translate(-277.94 -292.292)">
            <path id="m"
                d="M383.61,342.26q-2.286,3.41-6.82,12.023a2.861,2.861,0,0,1-.527.809,2.439,2.439,0,0,1-1.477-.176q-2.425-.738-2.426-1.406a3.182,3.182,0,0,1,.317-1.125,98.045,98.045,0,0,0,4.517-13.131,41.709,41.709,0,0,0,1.811-10.705q0-1.23-.879-1.231a2.381,2.381,0,0,0-1.406.668q-2.988,2.427-7.735,9.422a63.256,63.256,0,0,0-8.05,15.785,2.072,2.072,0,0,1-.422.95q-.211.105-1.02-.176a9.239,9.239,0,0,1-2.285-1.2,1.049,1.049,0,0,1-.527-.808q0-.071.527-1.371a60.039,60.039,0,0,0,4.6-22.324q0-1.089-.632-1.09a2.016,2.016,0,0,0-1.16.6q-3.764,3.165-8.368,10.9a71.915,71.915,0,0,0-6.609,13.851q-.562,1.653-1.16,1.653A7.321,7.321,0,0,1,341,352.6q-.562-.317-.563-.668c0-.258,2.825-6.75,4.043-11.742q2.074-8.544,1.793-12.411-.526.528-1.793,1.741t-1.9,1.845a1.257,1.257,0,0,1-.809.457q-.526,0-.527-.7a1.406,1.406,0,0,1,.387-.984,39.016,39.016,0,0,0,3.9-4.817q.7-.983,1.231-.984c.257,0,2.683,1.547,3.269,1.758a1.308,1.308,0,0,1,.738,1.3,2.742,2.742,0,0,1-.07.6A74.982,74.982,0,0,1,348,340.643q6.224-11.181,11.566-15.891a2.193,2.193,0,0,1,1.442-.668,19.064,19.064,0,0,1,4.148,2.074,3.038,3.038,0,0,1,.528,1.969,45.049,45.049,0,0,1-1.653,12.762q6.856-10.865,12.481-16.137a2.229,2.229,0,0,1,1.547-.7c.7,0,5.3,2.8,5.2,4.746a49.5,49.5,0,0,1-3.656,16.383,37.274,37.274,0,0,0,2.742-3.586,1.277,1.277,0,0,1,1.054-.738c.352,0,.528.188.528.562A1.649,1.649,0,0,1,383.61,342.26Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-4" transform="translate(-277.94 -292.292)">
            <path id="a"
                d="M411.771,330.061a110.6,110.6,0,0,0-4.465,15.046,18.576,18.576,0,0,0,1.388-1.511,14.682,14.682,0,0,1,1.073-1.2,1.366,1.366,0,0,1,1.054-.632.466.466,0,0,1,.528.527,1.389,1.389,0,0,1-.282.738,28.5,28.5,0,0,0-4.394,9.879q-.317,1.406-.949,1.406a5.306,5.306,0,0,1-2.215-1.125,2.693,2.693,0,0,1-1.09-1.054,3.22,3.22,0,0,1,0-1.547,80.333,80.333,0,0,1,3.691-14.836,83.84,83.84,0,0,1-8.332,10.969,48.893,48.893,0,0,1-6.644,6.679,4.649,4.649,0,0,1-2.25,1.02,3.888,3.888,0,0,1-1.934-1.02,3.46,3.46,0,0,1-1.863-3.093,6.26,6.26,0,0,1,.07-.879q.633-5.2,4.571-12.112a48.7,48.7,0,0,1,9.035-11.654,4.469,4.469,0,0,1,2.953-1.512q1.266.072,4.816,3.34a.806.806,0,0,1,.317.6q0,.563-.739.562a1.326,1.326,0,0,1-.527-.105q-2.5-1.054-4.008.07-3.3,2.425-7.312,8.543-4.641,7.032-5.59,12.656a3.167,3.167,0,0,0-.035.457q0,.879.7.879a4.52,4.52,0,0,0,2.847-1.652,93.5,93.5,0,0,0,8.438-9.633,48.781,48.781,0,0,0,5.906-9.07q.95-2.25,1.231-3.164.456-1.582.984-1.582a6.82,6.82,0,0,1,2.461,1.441,1.926,1.926,0,0,1,.879,1.09A3.482,3.482,0,0,1,411.771,330.061Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-5" transform="translate(-277.94 -292.292)">
            <path id="n"
                d="M441.97,340.959q-2.111,3.2-5.485,9.281-.633,1.582-1.23,3.164-.494,1.089-1.3,1.09a5.305,5.305,0,0,1-1.863-.527q-1.371-.562-1.371-1.125a3.338,3.338,0,0,1,.457-1.09,61.207,61.207,0,0,0,4.078-11.566q1.932-7.278,1.652-11.11-.07-1.547-.7-1.547-.458,0-1.371.879-8.859,8.649-15.328,23.133-.81,1.792-1.9,1.793a7.022,7.022,0,0,1-2.566-.879q-.7-.316-.738-.6a4.677,4.677,0,0,1,.386-.984,85.558,85.558,0,0,0,4.043-11.32,59.364,59.364,0,0,0,2.426-11.567q.071-1.264-.07-1.265-.036,0-.984.949t-2.637,2.461a.973.973,0,0,1-.7.316c-.329,0-.492-.128-.492-.386a.969.969,0,0,1,.351-.633q1.511-1.933,3.973-4.817a1.482,1.482,0,0,1,1.09-.6c.562,0,4.265,2.66,4.148,3.832q-.387,3.867-3.973,13.957a63.318,63.318,0,0,1,6.856-10.143q4.5-5.607,6.68-6.627a4.536,4.536,0,0,1,1.546-.492c.305,0,4.383,2.579,4.36,4.148a41.953,41.953,0,0,1-1.2,7.911q-.948,4.5-1.757,7,1.019-1.3,2.6-3.375a.765.765,0,0,1,.563-.352q.526,0,.527.668A1.324,1.324,0,0,1,441.97,340.959Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-6" transform="translate(-277.94 -292.292)">
            <path id="l"
                d="M486.548,298.912a.967.967,0,0,1,.457.738q0,.669-.809.668a1.542,1.542,0,0,1-.738-.211,6.2,6.2,0,0,0-2.426-.808q-2.214,0-4.851,4.289-9.564,15.575-13.606,40.254-.1.668-.351,1.793.808-.844,2.39-2.742.915-1.089,1.336-1.09.915,0,.141,1.09a27.023,27.023,0,0,0-4.465,10.089q-.387,1.3-.984,1.3a1.438,1.438,0,0,1-.739-.316q-1.793-1.2-2.039-1.406a2.473,2.473,0,0,1-.7-1.829,6.6,6.6,0,0,1,.176-1.371q4.078-22.393,10.512-38.144,4.851-11.883,8.683-15.4a2.978,2.978,0,0,1,2.11-.949,4.835,4.835,0,0,1,2.461,1.195Q484.823,297.471,486.548,298.912Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-7" transform="translate(-277.94 -292.292)">
            <path id="a-2" data-name="a"
                d="M496.673,330.061a110.6,110.6,0,0,0-4.465,15.046A18.552,18.552,0,0,0,493.6,343.6a14.556,14.556,0,0,1,1.072-1.2,1.367,1.367,0,0,1,1.055-.632.466.466,0,0,1,.527.527,1.394,1.394,0,0,1-.281.738,28.5,28.5,0,0,0-4.4,9.879q-.317,1.406-.949,1.406a5.311,5.311,0,0,1-2.215-1.125,2.7,2.7,0,0,1-1.09-1.054,3.246,3.246,0,0,1,0-1.547,80.326,80.326,0,0,1,3.692-14.836,83.929,83.929,0,0,1-8.332,10.969,48.94,48.94,0,0,1-6.645,6.679,4.646,4.646,0,0,1-2.25,1.02,3.883,3.883,0,0,1-1.933-1.02,3.459,3.459,0,0,1-1.864-3.093,6.273,6.273,0,0,1,.071-.879q.632-5.2,4.57-12.112a48.721,48.721,0,0,1,9.035-11.654,4.471,4.471,0,0,1,2.953-1.512q1.266.072,4.817,3.34a.8.8,0,0,1,.316.6q0,.563-.738.562a1.331,1.331,0,0,1-.528-.105q-2.5-1.054-4.007.07-3.306,2.425-7.313,8.543-4.641,7.032-5.59,12.656a3.317,3.317,0,0,0-.035.457q0,.879.7.879a4.52,4.52,0,0,0,2.848-1.652,93.5,93.5,0,0,0,8.437-9.633,48.8,48.8,0,0,0,5.907-9.07q.948-2.25,1.23-3.164.456-1.582.984-1.582a6.82,6.82,0,0,1,2.461,1.441,1.926,1.926,0,0,1,.879,1.09A3.466,3.466,0,0,1,496.673,330.061Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-8" transform="translate(-277.94 -292.292)">
            <path id="n-2" data-name="n"
                d="M526.872,340.959q-2.109,3.2-5.484,9.281-.633,1.582-1.231,3.164-.492,1.089-1.3,1.09a5.311,5.311,0,0,1-1.863-.527q-1.371-.562-1.371-1.125a3.338,3.338,0,0,1,.457-1.09,61.137,61.137,0,0,0,4.078-11.566q1.933-7.278,1.653-11.11-.072-1.547-.7-1.547-.456,0-1.371.879-8.859,8.649-15.328,23.133-.808,1.792-1.9,1.793a7.025,7.025,0,0,1-2.567-.879q-.7-.316-.738-.6a4.712,4.712,0,0,1,.387-.984,85.7,85.7,0,0,0,4.043-11.32,59.439,59.439,0,0,0,2.426-11.567q.069-1.264-.071-1.265-.034,0-.984.949t-2.637,2.461a.973.973,0,0,1-.7.316c-.329,0-.492-.128-.492-.386a.969.969,0,0,1,.351-.633q1.512-1.933,3.973-4.817a1.483,1.483,0,0,1,1.09-.6c.562,0,4.266,2.66,4.148,3.832q-.387,3.867-3.972,13.957a63.371,63.371,0,0,1,6.855-10.143q4.5-5.607,6.68-6.627a4.533,4.533,0,0,1,1.547-.492c.3,0,4.382,2.579,4.359,4.148a42.015,42.015,0,0,1-1.195,7.911q-.95,4.5-1.758,7,1.02-1.3,2.6-3.375a.762.762,0,0,1,.562-.352c.352,0,.527.223.527.668A1.324,1.324,0,0,1,526.872,340.959Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-9" transform="translate(-277.94 -292.292)">
            <path id="g"
                d="M555.138,328.619q-10.794,56-28.055,55.969-6.222,0-13.465-6.856a1.815,1.815,0,0,1-.668-1.3q0-1.022.949-1.02a1.457,1.457,0,0,1,.95.387q5.73,4.885,10.265,4.887,14.484,0,24.153-42.54-5.873,10.092-10.231,14.45a4.814,4.814,0,0,1-3.129,1.793,5.663,5.663,0,0,1-3.129-1.407,5.365,5.365,0,0,1-3.2-5.414q.212-4.605,3.551-11.425a35.329,35.329,0,0,1,6.82-10.02,5.634,5.634,0,0,1,3.621-1.9,4.6,4.6,0,0,1,2.637,1.054q.212.177,2.813,2.5a1.262,1.262,0,0,1,.527.914q0,.633-.844.633a2.842,2.842,0,0,1-1.195-.316,4.388,4.388,0,0,0-2.074-.563,3.937,3.937,0,0,0-2.672,1.055,27.76,27.76,0,0,0-5.379,7.313,31.314,31.314,0,0,0-3.762,10.125,15.3,15.3,0,0,0-.176,2.144q0,2.6,1.407,2.6a3.09,3.09,0,0,0,2-.95,42.8,42.8,0,0,0,8.3-10.371,51.635,51.635,0,0,0,5.45-11.5,11.638,11.638,0,0,0,.6-3.551q0-1.335.633-1.335a6.252,6.252,0,0,1,2.6,1.476Q555.594,326.334,555.138,328.619Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-10" transform="translate(-277.94 -292.292)">
            <path id="u-2" data-name="u"
                d="M585.2,327.97a72.646,72.646,0,0,0-7,20.391q.984-1.722,2.391-4.395.175-.492.562-.492.528,0,.528.668a1.151,1.151,0,0,1-.106.457,55.678,55.678,0,0,0-2.953,7.91q-.421,1.758-1.125,1.758a6.913,6.913,0,0,1-2.742-1.371q-1.09-.773-.738-2.742a86.682,86.682,0,0,1,3.55-13.324,125.356,125.356,0,0,1-11.39,16.277,2.63,2.63,0,0,1-2.215,1.16c-1.974-.283-4.746-1.933-4.746-3.34a5.55,5.55,0,0,1,.07-.843,56.492,56.492,0,0,1,3.656-16.7q-.6.563-1.793,1.653-.456.387-.7.211-.282-.211.106-.809a26.439,26.439,0,0,0,2.25-3.656,17.14,17.14,0,0,1,2.285-4.254,1.763,1.763,0,0,1,1.336-.773,6.127,6.127,0,0,1,2.777,1.125q.492.315.492.632l-.773,1.161q-1.758,2.672-3.727,9.421a45.7,45.7,0,0,0-2.179,11.918q0,1.512.633,1.512.561,0,1.828-1.3a84,84,0,0,0,7.839-10.9,93.906,93.906,0,0,0,5.485-9.211q1.582-3.587,2.566-4.219a2.107,2.107,0,0,1,1.125-.422,5.423,5.423,0,0,1,1.9.739q1.405.738,1.406,1.089c0,.071-.083.164-.246.282A1.091,1.091,0,0,0,585.2,327.97Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-11" transform="translate(-277.94 -292.292)">
            <path id="a-3" data-name="a"
                d="M611.458,330.061a110.6,110.6,0,0,0-4.465,15.046,18.552,18.552,0,0,0,1.389-1.511,14.556,14.556,0,0,1,1.072-1.2,1.367,1.367,0,0,1,1.055-.632.466.466,0,0,1,.527.527,1.394,1.394,0,0,1-.281.738,28.5,28.5,0,0,0-4.395,9.879q-.317,1.406-.949,1.406a5.311,5.311,0,0,1-2.215-1.125,2.7,2.7,0,0,1-1.09-1.054,3.246,3.246,0,0,1,0-1.547,80.326,80.326,0,0,1,3.692-14.836,83.929,83.929,0,0,1-8.332,10.969,48.94,48.94,0,0,1-6.645,6.679,4.646,4.646,0,0,1-2.25,1.02,3.883,3.883,0,0,1-1.933-1.02,3.461,3.461,0,0,1-1.864-3.093,6.273,6.273,0,0,1,.071-.879q.633-5.2,4.57-12.112a48.747,48.747,0,0,1,9.035-11.654,4.471,4.471,0,0,1,2.953-1.512q1.266.072,4.817,3.34a.8.8,0,0,1,.316.6q0,.563-.738.562a1.322,1.322,0,0,1-.527-.105q-2.5-1.054-4.008.07-3.3,2.425-7.313,8.543-4.641,7.032-5.59,12.656a3.317,3.317,0,0,0-.035.457q0,.879.7.879a4.52,4.52,0,0,0,2.848-1.652,93.5,93.5,0,0,0,8.437-9.633,48.747,48.747,0,0,0,5.907-9.07q.949-2.25,1.23-3.164.456-1.582.985-1.582a6.837,6.837,0,0,1,2.461,1.441,1.923,1.923,0,0,1,.878,1.09A3.466,3.466,0,0,1,611.458,330.061Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-12" transform="translate(-277.94 -292.292)">
            <path id="g-2" data-name="g"
                d="M639.688,328.619q-10.792,56-28.054,55.969-6.224,0-13.465-6.856a1.815,1.815,0,0,1-.668-1.3q0-1.022.949-1.02a1.453,1.453,0,0,1,.949.387q5.731,4.885,10.266,4.887,14.484,0,24.152-42.54-5.871,10.092-10.23,14.45a4.814,4.814,0,0,1-3.129,1.793,5.66,5.66,0,0,1-3.129-1.407,5.365,5.365,0,0,1-3.2-5.414q.212-4.605,3.551-11.425a35.288,35.288,0,0,1,6.82-10.02,5.634,5.634,0,0,1,3.621-1.9,4.606,4.606,0,0,1,2.637,1.054q.21.177,2.812,2.5a1.26,1.26,0,0,1,.528.914q0,.633-.844.633a2.835,2.835,0,0,1-1.2-.316,4.392,4.392,0,0,0-2.075-.563,3.941,3.941,0,0,0-2.672,1.055,27.782,27.782,0,0,0-5.378,7.313,31.314,31.314,0,0,0-3.762,10.125A15.3,15.3,0,0,0,618,349.08q0,2.6,1.406,2.6a3.09,3.09,0,0,0,2-.95,42.819,42.819,0,0,0,8.3-10.371,51.627,51.627,0,0,0,5.449-11.5,11.61,11.61,0,0,0,.6-3.551q0-1.335.633-1.335a6.251,6.251,0,0,1,2.6,1.476Q640.146,326.334,639.688,328.619Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-13" transform="translate(-277.94 -292.292)">
            <path id="e"
                d="M661.239,343.455c-5.7,7.29-9.713,11.147-12.023,10.934-4.216-.389-6.82-4.207-6.82-5.59a4.907,4.907,0,0,1,.07-.809,58.459,58.459,0,0,1,2.566-10.652q-1.3-.668-1.3-1.266,0-.492.739-.492a2.486,2.486,0,0,1,1.16.316q3.129-7.031,5.625-9.984,1.617-1.968,2.918-1.969a11.294,11.294,0,0,1,2.953,1.02q-.175-1.055.6-1.231c.023,0,3.164.176,3.164.528a4.41,4.41,0,0,1-.106.6,4.407,4.407,0,0,0-.105.914q0,1.266.035,3.129t.035,2.5q0,4.36-2.391,6.083a8.174,8.174,0,0,1-4.921,1.582,24.451,24.451,0,0,1-4.782-.774,19.5,19.5,0,0,0-1.336,4.254,27.565,27.565,0,0,0-.914,7.1q.036,1.827,1.16,1.828a3.818,3.818,0,0,0,1.09-.211q4.078-1.442,11.356-8.789a1.318,1.318,0,0,1,.914-.457q.668,0,.668.632A1.283,1.283,0,0,1,661.239,343.455Zm-4.113-15.539q0-1.371-.6-1.371a2.231,2.231,0,0,0-1.125.562q-3.446,2.778-6.047,9.739.7.105,2.461.211a5.481,5.481,0,0,0,4.254-1.3,5.122,5.122,0,0,0,1.16-3.481Q657.126,334.069,657.126,327.916Z"
                style="fill: none" />
        </clipPath>
        <clipPath id="clip-path-14" transform="translate(-277.94 -292.292)">
            <path id="s"
                d="M675.056,345.494c-.056,4.506-7.137,8.695-8.192,8.789a9.977,9.977,0,0,1-2.179-.105q-2.074-.317-5.1-.774a1.169,1.169,0,0,1-1.02-1.019q.141-.949,1.969-1.125,2.5-.176,7.383-.879a3.619,3.619,0,0,0,2.6-2.074,4.319,4.319,0,0,0,.457-2.075q0-2.214-2.215-7.8-2.18-5.449-2.039-7.278.28-4.393,8.121-6.117.773-.176.773.563,0,.422-.562.668-3.8,1.653-3.8,4.078a10.268,10.268,0,0,0,.351,2.373q.353,1.424,2.11,6.838A20.474,20.474,0,0,1,675.056,345.494Zm5.625-20.18a24.454,24.454,0,0,1-.844,5.063,3.382,3.382,0,0,1-.7,1.547,4.249,4.249,0,0,1-1.2.527,6.928,6.928,0,0,1-1.617.492q-.527,0-.527-.7a4.926,4.926,0,0,1,.141-1.019,15.251,15.251,0,0,0,.65-4.834q-.194-1.353.791-1.7a7.129,7.129,0,0,1,2.215-.879Q680.68,323.8,680.681,325.314Z"
                style="fill: none" />
        </clipPath>
    </defs>
    <g id="h-grp">
        <g style="clip-path: url(#clip-path)">
            <polyline class="svg-text__animate svg-text__animate--1" id="h-path"
                points="34.06 8.708 27.06 4.708 22.06 10.708 15.06 24.708 11.06 37.708 7.06 57.708 16.06 43.708 24.06 34.708 27.06 33.708 29.06 34.708 22.06 60.708 27.06 54.708 32.06 47.708" />
        </g>
    </g>
    <g id="u-grp">
        <g style="clip-path: url(#clip-path-2)">
            <polyline class="svg-text__animate svg-text__animate--2" id="u-path"
                points="36.06 43.708 39.06 39.708 42.06 34.708 44.06 35.708 41.06 42.708 40.06 46.708 38.06 55.708 38.06 58.708 38.06 59.708 40.06 60.708 43.06 57.708 53.06 43.708 58.06 34.708 60.06 35.708 57.06 42.708 55.06 48.708 52.06 60.708 53.06 60.708 58.06 50.708" />
        </g>
    </g>
    <g id="m-grp">
        <g style="clip-path: url(#clip-path-3)">
            <polyline class="svg-text__animate svg-text__animate--3" id="m-path"
                points="62.06 40.708 69.06 32.708 72.06 34.708 69.06 48.708 65.06 60.708 73.06 45.708 79.06 36.708 83.06 33.708 86.06 34.708 86.06 41.708 84.06 49.708 81.06 60.708 88.06 47.708 94.06 38.708 100.06 33.708 103.06 35.708 103.06 41.708 100.06 53.708 97.06 61.708 107.06 46.708" />
        </g>
    </g>
    <g id="a-grp">
        <g style="clip-path: url(#clip-path-4)">
            <polyline class="svg-text__animate svg-text__animate--4" id="a-path"
                points="129.06 36.708 124.06 32.708 118.06 38.708 111.06 49.708 108.06 58.708 111.06 60.708 116.06 56.708 127.06 43.708 131.06 35.708 133.06 36.708 128.06 52.708 127.06 60.708 130.06 53.708 134.06 48.708" />
        </g>
    </g>
    <g id="n-grp">
        <g style="clip-path: url(#clip-path-5)">
            <polyline class="svg-text__animate svg-text__animate--5" id="n-path"
                points="138.06 38.708 143.06 32.708 147.06 35.708 142.06 51.708 138.06 59.708 140.06 60.708 145.06 49.708 151.06 40.708 157.06 34.708 159.06 33.708 162.06 35.708 159.06 51.708 155.06 60.708 156.06 61.708 160.06 52.708 165.06 46.708" />
        </g>
    </g>
    <g id="l-grp">
        <g style="clip-path: url(#clip-path-6)">
            <polyline class="svg-text__animate  svg-text__animate--6" id="l-path"
                points="210.06 8.708 203.06 4.708 193.06 20.708 183.06 58.708 184.06 60.708 187.06 54.708 191.06 47.708" />
        </g>
    </g>
    <g id="a-grp-2" data-name="a-grp">
        <g style="clip-path: url(#clip-path-7)">
            <polyline class="svg-text__animate svg-text__animate--7" id="a-path-2" data-name="a-path"
                points="213.963 36.708 208.963 32.708 202.963 38.708 195.963 49.708 192.963 58.708 195.963 60.708 200.963 56.708 211.963 43.708 215.963 35.708 217.963 36.708 212.963 52.708 211.963 60.708 214.963 53.708 218.963 48.708" />
        </g>
    </g>
    <g id="n-grp-2" data-name="n-grp">
        <g style="clip-path: url(#clip-path-8)">
            <polyline class="svg-text__animate svg-text__animate--8" id="n-path-2" data-name="n-path"
                points="222.963 38.708 227.963 32.708 231.963 35.708 226.963 51.708 222.963 59.708 224.963 60.708 229.963 49.708 235.963 40.708 241.963 34.708 243.963 33.708 246.963 35.708 243.963 51.708 239.963 60.708 240.963 61.708 244.963 52.708 249.963 46.708" />
        </g>
    </g>
    <g id="g-grp">
        <g style="clip-path: url(#clip-path-9)">
            <polyline class="svg-text__animate svg-text__animate--9" id="g-path"
                points="272.06 36.708 266.06 33.708 260.06 38.708 255.06 48.708 253.06 57.708 258.06 61.708 263.06 55.708 271.06 43.708 274.06 36.708 274.06 33.708 276.06 34.708 271.06 55.708 266.06 70.708 260.06 82.708 253.06 88.708 249.06 90.708 244.06 89.708 233.06 82.708" />
        </g>
    </g>
    <g id="u-grp-2" data-name="u-grp">
        <g style="clip-path: url(#clip-path-10)">
            <polyline class="svg-text__animate svg-text__animate--10" id="u-path-2" data-name="u-path"
                points="282.049 43.692 285.049 39.692 288.049 34.692 290.049 35.692 287.049 42.692 286.049 46.692 284.049 55.692 284.049 58.692 284.049 59.692 286.049 60.692 289.049 57.692 299.049 43.692 304.049 34.692 306.049 35.692 303.049 42.692 301.049 48.692 298.049 60.692 299.049 60.692 304.049 50.692" />
        </g>
    </g>
    <g id="a-grp-3" data-name="a-grp">
        <g style="clip-path: url(#clip-path-11)">
            <polyline class="svg-text__animate svg-text__animate--11" id="a-path-3" data-name="a-path"
                points="328.748 36.708 323.748 32.708 317.748 38.708 310.748 49.708 307.748 58.708 310.748 60.708 315.748 56.708 326.748 43.708 330.748 35.708 332.748 36.708 327.748 52.708 326.748 60.708 329.748 53.708 333.748 48.708" />
        </g>
    </g>
    <g id="g-grp-2" data-name="g-grp">
        <g style="clip-path: url(#clip-path-12)">
            <polyline class="svg-text__animate svg-text__animate--12" id="g-path-2" data-name="g-path"
                points="356.611 36.708 350.611 33.708 344.611 38.708 339.611 48.708 337.611 57.708 342.611 61.708 347.611 55.708 355.611 43.708 358.611 36.708 358.611 33.708 360.611 34.708 355.611 55.708 350.611 70.708 344.611 82.708 337.611 88.708 333.611 90.708 328.611 89.708 317.611 82.708" />
        </g>
    </g>
    <g id="e-grp">
        <g style="clip-path: url(#clip-path-13)">
            <polyline class="svg-text__animate svg-text__animate--13" id="e-path"
                points="364.06 42.708 372.06 45.708 377.06 45.708 381.06 43.708 382.06 39.708 382.06 32.708 380.06 32.708 380.06 33.708 376.06 32.708 372.06 38.708 368.06 47.708 366.06 56.708 367.06 58.708 370.06 60.708 373.06 60.708 385.06 48.708" />
        </g>
    </g>
    <g id="s-path">
        <g style="clip-path: url(#clip-path-14)">
            <polyline class="svg-text__animate svg-text__animate--14" id="s-path-2" data-name="s-path"
                points="400.06 41.708 401.06 32.708 396.06 33.708 391.06 36.708 395.06 51.708 395.06 54.708 391.06 59.708 387.06 60.708 379.06 59.708" />
        </g>
    </g>
</svg>

Body:
The issue seems due to IE doesn't support SVG animation.

I think the easiest workaround to this is using a gif in IE. I make a gif of the animation and make loop count of it to once using this tool. The outcome gif is like this. We can use IE specific css rules to show the gif and hide other parts in IE:

@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
   /* IE10+ CSS */
    #gif-img{
        display:block;
    }
    .banner__1__content--l2 svg-text--container {
        display: none;
    }
}

<div id="gif-img">
    <img src="https://i.stack.imgur.com/jrK6Y.gif" />
</div>
<div class="banner__1__content--l2 svg-text--container">
    ...
</div>

In Edge, I found that the animation will work if we make the value of stroke-width large enough. But the outcome is still a little different from that in Chrome and the New Edge Chromium (You could try to update to the latest Edge Chromium official build):

@supports (-ms-ime-align: auto) {
    /* Edge 16+ CSS */
    .svg-text {
        stroke-width: 700px;
    }
}