diff --git a/Socket/Chat.php b/Socket/Chat.php
new file mode 100644
index 0000000..2fafa47
--- /dev/null
+++ b/Socket/Chat.php
@@ -0,0 +1,213 @@
+!>!> oioioioioioi","!>!>");
+ //print_r( explode("","!>!> oioioioioioi ") );
+ $this->clients = new \SplObjectStorage;
+ $this->mysqli = new mysqli("localhost","root", "", "Message_app");
+ }
+
+ public function onOpen(ConnectionInterface $conn) {
+ // Store the new connection to send messages to later
+ $this->clients->attach($conn);
+
+ echo "New connection! ({$conn->resourceId})\n";
+
+ $conn -> send("oi !>!> ");
+ }
+
+ public function onMessage(ConnectionInterface $from, $msg) {
+ $numRecv = count($this->clients) - 1;
+ echo sprintf('Connection %d sending message "%s" to %d other connection%s' . "\n"
+ , $from->resourceId, $msg, $numRecv, $numRecv == 1 ? '' : 's');
+
+ /*$words = explode(" ", $msg);
+ if(sizeof($words) > 1){
+ $to = explode("",$msg);
+ $sender = explode("",$msg);
+ $action = $words[2];
+ unset($words[0]);
+ unset($words[1]);
+ unset($words[2]);
+ $Msg = explode("",$msg);
+ } else {
+ $action ="usr";
+ }*/
+
+ if( str_contains($msg,"!>!>") == 1 ){
+
+ $search = explode("",$msg);
+ $chat = explode("",$msg);
+ $user = explode("",$msg);
+
+ $from -> send("!>!> ".msgs($search[1],$chat[1],$user[1])."");
+
+ } else if (str_contains($msg,"!>!>") == 1 ) {
+ $id = explode("",$msg);
+ $this->user[$from->resourceId] = $id[1];
+
+
+
+ //$from -> send("oi");
+
+ $query = "UPDATE `chat` SET `Status` = 'online' WHERE `chat`.`id` = ".$this->user[$from->resourceId]."";
+ mysqli_query($this->mysqli, $query);
+
+ foreach ($this->clients as $client) {
+
+ if ($from !== $client) {
+ // The sender is not the receiver, send to each client connected
+ $client->send("!>!>");
+ echo("s");
+ }
+ }
+
+ } else if (str_contains($msg,"!>!>") == 1 ) {
+
+ $id = explode("",$msg);
+
+ $from -> send("!>!> ". users($id[1]) ."");
+
+ } else if(str_contains($msg,"!>!>") == 1 ){
+
+ $to = explode("",$msg);
+ $sender = explode("",$msg);
+ $date = explode("",$msg);
+ $Msg = explode("",$msg);
+ $msg_date = explode("",$msg);
+ $msg_id = explode("",$msg);
+ $msg_id = $msg_id[1];
+
+
+ if(in_array($to[1], $this->user)){
+ foreach ($this->clients as $client) {
+//echo "---\n";
+ // print_r($this->user);
+//echo "---\n";
+ //print_r($client);
+ if ( $this->user[$client->resourceId] == $to[1]) {
+ // The receiver is only the intended reciever
+ $client->send("!>!> ".$Msg[1]." ".$sender[1]." ".$msg_date[1]."");
+ }
+ }
+ }
+
+ $bool = send_msg($sender[1], $to[1], $Msg[1], $date[1]);
+
+ $id = explode("", $bool);
+
+ if (str_contains($bool,"sucess") == 1 )
+ {
+
+ $from -> send("!>!> $msg_id ".$id[1]." ");
+
+ } else {
+
+ $from -> send("!>!> $msg_id ");
+
+ }
+ } else if (str_contains($msg,"!>!>") == 1 ) {
+ $id1 = explode("",$msg);
+ $id2 = explode("",$msg);
+ $response = add_rel($id1[1], $id2[1]);
+
+ if($response == "in"){
+ $from -> send("!>!> ");
+ } else {
+ $from -> send("!>!> ");
+ }
+ } else if (str_contains($msg,"!>!>") == 1 ) {
+ $email = explode("", $msg);
+ $pass = explode("", $msg);
+
+ $truth = login($email[1], $pass[1]);
+
+ if (str_contains($truth,"") == 1 ) {
+ $from -> send(" ");
+ } else if (str_contains($truth,"") == 1 ) {
+ $from -> send(" ");
+ } else {
+ $id = explode("", $truth);
+ $img = explode("", $truth);
+
+ $from -> send(" ".$id[1]." ".$img[1]."");
+
+ }
+ } else if (str_contains($msg,"!>!>") == 1 ) {
+ $email = explode("", $msg);
+ $pass = explode("", $msg);
+ $username = explode("", $msg);
+
+ $from -> send(signUp($username[1],$email[1], $pass[1]));
+
+ } else if (str_contains($msg,"!>!>") == 1 ) {
+ $user = explode("", $msg);
+ $name = explode("", $msg);
+
+ $sucsess = Create_group($name[1],$user[1]);
+ $id = explode("", $sucsess);
+
+ $response = add_rel($user, $id[1]);
+
+ $from->send("!>!>");
+
+ } else if (str_contains($msg,"!>!>") == 1 ) {
+
+ $search = explode("",$msg);
+ $chat = explode("",$msg);
+ $user = explode("",$msg);
+
+
+ $from -> send("!>!> ".msgs_group($search[1], $chat[1], $user[1])."");
+
+
+ } else if (str_contains($msg,"!>!>") == 1 ) {
+
+ }
+ }
+
+ public function onClose(ConnectionInterface $conn) {
+ // The connection is closed, remove it, as we can no longer send it messages
+ $this->clients->detach($conn);
+
+ if(array_key_exists( $conn->resourceId , $this->user )){
+ echo "Connection {$conn->resourceId} has disconnected\n";
+ $query = "UPDATE `chat` SET `Status` = 'offline' WHERE `chat`.`id` = ".$this->user[$conn->resourceId];
+ mysqli_query($this->mysqli, $query);
+ }
+
+ foreach ($this->clients as $client) {
+ $client->send("!>!>");
+ }
+
+ }
+
+ public function onError(ConnectionInterface $conn, \Exception $e) {
+ echo "An error has occurred: {$e->getMessage()}\n";
+
+ // $conn->close();
+ }
+}
\ No newline at end of file
diff --git a/Socket/add_rel.php b/Socket/add_rel.php
new file mode 100644
index 0000000..ca9eff7
--- /dev/null
+++ b/Socket/add_rel.php
@@ -0,0 +1,24 @@
+ 0 && mysqli_num_rows($consult2) == 0){
+
+ $query= "INSERT INTO `users_relation` (`usr1`, `usr2`) VALUES ('".$id1."', '".$id2."'), ('".$id2."', '".$id1."')";
+
+ mysqli_query($mysqli, $query);
+ echo "success";
+
+ } else {
+ return "in";
+ }
+
+}
\ No newline at end of file
diff --git a/Socket/group_creation.php b/Socket/group_creation.php
new file mode 100644
index 0000000..1678b45
--- /dev/null
+++ b/Socket/group_creation.php
@@ -0,0 +1,32 @@
+!>!>";
+
+ $sql = "SELECT * FROM chat WHERE `Name`='$name' AND `grp`='yes' AND `Owner`='$user'";
+ $consulta = mysqli_query($mysqli, $sql);
+
+ if (mysqli_num_rows($consulta) != 0) {
+ $return .= " ";
+ } else {
+ //$senhaS = password_hash($senha, PASSWORD_DEFAULT);
+ $sql = "INSERT INTO chat (`Name`, `Owner`, `Private_key`, `Public_key`, `Status`, `grp`) VALUES ('$name', '$user', '1', '1', 'offline', 'yes')";
+ mysqli_query($mysqli, $sql);
+
+ $sql = "SELECT * FROM chat WHERE `Name`='$name' AND `grp`='yes' AND `Owner`='$user'";
+ $result = mysqli_query($mysqli, $sql);
+
+ while($row = mysqli_fetch_array($result))
+ {
+ $return = "".$row["id"]."";
+ }
+
+ $return .= " ";
+ }
+
+ return $return;
+}
+?>
\ No newline at end of file
diff --git a/Socket/login.php b/Socket/login.php
new file mode 100644
index 0000000..bd540e1
--- /dev/null
+++ b/Socket/login.php
@@ -0,0 +1,55 @@
+";
+ $return .= $email;
+ $return .= "";
+
+ } else if ($senha != $coluna["Password"]){
+ $return .= "";
+ } else {
+
+ $return .= "";
+ $return .= $coluna["id"];
+ $return .= "";
+
+ if ($coluna["Image"] != ""){
+
+ $return .= "";
+ $return .= $coluna["Image"];
+ $return .= "";
+
+ }else{
+
+ $return .= "";
+ $return .= "images/default.png";
+ $return .= "";
+
+ }
+ }
+
+ return $return;
+}
+?>
diff --git a/Socket/msgs_group.php b/Socket/msgs_group.php
new file mode 100644
index 0000000..ec77d99
--- /dev/null
+++ b/Socket/msgs_group.php
@@ -0,0 +1,185 @@
+".$lastdate."
";
+ }
+ }
+
+ $date = date_format($dat, "H:i");
+
+ /*if ($date == ""){
+ $dat= date_create($row["date"]);
+ $date = date_format($dat, "d") . " de " . date_format($dat, "M") . " de " . date_format($dat, "Y");
+ $last_date = $date;
+ }
+
+
+ if($last_sender != $row["sender"] && $last_sender != ""){
+
+ $return .= "";
+ $group = true;
+
+ }*/
+
+ if ($row["sender"] == $user ){// && $row["sender"] != $last_sender){
+
+
+
+ $return .= "
+
+
+
+
+

+
".$date."
+
+
+
+
".str_replace("\n", "
", $row['message'])."
+
+
+ ";
+
+ $last_sender = $row["sender"];
+ $group == false;
+ $lastdate = date_format($dat, "d/m/Y" );
+ }
+
+ if ($row["sender"] != $user ){//&& $row["sender"] != $last_sender){
+
+
+
+ $return .= "
+
+
+
+
+

+
".$date."
+
+
+
+
+
";
+ $query = "SELECT * FROM users WHERE User_id = '".$row["sender"]."'";
+ $res = mysqli_query($mysqli, $query);
+
+ while($row1 = mysqli_fetch_array($res)){
+ $return .= $row1["Username"];
+ }
+ $return .= "
+
".str_replace("\n", "
", $row['message'])."
+
+
+ ";
+
+ $group == false;
+ $last_sender = $row["sender"];
+ $lastdate = date_format($dat, "d/m/Y" );
+
+ }
+
+ // $return .= "".str_replace("\n", "
", $row['message'])."
";
+
+ /* if( isset($last_date) && calculateTimeDifference($row["date"]) != "" ){
+
+ $return .= "
";
+ $group = true;
+
+ }*/
+
+ }
+
+ if( !(isset($search)) && $lastdate != date_format(date_create(), "d/m/Y")){
+
+ $return .= "
".$lastdate."
" ;
+
+ }
+
+if ( isset($search) && $return == ""){
+ $return = "
+
+
+
+

+
+
+
+
+
+
+ ";
+ }
+
+ return $return;
+
+}
+
+ /*function to calculate the time difference between two mysql timestamps
+ function calculateTimeDifference($timestamp1) {
+ $timestamp1 = strtotime($timestamp1);
+ $time = new DateTime();
+ $time2 = $time -> format('Y-m-d H:i:s');
+ $timestamp2 = strtotime($time2);
+ $timeDiff = abs($timestamp2 - $timestamp1);
+ $d = floor($timeDiff / (60 * 60 * 24));
+ $h = floor(($timeDiff % (60 * 60 * 24)) / (60 * 60));
+ $m = floor(($timeDiff % (60 * 60)) / 60);
+ $s = floor($timeDiff % 60);
+ $time_diff = "";
+ $formats = array("%a" => "d", "%h" => "h", "%i" => "m");//, "%s" => "s");
+ foreach ($formats as $key => $value) {
+ if($$value > 0) {
+ $time_diff .= $$value . "" . $value . " ";
+ }
+ }
+
+ $time_diff = rtrim($time_diff, "");
+
+ return $time_diff;
+
+ }
+*/
+?>
diff --git a/Socket/search_and_show_msgs.php b/Socket/search_and_show_msgs.php
new file mode 100644
index 0000000..db98512
--- /dev/null
+++ b/Socket/search_and_show_msgs.php
@@ -0,0 +1,185 @@
+".$lastdate."
";
+ }
+ }
+
+ $date = date_format($dat, "H:i");
+
+ /*if ($date == ""){
+ $dat= date_create($row["date"]);
+ $date = date_format($dat, "d") . " de " . date_format($dat, "M") . " de " . date_format($dat, "Y");
+ $last_date = $date;
+ }
+
+
+ if($last_sender != $row["sender"] && $last_sender != ""){
+
+ $return .= "";
+ $group = true;
+
+ }*/
+
+ if ($row["sender"] == $user ){// && $row["sender"] != $last_sender){
+
+
+
+ $return .= "
+
+
+
+
+

+
".$date."
+
+
+
+
".str_replace("\n", "
", $row['message'])."
+
+
+ ";
+
+ $last_sender = $row["sender"];
+ $group == false;
+ $lastdate = date_format($dat, "d/m/Y" );
+ }
+
+ if ($row["sender"] != $user ){//&& $row["sender"] != $last_sender){
+
+
+
+ $return .= "
+
+
+
+
+

+
".$date."
+
+
+
+
+
";/*
+ $query = "SELECT * FROM users WHERE User_id = '".$row["sender"]."'";
+ $res = mysqli_query($mysqli, $query);
+
+ while($row1 = mysqli_fetch_array($res)){
+ $return .= $row1["Username"];
+ } */
+ $return .= "
+
".str_replace("\n", "
", $row['message'])."
+
+
+ ";
+
+ $group == false;
+ $last_sender = $row["sender"];
+ $lastdate = date_format($dat, "d/m/Y" );
+
+ }
+
+ // $return .= "".str_replace("\n", "
", $row['message'])."
";
+
+ /* if( isset($last_date) && calculateTimeDifference($row["date"]) != "" ){
+
+ $return .= "
";
+ $group = true;
+
+ }*/
+
+ }
+
+ if( !(isset($search)) && $lastdate != date_format(date_create(), "d/m/Y")){
+
+ $return .= "
".$lastdate."
" ;
+
+ }
+
+if ( isset($search) && $return == ""){
+ $return = "
+
+
+
+

+
+
+
+
+
+
+ ";
+ }
+
+ return $return;
+
+}
+
+ /*function to calculate the time difference between two mysql timestamps
+ function calculateTimeDifference($timestamp1) {
+ $timestamp1 = strtotime($timestamp1);
+ $time = new DateTime();
+ $time2 = $time -> format('Y-m-d H:i:s');
+ $timestamp2 = strtotime($time2);
+ $timeDiff = abs($timestamp2 - $timestamp1);
+ $d = floor($timeDiff / (60 * 60 * 24));
+ $h = floor(($timeDiff % (60 * 60 * 24)) / (60 * 60));
+ $m = floor(($timeDiff % (60 * 60)) / 60);
+ $s = floor($timeDiff % 60);
+ $time_diff = "";
+ $formats = array("%a" => "d", "%h" => "h", "%i" => "m");//, "%s" => "s");
+ foreach ($formats as $key => $value) {
+ if($$value > 0) {
+ $time_diff .= $$value . "" . $value . " ";
+ }
+ }
+
+ $time_diff = rtrim($time_diff, "");
+
+ return $time_diff;
+
+ }
+*/
+?>
diff --git a/Socket/search_and_show_users.php b/Socket/search_and_show_users.php
new file mode 100644
index 0000000..89ccaa1
--- /dev/null
+++ b/Socket/search_and_show_users.php
@@ -0,0 +1,154 @@
+
+
+
+
".$row["Username"]."
+
+
+
+
+ ";
+
+ }
+
+ $return .= "
+
+
+ ";
+
+echo $return;
+
+*/
+date_default_timezone_set("America/Sao_Paulo");
+
+function users($id){
+
+ $mysqli = new mysqli("localhost","root", "", "Message_app");
+
+ $query = "SELECT * FROM users_relation WHERE usr1 = ".$id;
+
+ $result1 = mysqli_query($mysqli, $query);
+
+ $return ="
+ ";
+
+ while($row = mysqli_fetch_array($result1))
+ {
+
+ $query = "SELECT * FROM chat WHERE id = ".$row["usr2"];
+
+ $result2 = mysqli_query($mysqli, $query);
+
+ while($row1 = mysqli_fetch_array($result2))
+ {
+ $query = "SELECT * FROM (SELECT * FROM mensagens WHERE sender = '".$row1["id"]."' AND reciever = '".$id."' OR sender = '".$id."' AND reciever = '".$row1["id"]."' ORDER BY msg_id DESC LIMIT 1)Var1 ORDER BY msg_id ASC ";
+ $lastMsg = mysqli_query($mysqli, $query);
+
+ if($row1["grp"] == "no"){
+ $query = "SELECT * FROM mensagens WHERE sender = '".$row["usr2"]."' AND reciever='".$id."' AND seen = '0'";
+ $temp = mysqli_query($mysqli, $query);
+ $count = mysqli_num_rows($temp);
+ if($count == 0){
+ $count = "0";
+ $style = "style='display: none'";
+ } else {
+ $style = "style='display: none'";
+ $count = "0";
+ }
+ } else {
+ $style = "style='display: none'";
+ }
+
+ if($row1["grp"] == "yes"){
+ $group = "group";
+ } else {
+ $group = "";
+ }
+
+ $return .= "
+
+
+
){
+ $return .= $row1["Image"];
+ } else {
+ $return .= "images/default.png";
+ }
+ $return .=")
+
+
".$row1["Name"]."
+
";
+ while($msg = mysqli_fetch_array($lastMsg)){
+
+ if(date_format(date_create($msg["date"]), "d/m/Y") != date_format(date_create(), "d/m/Y") ){
+ $date = date_format(date_create($msg["date"]), "d/m/Y");
+ } else {
+ $date = date_format(date_create($msg["date"]), "H:i");
+ }
+
+ if($msg["sender"] != $id){
+ $content = $msg["message"];
+ } else {
+ $content = "You: " . $msg["message"];
+ }
+ $return .="
+ ".$content."
+ ".$date;
+ }
+
+ $return .=" $count+
+
+
+
+
";
+
+ }
+ }
+ $return .= "
+
+
+ ";
+
+return $return;
+}
\ No newline at end of file
diff --git a/Socket/send_msg.php b/Socket/send_msg.php
new file mode 100644
index 0000000..30a1fc6
--- /dev/null
+++ b/Socket/send_msg.php
@@ -0,0 +1,23 @@
+$id";
+
+}
\ No newline at end of file
diff --git a/Socket/sign.php b/Socket/sign.php
new file mode 100644
index 0000000..0c9c40c
--- /dev/null
+++ b/Socket/sign.php
@@ -0,0 +1,24 @@
+!>!>";
+
+ $sql = "SELECT * FROM chat WHERE Email='$email'";
+ $consulta = mysqli_query($mysqli, $sql);
+
+ if (mysqli_num_rows($consulta) != 0) {
+ $return .= " ";
+ } else {
+ //$senhaS = password_hash($senha, PASSWORD_DEFAULT);
+ $sql = "INSERT INTO chat (`Name`, `Email`, `Password`, `Private_key`, `Public_key`, `Status`, `grp`) VALUES ('$username', '$email', '$pass', '1', '1', 'offline', 'no')";
+ mysqli_query($mysqli, $sql);
+
+ $return .= " ";
+ }
+
+ return $return;
+}
+?>
\ No newline at end of file
diff --git a/chat_server.php b/chat_server.php
new file mode 100644
index 0000000..d9cb0ff
--- /dev/null
+++ b/chat_server.php
@@ -0,0 +1,18 @@
+run();
\ No newline at end of file
diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000..5b0d234
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,10 @@
+{
+ "autoload": {
+ "psr-4": {
+ "chat\\": "Socket"
+ }
+ },
+ "require": {
+ "cboden/ratchet": "^0.4"
+ }
+}
\ No newline at end of file
diff --git a/composer.lock b/composer.lock
new file mode 100644
index 0000000..7028c1f
--- /dev/null
+++ b/composer.lock
@@ -0,0 +1,1328 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "e782f89e6754b8cf3840d3620e4ef514",
+ "packages": [
+ {
+ "name": "cboden/ratchet",
+ "version": "v0.4.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ratchetphp/Ratchet.git",
+ "reference": "5012dc954541b40c5599d286fd40653f5716a38f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ratchetphp/Ratchet/zipball/5012dc954541b40c5599d286fd40653f5716a38f",
+ "reference": "5012dc954541b40c5599d286fd40653f5716a38f",
+ "shasum": ""
+ },
+ "require": {
+ "guzzlehttp/psr7": "^1.7|^2.0",
+ "php": ">=5.4.2",
+ "ratchet/rfc6455": "^0.3.1",
+ "react/event-loop": ">=0.4",
+ "react/socket": "^1.0 || ^0.8 || ^0.7 || ^0.6 || ^0.5",
+ "symfony/http-foundation": "^2.6|^3.0|^4.0|^5.0|^6.0",
+ "symfony/routing": "^2.6|^3.0|^4.0|^5.0|^6.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.8"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Ratchet\\": "src/Ratchet"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "role": "Developer"
+ },
+ {
+ "name": "Matt Bonneau",
+ "role": "Developer"
+ }
+ ],
+ "description": "PHP WebSocket library",
+ "homepage": "http://socketo.me",
+ "keywords": [
+ "Ratchet",
+ "WebSockets",
+ "server",
+ "sockets",
+ "websocket"
+ ],
+ "support": {
+ "chat": "https://gitter.im/reactphp/reactphp",
+ "issues": "https://github.com/ratchetphp/Ratchet/issues",
+ "source": "https://github.com/ratchetphp/Ratchet/tree/v0.4.4"
+ },
+ "time": "2021-12-14T00:20:41+00:00"
+ },
+ {
+ "name": "evenement/evenement",
+ "version": "v3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/igorw/evenement.git",
+ "reference": "531bfb9d15f8aa57454f5f0285b18bec903b8fb7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/igorw/evenement/zipball/531bfb9d15f8aa57454f5f0285b18bec903b8fb7",
+ "reference": "531bfb9d15f8aa57454f5f0285b18bec903b8fb7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Evenement": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Igor Wiedler",
+ "email": "igor@wiedler.ch"
+ }
+ ],
+ "description": "Événement is a very simple event dispatching library for PHP",
+ "keywords": [
+ "event-dispatcher",
+ "event-emitter"
+ ],
+ "support": {
+ "issues": "https://github.com/igorw/evenement/issues",
+ "source": "https://github.com/igorw/evenement/tree/master"
+ },
+ "time": "2017-07-23T21:35:13+00:00"
+ },
+ {
+ "name": "guzzlehttp/psr7",
+ "version": "2.4.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/psr7.git",
+ "reference": "67c26b443f348a51926030c83481b85718457d3d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d",
+ "reference": "67c26b443f348a51926030c83481b85718457d3d",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-factory": "^1.0",
+ "psr/http-message": "^1.0",
+ "ralouphie/getallheaders": "^3.0"
+ },
+ "provide": {
+ "psr/http-factory-implementation": "1.0",
+ "psr/http-message-implementation": "1.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.1",
+ "http-interop/http-factory-tests": "^0.9",
+ "phpunit/phpunit": "^8.5.29 || ^9.5.23"
+ },
+ "suggest": {
+ "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ },
+ "branch-alias": {
+ "dev-master": "2.4-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Psr7\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://sagikazarmark.hu"
+ }
+ ],
+ "description": "PSR-7 message implementation that also provides common utility methods",
+ "keywords": [
+ "http",
+ "message",
+ "psr-7",
+ "request",
+ "response",
+ "stream",
+ "uri",
+ "url"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/psr7/issues",
+ "source": "https://github.com/guzzle/psr7/tree/2.4.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-10-26T14:07:24+00:00"
+ },
+ {
+ "name": "psr/http-factory",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-factory.git",
+ "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+ "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0.0",
+ "psr/http-message": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interfaces for PSR-7 HTTP message factories",
+ "keywords": [
+ "factory",
+ "http",
+ "message",
+ "psr",
+ "psr-17",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-factory/tree/master"
+ },
+ "time": "2019-04-30T12:38:16+00:00"
+ },
+ {
+ "name": "psr/http-message",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-message.git",
+ "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
+ "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP messages",
+ "homepage": "https://github.com/php-fig/http-message",
+ "keywords": [
+ "http",
+ "http-message",
+ "psr",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-message/tree/master"
+ },
+ "time": "2016-08-06T14:39:51+00:00"
+ },
+ {
+ "name": "ralouphie/getallheaders",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ralouphie/getallheaders.git",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.1",
+ "phpunit/phpunit": "^5 || ^6.5"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/getallheaders.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ralph Khattar",
+ "email": "ralph.khattar@gmail.com"
+ }
+ ],
+ "description": "A polyfill for getallheaders.",
+ "support": {
+ "issues": "https://github.com/ralouphie/getallheaders/issues",
+ "source": "https://github.com/ralouphie/getallheaders/tree/develop"
+ },
+ "time": "2019-03-08T08:55:37+00:00"
+ },
+ {
+ "name": "ratchet/rfc6455",
+ "version": "v0.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ratchetphp/RFC6455.git",
+ "reference": "7c964514e93456a52a99a20fcfa0de242a43ccdb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ratchetphp/RFC6455/zipball/7c964514e93456a52a99a20fcfa0de242a43ccdb",
+ "reference": "7c964514e93456a52a99a20fcfa0de242a43ccdb",
+ "shasum": ""
+ },
+ "require": {
+ "guzzlehttp/psr7": "^2 || ^1.7",
+ "php": ">=5.4.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^5.7",
+ "react/socket": "^1.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Ratchet\\RFC6455\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "role": "Developer"
+ },
+ {
+ "name": "Matt Bonneau",
+ "role": "Developer"
+ }
+ ],
+ "description": "RFC6455 WebSocket protocol handler",
+ "homepage": "http://socketo.me",
+ "keywords": [
+ "WebSockets",
+ "rfc6455",
+ "websocket"
+ ],
+ "support": {
+ "chat": "https://gitter.im/reactphp/reactphp",
+ "issues": "https://github.com/ratchetphp/RFC6455/issues",
+ "source": "https://github.com/ratchetphp/RFC6455/tree/v0.3.1"
+ },
+ "time": "2021-12-09T23:20:49+00:00"
+ },
+ {
+ "name": "react/cache",
+ "version": "v1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/cache.git",
+ "reference": "d47c472b64aa5608225f47965a484b75c7817d5b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b",
+ "reference": "d47c472b64aa5608225f47965a484b75c7817d5b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0",
+ "react/promise": "^3.0 || ^2.0 || ^1.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\Cache\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering",
+ "homepage": "https://clue.engineering/"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "reactphp@ceesjankiewiet.nl",
+ "homepage": "https://wyrihaximus.net/"
+ },
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com",
+ "homepage": "https://sorgalla.com/"
+ },
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "homepage": "https://cboden.dev/"
+ }
+ ],
+ "description": "Async, Promise-based cache interface for ReactPHP",
+ "keywords": [
+ "cache",
+ "caching",
+ "promise",
+ "reactphp"
+ ],
+ "support": {
+ "issues": "https://github.com/reactphp/cache/issues",
+ "source": "https://github.com/reactphp/cache/tree/v1.2.0"
+ },
+ "funding": [
+ {
+ "url": "https://opencollective.com/reactphp",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2022-11-30T15:59:55+00:00"
+ },
+ {
+ "name": "react/dns",
+ "version": "v1.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/dns.git",
+ "reference": "a5427e7dfa47713e438016905605819d101f238c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/dns/zipball/a5427e7dfa47713e438016905605819d101f238c",
+ "reference": "a5427e7dfa47713e438016905605819d101f238c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0",
+ "react/cache": "^1.0 || ^0.6 || ^0.5",
+ "react/event-loop": "^1.2",
+ "react/promise": "^3.0 || ^2.7 || ^1.2.1",
+ "react/promise-timer": "^1.9"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3 || ^4.8.35",
+ "react/async": "^4 || ^3 || ^2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\Dns\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering",
+ "homepage": "https://clue.engineering/"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "reactphp@ceesjankiewiet.nl",
+ "homepage": "https://wyrihaximus.net/"
+ },
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com",
+ "homepage": "https://sorgalla.com/"
+ },
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "homepage": "https://cboden.dev/"
+ }
+ ],
+ "description": "Async DNS resolver for ReactPHP",
+ "keywords": [
+ "async",
+ "dns",
+ "dns-resolver",
+ "reactphp"
+ ],
+ "support": {
+ "issues": "https://github.com/reactphp/dns/issues",
+ "source": "https://github.com/reactphp/dns/tree/v1.10.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/WyriHaximus",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/clue",
+ "type": "github"
+ }
+ ],
+ "time": "2022-09-08T12:22:46+00:00"
+ },
+ {
+ "name": "react/event-loop",
+ "version": "v1.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/event-loop.git",
+ "reference": "187fb56f46d424afb6ec4ad089269c72eec2e137"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/event-loop/zipball/187fb56f46d424afb6ec4ad089269c72eec2e137",
+ "reference": "187fb56f46d424afb6ec4ad089269c72eec2e137",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35"
+ },
+ "suggest": {
+ "ext-event": "~1.0 for ExtEventLoop",
+ "ext-pcntl": "For signal handling support when using the StreamSelectLoop",
+ "ext-uv": "* for ExtUvLoop"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\EventLoop\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering",
+ "homepage": "https://clue.engineering/"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "reactphp@ceesjankiewiet.nl",
+ "homepage": "https://wyrihaximus.net/"
+ },
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com",
+ "homepage": "https://sorgalla.com/"
+ },
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "homepage": "https://cboden.dev/"
+ }
+ ],
+ "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.",
+ "keywords": [
+ "asynchronous",
+ "event-loop"
+ ],
+ "support": {
+ "issues": "https://github.com/reactphp/event-loop/issues",
+ "source": "https://github.com/reactphp/event-loop/tree/v1.3.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/WyriHaximus",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/clue",
+ "type": "github"
+ }
+ ],
+ "time": "2022-03-17T11:10:22+00:00"
+ },
+ {
+ "name": "react/promise",
+ "version": "v2.9.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/promise.git",
+ "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/promise/zipball/234f8fd1023c9158e2314fa9d7d0e6a83db42910",
+ "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "React\\Promise\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com",
+ "homepage": "https://sorgalla.com/"
+ },
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering",
+ "homepage": "https://clue.engineering/"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "reactphp@ceesjankiewiet.nl",
+ "homepage": "https://wyrihaximus.net/"
+ },
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "homepage": "https://cboden.dev/"
+ }
+ ],
+ "description": "A lightweight implementation of CommonJS Promises/A for PHP",
+ "keywords": [
+ "promise",
+ "promises"
+ ],
+ "support": {
+ "issues": "https://github.com/reactphp/promise/issues",
+ "source": "https://github.com/reactphp/promise/tree/v2.9.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/WyriHaximus",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/clue",
+ "type": "github"
+ }
+ ],
+ "time": "2022-02-11T10:27:51+00:00"
+ },
+ {
+ "name": "react/promise-timer",
+ "version": "v1.9.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/promise-timer.git",
+ "reference": "aa7a73c74b8d8c0f622f5982ff7b0351bc29e495"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/promise-timer/zipball/aa7a73c74b8d8c0f622f5982ff7b0351bc29e495",
+ "reference": "aa7a73c74b8d8c0f622f5982ff7b0351bc29e495",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3",
+ "react/event-loop": "^1.2",
+ "react/promise": "^3.0 || ^2.7.0 || ^1.2.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "React\\Promise\\Timer\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering",
+ "homepage": "https://clue.engineering/"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "reactphp@ceesjankiewiet.nl",
+ "homepage": "https://wyrihaximus.net/"
+ },
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com",
+ "homepage": "https://sorgalla.com/"
+ },
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "homepage": "https://cboden.dev/"
+ }
+ ],
+ "description": "A trivial implementation of timeouts for Promises, built on top of ReactPHP.",
+ "homepage": "https://github.com/reactphp/promise-timer",
+ "keywords": [
+ "async",
+ "event-loop",
+ "promise",
+ "reactphp",
+ "timeout",
+ "timer"
+ ],
+ "support": {
+ "issues": "https://github.com/reactphp/promise-timer/issues",
+ "source": "https://github.com/reactphp/promise-timer/tree/v1.9.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/WyriHaximus",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/clue",
+ "type": "github"
+ }
+ ],
+ "time": "2022-06-13T13:41:03+00:00"
+ },
+ {
+ "name": "react/socket",
+ "version": "v1.12.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/socket.git",
+ "reference": "81e1b4d7f5450ebd8d2e9a95bb008bb15ca95a7b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/socket/zipball/81e1b4d7f5450ebd8d2e9a95bb008bb15ca95a7b",
+ "reference": "81e1b4d7f5450ebd8d2e9a95bb008bb15ca95a7b",
+ "shasum": ""
+ },
+ "require": {
+ "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
+ "php": ">=5.3.0",
+ "react/dns": "^1.8",
+ "react/event-loop": "^1.2",
+ "react/promise": "^3 || ^2.6 || ^1.2.1",
+ "react/promise-timer": "^1.9",
+ "react/stream": "^1.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35",
+ "react/async": "^4 || ^3 || ^2",
+ "react/promise-stream": "^1.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\Socket\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering",
+ "homepage": "https://clue.engineering/"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "reactphp@ceesjankiewiet.nl",
+ "homepage": "https://wyrihaximus.net/"
+ },
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com",
+ "homepage": "https://sorgalla.com/"
+ },
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "homepage": "https://cboden.dev/"
+ }
+ ],
+ "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP",
+ "keywords": [
+ "Connection",
+ "Socket",
+ "async",
+ "reactphp",
+ "stream"
+ ],
+ "support": {
+ "issues": "https://github.com/reactphp/socket/issues",
+ "source": "https://github.com/reactphp/socket/tree/v1.12.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/WyriHaximus",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/clue",
+ "type": "github"
+ }
+ ],
+ "time": "2022-08-25T12:32:25+00:00"
+ },
+ {
+ "name": "react/stream",
+ "version": "v1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/stream.git",
+ "reference": "7a423506ee1903e89f1e08ec5f0ed430ff784ae9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/stream/zipball/7a423506ee1903e89f1e08ec5f0ed430ff784ae9",
+ "reference": "7a423506ee1903e89f1e08ec5f0ed430ff784ae9",
+ "shasum": ""
+ },
+ "require": {
+ "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
+ "php": ">=5.3.8",
+ "react/event-loop": "^1.2"
+ },
+ "require-dev": {
+ "clue/stream-filter": "~1.2",
+ "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\Stream\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering",
+ "homepage": "https://clue.engineering/"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "reactphp@ceesjankiewiet.nl",
+ "homepage": "https://wyrihaximus.net/"
+ },
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com",
+ "homepage": "https://sorgalla.com/"
+ },
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "homepage": "https://cboden.dev/"
+ }
+ ],
+ "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP",
+ "keywords": [
+ "event-driven",
+ "io",
+ "non-blocking",
+ "pipe",
+ "reactphp",
+ "readable",
+ "stream",
+ "writable"
+ ],
+ "support": {
+ "issues": "https://github.com/reactphp/stream/issues",
+ "source": "https://github.com/reactphp/stream/tree/v1.2.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/WyriHaximus",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/clue",
+ "type": "github"
+ }
+ ],
+ "time": "2021-07-11T12:37:55+00:00"
+ },
+ {
+ "name": "symfony/deprecation-contracts",
+ "version": "v3.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/deprecation-contracts.git",
+ "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3",
+ "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.3-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "files": [
+ "function.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "A generic function and convention to trigger deprecation notices",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-11-25T10:21:52+00:00"
+ },
+ {
+ "name": "symfony/http-foundation",
+ "version": "v6.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-foundation.git",
+ "reference": "ddf4dd35de1623e7c02013523e6c2137b67b636f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ddf4dd35de1623e7c02013523e6c2137b67b636f",
+ "reference": "ddf4dd35de1623e7c02013523e6c2137b67b636f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-mbstring": "~1.1"
+ },
+ "conflict": {
+ "symfony/cache": "<6.2"
+ },
+ "require-dev": {
+ "predis/predis": "~1.0",
+ "symfony/cache": "^5.4|^6.0",
+ "symfony/dependency-injection": "^5.4|^6.0",
+ "symfony/expression-language": "^5.4|^6.0",
+ "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4",
+ "symfony/mime": "^5.4|^6.0",
+ "symfony/rate-limiter": "^5.2|^6.0"
+ },
+ "suggest": {
+ "symfony/mime": "To use the file extension guesser"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\HttpFoundation\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Defines an object-oriented layer for the HTTP specification",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/http-foundation/tree/v6.2.2"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-12-14T16:11:27+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
+ "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-mbstring": "*"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.27-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for the Mbstring extension",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-11-03T14:55:06+00:00"
+ },
+ {
+ "name": "symfony/routing",
+ "version": "v6.2.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/routing.git",
+ "reference": "35fec764f3e2c8c08fb340d275c84bc78ca7e0c9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/35fec764f3e2c8c08fb340d275c84bc78ca7e0c9",
+ "reference": "35fec764f3e2c8c08fb340d275c84bc78ca7e0c9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "conflict": {
+ "doctrine/annotations": "<1.12",
+ "symfony/config": "<6.2",
+ "symfony/dependency-injection": "<5.4",
+ "symfony/yaml": "<5.4"
+ },
+ "require-dev": {
+ "doctrine/annotations": "^1.12|^2",
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^6.2",
+ "symfony/dependency-injection": "^5.4|^6.0",
+ "symfony/expression-language": "^5.4|^6.0",
+ "symfony/http-foundation": "^5.4|^6.0",
+ "symfony/yaml": "^5.4|^6.0"
+ },
+ "suggest": {
+ "symfony/config": "For using the all-in-one router or any loader",
+ "symfony/expression-language": "For using expression matching",
+ "symfony/http-foundation": "For using a Symfony Request object",
+ "symfony/yaml": "For using the YAML loader"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Routing\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Maps an HTTP request to a set of configuration variables",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "router",
+ "routing",
+ "uri",
+ "url"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/routing/tree/v6.2.3"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-12-20T16:41:15+00:00"
+ }
+ ],
+ "packages-dev": [],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": [],
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": [],
+ "platform-dev": [],
+ "plugin-api-version": "2.3.0"
+}
diff --git a/css/font.css b/css/font.css
new file mode 100644
index 0000000..3bd13d2
--- /dev/null
+++ b/css/font.css
@@ -0,0 +1,40 @@
+/* cyrillic-ext */
+@font-face {
+ font-family: 'Montserrat';
+ font-style: normal;
+ font-weight: 400;
+ src: url(http://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw0aXpsog.woff2) format('woff2');
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
+}
+/* cyrillic */
+@font-face {
+ font-family: 'Montserrat';
+ font-style: normal;
+ font-weight: 400;
+ src: url(http://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw9aXpsog.woff2) format('woff2');
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Montserrat';
+ font-style: normal;
+ font-weight: 400;
+ src: url(http://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw2aXpsog.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Montserrat';
+ font-style: normal;
+ font-weight: 400;
+ src: url(http://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw3aXpsog.woff2) format('woff2');
+ unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Montserrat';
+ font-style: normal;
+ font-weight: 400;
+ src: url(http://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw5aXo.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
diff --git a/css/home.css b/css/home.css
new file mode 100644
index 0000000..4864f6b
--- /dev/null
+++ b/css/home.css
@@ -0,0 +1,1455 @@
+@charset "UTF-8";
+@import url("https://fonts.googleapis.com/css?family=Manrope:300,400,500,600,700&display=swap&subset=latin-ext");
+:root {
+ --body-bg-color: #e5ecef;
+ --theme-bg-color: #fff;
+ --settings-icon-hover: #9fa7ac;
+ --developer-color: #f9fafb;
+ --input-bg: #e0e0e9;
+ --input-chat-color: #a2a2a2;
+ --border-color: #d9dee0c9;
+ --body-font: "Manrope", sans-serif;
+ --body-color: #273346;
+ --settings-icon-color: #c1c7cd;
+ --msg-message: #969eaa;
+ --chat-text-bg: #dbdce0;
+ --theme-color: #0086ff;
+ --msg-date: #aeafb1;
+ --button-bg-color: #f0f7ff;
+ --button-color: var(--theme-color);
+ --detail-font-color: #919ca2;
+ --msg-hover-bg: rgba(238, 242, 244, 0.4);
+ --active-conversation-bg: linear-gradient(
+ to right,
+ rgba(201, 204, 206, 0.568) 0%,
+ rgba(238, 242, 244, 0) 100%
+ );
+ --overlay-bg: linear-gradient(
+ to bottom,
+ rgba(255, 255, 255, 0) 0%,
+ rgba(255, 255, 255, 1) 65%,
+ rgba(255, 255, 255, 1) 100%
+ );
+ --chat-header-bg: linear-gradient(
+ to bottom,
+ rgba(255, 255, 255, 1) 0%,
+ rgba(255, 255, 255, 1) 78%,
+ rgba(255, 255, 255, 0) 100%
+ );
+}
+
+[data-theme=purple] {
+ --theme-color: #9f7aea;
+ --button-color: #9f7aea;
+ --button-bg-color: rgba(159, 122, 234, 0.12);
+}
+
+[data-theme=green] {
+ --theme-color: #38b2ac;
+ --button-color: #38b2ac;
+ --button-bg-color: rgba(56, 178, 171, 0.15);
+}
+
+[data-theme=orange] {
+ --theme-color: #ed8936;
+ --button-color: #ed8936;
+ --button-bg-color: rgba(237, 137, 54, 0.12);
+}
+
+[data-theme=black] {
+ --theme-color: black;
+ --button-color: black;
+ --button-bg-color: rgba(237, 137, 54, 0.12);
+}
+
+
+body {
+ overflow: hidden
+}
+
+
+.container {
+ display: block;
+ position: relative;
+ padding-left: 35px;
+ margin-bottom: 12px;
+ cursor: pointer;
+ font-size: 22px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.container label{
+ color:var(--body-color)
+}
+
+.container input {
+ position: absolute;
+ opacity: 0;
+ cursor: pointer;
+ height: 0;
+ width: 0;
+ border-radius: 100px;
+
+}
+
+.checkmark {
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 25px;
+ width: 25px;
+ background-color: #eee;
+}
+
+.container:hover input ~ .checkmark {
+ background-color: #ccc;
+ border-radius: 100px;
+
+}
+.container input ~ .checkmark{
+ border-radius: 100px;
+
+}
+.container input:checked ~ .checkmark {
+ background-color: var(--theme-color);
+ border-radius: 100px;
+}
+
+.checkmark:after {
+ content: "";
+ position: absolute;
+ display: none;
+ border-radius: 100px;
+
+}
+
+.container input:checked ~ .checkmark:after {
+ display: block;
+ border-radius: 100px;
+ margin: 0
+}
+
+.container input:checked{
+ margin: 0;
+}
+
+.container .checkmark:after {
+ left: 9px;
+ top: 5px;
+ width: 5px;
+ height: 10px;
+ border: solid white;
+ border-width: 0 3px 3px 0;
+ -webkit-transform: rotate(45deg);
+ -ms-transform: rotate(45deg);
+ transform: rotate(45deg);
+ border-radius: 100px;
+
+}
+
+.dark-mode {
+ --body-bg-color: #1d1d1d;
+ --theme-bg-color: #27292d;
+ --border-color: #323336;
+ --body-color: #d1d1d2;
+ --active-conversation-bg: linear-gradient(
+ to right,
+ rgba(47, 50, 56, 0.54),
+ rgba(238, 242, 244, 0) 100%
+ );
+ --msg-hover-bg: rgba(47, 50, 56, 0.54);
+ --chat-text-bg: #383b40;
+ --chat-text-color: #b5b7ba;
+ --msg-date: #626466;
+ --msg-message: var(--msg-date);
+ --overlay-bg: linear-gradient(
+ to bottom,
+ rgba(0, 0, 0, 0) 0%,
+ #27292d 65%,
+ #27292d 100%
+ );
+ --input-bg: #2f3236;
+ --chat-header-bg: linear-gradient(
+ to bottom,
+ #27292d 0%,
+ #27292d 78%,
+ rgba(255, 255, 255, 0) 100%
+ );
+ --settings-icon-color: #7c7e80;
+ --developer-color: var(--border-color);
+ --button-bg-color: #393b40;
+ --button-color: var(--body-color);
+ --input-chat-color: #6f7073;
+ --detail-font-color: var(--input-chat-color);
+}
+
+.mob{
+ background-color: var(--body-bg-color);
+ color: var(--detail-font-color)
+}
+.mobile{
+ display: none
+}
+
+.blue {
+ background-color: #0086ff;
+}
+
+.purple {
+ background-color: #9f7aea;
+}
+
+.green {
+ background-color: #38b2ac;
+}
+
+.orange {
+ background-color: #ed8936;
+}
+
+.black {
+ background-color: black;
+}
+
+* {
+ outline: none;
+ box-sizing: border-box;
+ /*color: var(--detail-font-color)*/
+ color: unset;
+}
+
+.new-msgs{
+ width: 20px;
+ height: 20px;
+ font-size: 15px;
+ text-align: center;
+ padding: 5px;
+ color: var(--theme-color);
+}
+ .logo{
+ color: var(--theme-color)
+ }
+
+
+img {
+ max-width: 100%;
+}
+
+body {
+ background-color: var(--body-bg-color);
+ font-family: var(--body-font);
+ color: var(--body-color);
+ height: 100%
+}
+
+html {
+ box-sizing: border-box;
+ -webkit-font-smoothing: antialiased;
+}
+
+.app {
+ display: flex;
+ flex-direction: column;
+ background-color: var(--theme-bg-color);
+ max-width: 1600px;
+ height: 100vh;
+ margin: 0 auto;
+ overflow: hidden;
+}
+
+.header {
+ min-height: 10%;
+ width: 100%;
+ border-bottom: 1px solid var(--border-color);
+ display: flex;
+ align-items: center;
+ padding: 0 20px;
+}
+
+.wrapper {
+ width: 100%;
+ display: flex;
+ flex-grow: 1;
+ overflow: hidden;
+}
+
+.conversation-area,
+.detail-area {
+ width: 340px;
+ flex-shrink: 0;
+}
+
+.conversation-area2,
+.detail-area {
+ width: 340px;
+ flex-shrink: 0;
+}
+
+.conversation-area2,
+.detail-area2 {
+ width: 340px;
+ flex-shrink: 0;
+}
+
+.detail-area {
+ border-left: 1px solid var(--border-color);
+ margin-left: auto;
+ padding: 30px 30px 0 30px;
+ display: flex;
+ flex-direction: column;
+ overflow: auto;
+}
+
+.detail-area2 {
+ border-left: 1px solid var(--border-color);
+ margin-left: auto;
+ padding: 30px 30px 0 30px;
+ display: flex;
+ flex-direction: column;
+ overflow: auto;
+}
+.chat-area {
+ flex-grow: 1;
+}
+
+.search-bar {
+ width: 50%;
+ height: 80px;
+ z-index: 3;
+ position: relative;
+ margin-left: 280px;
+}
+.search-bar input {
+ height: 100%;
+ width: 100%;
+ display: block;
+ background-color: transparent;
+ border: none;
+ color: var(--body-color);
+ padding: 0 54px;
+ background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 56.966 56.966' fill='%23c1c7cd'%3e%3cpath d='M55.146 51.887L41.588 37.786A22.926 22.926 0 0046.984 23c0-12.682-10.318-23-23-23s-23 10.318-23 23 10.318 23 23 23c4.761 0 9.298-1.436 13.177-4.162l13.661 14.208c.571.593 1.339.92 2.162.92.779 0 1.518-.297 2.079-.837a3.004 3.004 0 00.083-4.242zM23.984 6c9.374 0 17 7.626 17 17s-7.626 17-17 17-17-7.626-17-17 7.626-17 17-17z'/%3e%3c/svg%3e");
+ background-repeat: no-repeat;
+ background-size: 16px;
+ background-position: 25px 48%;
+ font-family: var(--body-font);
+ font-weight: 600;
+ font-size: 15px;
+}
+.search-bar input::placeholder {
+ color: var(--input-chat-color);
+}
+
+.date-span{
+ color: var(--body-color);
+ position: relative;
+ left: 45%;
+ transform: translateX(-50%);
+ text-align: center
+}
+
+.logo {
+ color: var(--theme-color);
+ width: 38px;
+ flex-shrink: 0;
+}
+.logo svg {
+ color: var(--theme-color);
+ width: 100%;
+}
+
+.user-settings {
+ display: flex;
+ align-items: center;
+ cursor: pointer;
+ margin-left: auto;
+ flex-shrink: 0;
+}
+.user-settings > * + * {
+ margin-left: 14px;
+}
+
+.dark-light {
+ width: 22px;
+ height: 22px;
+ color: var(--settings-icon-color);
+ flex-shrink: 0;
+}
+.dark-light svg {
+ width: 100%;
+ fill: transparent;
+ transition: 0.5s;
+}
+
+.user-profile {
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+}
+
+.settings {
+ color: var(--settings-icon-color);
+ width: 22px;
+ height: 22px;
+ flex-shrink: 0;
+}
+
+.conversation-area {
+ border-right: 1px solid var(--border-color);
+ overflow-y: auto;
+ overflow-x: hidden;
+ display: flex;
+ flex-direction: column;
+ position: relative;
+}
+
+.conversation-area2 {
+ border-right: 1px solid var(--border-color);
+ overflow-y: auto;
+ overflow-x: hidden;
+ display: flex;
+ flex-direction: column;
+ position: relative;
+}
+
+.msg-profile {
+ width: 44px;
+ height: 44px;
+ border-radius: 50%;
+ object-fit: cover;
+ margin-right: 15px;
+}
+.msg-profile.group {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background-color: var(--border-color);
+}
+.msg-profile.group svg {
+ width: 60%;
+}
+
+.msg {
+ display: flex;
+ align-items: center;
+ padding: 20px;
+ cursor: pointer;
+ transition: 0.2s;
+ position: relative;
+}
+.msg:hover {
+ background-color: var(--msg-hover-bg);
+}
+.msg.active {
+ background: var(--active-conversation-bg);
+ border-left: 5px solid var(--theme-color);
+}
+.msg.online:before {
+ content: "";
+ position: absolute;
+ background-color: #23be7e;
+ width: 9px;
+ height: 9px;
+ border-radius: 50%;
+ border: 2px solid var(--theme-bg-color);
+ left: 50px;
+ bottom: 19px;
+}
+
+.msg-username {
+ color: var(--body-color);
+ margin-bottom: 4px;
+ font-weight: 600;
+ font-size: 15px;
+}
+
+.msg-detail {
+ overflow: hidden;
+}
+
+.msg-content {
+ font-weight: 500;
+ font-size: 13px;
+ display: flex;
+}
+
+.msg-message {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ color: var(--msg-message);
+}
+
+.msg-date {
+ font-size: 14px;
+ color: var(--msg-date);
+ margin-left: 3px;
+}
+.msg-date:before {
+ content: "•";
+ margin-right: 2px;
+}
+
+.add {
+ position: sticky;
+ bottom: 25px;
+ background-color: var(--theme-color);
+ width: 60px;
+ height: 60px;
+ border: 0;
+ border-radius: 50%;
+ background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-plus'%3e%3cpath d='M12 5v14M5 12h14'/%3e%3c/svg%3e");
+ background-repeat: no-repeat;
+ background-position: 50%;
+ background-size: 28px;
+ box-shadow: 0 0 16px var(--theme-color);
+ margin: auto auto -55px;
+ flex-shrink: 0;
+ z-index: 1;
+ cursor: pointer;
+}
+
+.overlay {
+ position: sticky;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ flex-shrink: 0;
+ background: var(--overlay-bg);
+ height: 80px;
+}
+
+.chat-area {
+ display: flex;
+ flex-direction: column;
+ overflow: auto;
+}
+.chat-area-header {
+ display: flex;
+ position: sticky;
+ top: 0;
+ left: 0;
+ z-index: 2;
+ width: 100%;
+ align-items: center;
+ justify-content: space-between;
+ padding: 20px;
+ background: var(--chat-header-bg);
+}
+.chat-area-profile {
+ width: 32px;
+ border-radius: 50%;
+ object-fit: cover;
+}
+.chat-area-title {
+ font-size: 18px;
+ font-weight: 600;
+}
+.chat-area-main {
+ flex-grow: 1;
+ overflow-y: scroll;
+}
+
+.chat-msg-img {
+ height: 40px;
+ width: 40px;
+ border-radius: 50%;
+ object-fit: cover;
+}
+
+.chat-msg-profile {
+ flex-shrink: 0;
+ margin-top: auto;
+ margin-bottom: -20px;
+ position: relative;
+}
+
+.chat-msg-date {
+ position: absolute;
+ left: calc(100% + 12px);
+ bottom: 0;
+ font-size: 12px;
+ font-weight: 600;
+ color: var(--msg-date);
+ white-space: nowrap;
+}
+
+.chat-msg {
+ display: flex;
+ padding: 0 20px 45px;
+}
+.chat-msg-content {
+ margin-left: 12px;
+ max-width: 70%;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+}
+.chat-msg-text {
+ background-color: var(--chat-text-bg);
+ padding: 15px;
+ border-radius: 20px 20px 20px 0;
+ line-height: 1.5;
+ font-size: 14px;
+ font-weight: 500;
+}
+.chat-msg-text + .chat-msg-text {
+ margin-top: 10px;
+}
+
+.owner {
+ flex-direction: row-reverse;
+}
+.owner .chat-msg-content {
+ margin-left: 0;
+ margin-right: 12px;
+ align-items: flex-end;
+}
+.owner .chat-msg-text {
+ background-color: var(--theme-color);
+ color: #fff;
+ border-radius: 20px 20px 0 20px;
+}
+.owner .chat-msg-date {
+ left: auto;
+ right: calc(100% + 12px);
+}
+
+.chat-msg-text img {
+ max-width: 300px;
+ width: 100%;
+}
+
+.chat-area-footer {
+ display: flex;
+ border-top: 1px solid var(--border-color);
+ width: 100%;
+ padding: 10px 20px;
+ align-items: center;
+ background-color: var(--theme-bg-color);
+ position: sticky;
+ bottom: 0;
+ left: 0;
+}
+
+.chat-area-footer svg {
+ color: var(--settings-icon-color);
+ width: 20px;
+ flex-shrink: 0;
+ cursor: pointer;
+}
+.chat-area-footer svg:hover {
+ color: var(--settings-icon-hover);
+}
+.chat-area-footer svg + svg {
+ margin-left: 12px;
+}
+
+.chat-area-footer textarea {
+ border: none;
+ color: var(--body-color);
+ background-color: var(--input-bg);
+ padding: 12px;
+ border-radius: 6px;
+ font-size: 15px;
+ margin: 0 12px;
+ width: 100%;
+}
+.chat-area-footer input::placeholder {
+ color: var(--input-chat-color);
+}
+
+.detail-area-header {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+.detail-area-header .msg-profile {
+ margin-right: 0;
+ width: 60px;
+ height: 60px;
+ margin-bottom: 15px;
+}
+
+.detail-title {
+ font-size: 18px;
+ font-weight: 600;
+ margin-bottom: 10px;
+ color: var(--body-color);
+}
+
+.detail-subtitle {
+ font-size: 12px;
+ font-weight: 600;
+ color: var(--msg-date);
+}
+
+.detail-button {
+ border: 0;
+ background-color: var(--button-bg-color);
+ padding: 10px 14px;
+ border-radius: 5px;
+ color: var(--button-color);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 14px;
+ flex-grow: 1;
+ font-weight: 500;
+}
+.detail-button svg {
+ width: 18px;
+ margin-right: 10px;
+}
+.detail-button:last-child {
+ margin-left: 8px;
+}
+
+.detail-buttons {
+ margin-top: 20px;
+ display: flex;
+ width: 100%;
+}
+
+.detail-area input {
+ background-color: transparent;
+ border: none;
+ width: 100%;
+ color: var(--body-color);
+ background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 56.966 56.966' fill='%23c1c7cd'%3e%3cpath d='M55.146 51.887L41.588 37.786A22.926 22.926 0 0046.984 23c0-12.682-10.318-23-23-23s-23 10.318-23 23 10.318 23 23 23c4.761 0 9.298-1.436 13.177-4.162l13.661 14.208c.571.593 1.339.92 2.162.92.779 0 1.518-.297 2.079-.837a3.004 3.004 0 00.083-4.242zM23.984 6c9.374 0 17 7.626 17 17s-7.626 17-17 17-17-7.626-17-17 7.626-17 17-17z'/%3e%3c/svg%3e");
+ background-repeat: no-repeat;
+ background-size: 16px;
+ background-position: 100%;
+ font-family: var(--body-font);
+ font-weight: 600;
+ font-size: 14px;
+ border-bottom: 1px solid var(--border-color);
+ padding: 14px 0;
+}
+
+.detail-area2 input {
+ background-color: transparent;
+ border: none;
+ width: 100%;
+ color: var(--body-color);
+ background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 56.966 56.966' fill='%23c1c7cd'%3e%3cpath d='M55.146 51.887L41.588 37.786A22.926 22.926 0 0046.984 23c0-12.682-10.318-23-23-23s-23 10.318-23 23 10.318 23 23 23c4.761 0 9.298-1.436 13.177-4.162l13.661 14.208c.571.593 1.339.92 2.162.92.779 0 1.518-.297 2.079-.837a3.004 3.004 0 00.083-4.242zM23.984 6c9.374 0 17 7.626 17 17s-7.626 17-17 17-17-7.626-17-17 7.626-17 17-17z'/%3e%3c/svg%3e");
+ background-repeat: no-repeat;
+ background-size: 16px;
+ background-position: 100%;
+ font-family: var(--body-font);
+ font-weight: 600;
+ font-size: 14px;
+ border-bottom: 1px solid var(--border-color);
+ padding: 14px 0;
+}
+
+.detail-area input::placeholder {
+ color: var(--detail-font-color);
+}
+
+.detail-area2 input::placeholder {
+ color: var(--detail-font-color);
+}
+
+
+.detail-changes {
+ margin-top: 40px;
+}
+
+.detail-change {
+ color: var(--detail-font-color);
+ font-family: var(--body-font);
+ font-weight: 600;
+ font-size: 14px;
+ border-bottom: 1px solid var(--border-color);
+ padding: 14px 0;
+ display: flex;
+}
+.detail-change svg {
+ width: 16px;
+ margin-left: auto;
+}
+
+.colors {
+ display: flex;
+ margin-left: auto;
+}
+
+.color {
+ width: 16px;
+ height: 16px;
+ border-radius: 50%;
+ cursor: pointer;
+}
+.color.selected {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke='%23fff' stroke-width='3' fill='none' stroke-linecap='round' stroke-linejoin='round' class='css-i6dzq1' viewBox='0 0 24 24'%3E%3Cpath d='M20 6L9 17l-5-5'/%3E%3C/svg%3E");
+ background-size: 10px;
+ background-position: center;
+ background-repeat: no-repeat;
+}
+.color:not(:last-child) {
+ margin-right: 4px;
+}
+
+.detail-photo-title {
+ display: flex;
+ align-items: center;
+}
+.detail-photo-title svg {
+ width: 16px;
+}
+
+.detail-photos {
+ margin-top: 30px;
+ text-align: center;
+}
+
+.detail-photo-title {
+ color: var(--detail-font-color);
+ font-weight: 600;
+ font-size: 14px;
+ margin-bottom: 20px;
+}
+.detail-photo-title svg {
+ margin-right: 8px;
+}
+
+.detail-photo-grid {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ grid-column-gap: 6px;
+ grid-row-gap: 6px;
+ grid-template-rows: repeat(3, 60px);
+}
+.detail-photo-grid img {
+ height: 100%;
+ width: 100%;
+ object-fit: cover;
+ border-radius: 8px;
+ object-position: center;
+}
+
+.view-more {
+ color: var(--theme-color);
+ font-weight: 600;
+ font-size: 15px;
+ margin: 25px 0;
+}
+
+.follow-me {
+ text-decoration: none;
+ font-size: 14px;
+ width: calc(100% + 60px);
+ margin-left: -30px;
+ display: flex;
+ align-items: center;
+ margin-top: auto;
+ overflow: hidden;
+ color: #9c9cab;
+ padding: 0 20px;
+ height: 52px;
+ flex-shrink: 0;
+ position: relative;
+ justify-content: center;
+}
+.follow-me svg {
+ width: 16px;
+ height: 16px;
+ margin-right: 8px;
+}
+
+.follow-text {
+ display: flex;
+ align-items: center;
+ transition: 0.3s;
+}
+
+.follow-me:hover .follow-text {
+ transform: translateY(100%);
+}
+.follow-me:hover .developer {
+ top: 0;
+}
+
+.developer {
+ position: absolute;
+ color: var(--detail-font-color);
+ font-weight: 600;
+ left: 0;
+ top: -100%;
+ display: flex;
+ transition: 0.3s;
+ padding: 0 20px;
+ align-items: center;
+ justify-content: center;
+ background-color: var(--developer-color);
+ width: 100%;
+ height: 100%;
+}
+
+.developer img {
+ border-radius: 50%;
+ width: 26px;
+ height: 26px;
+ object-fit: cover;
+ margin-right: 10px;
+}
+
+.dark-mode .search-bar input,
+.dark-mode .detail-area .detail-area2 input {
+ background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 56.966 56.966' fill='%236f7073'%3e%3cpath d='M55.146 51.887L41.588 37.786A22.926 22.926 0 0046.984 23c0-12.682-10.318-23-23-23s-23 10.318-23 23 10.318 23 23 23c4.761 0 9.298-1.436 13.177-4.162l13.661 14.208c.571.593 1.339.92 2.162.92.779 0 1.518-.297 2.079-.837a3.004 3.004 0 00.083-4.242zM23.984 6c9.374 0 17 7.626 17 17s-7.626 17-17 17-17-7.626-17-17 7.626-17 17-17z'/%3e%3c/svg%3e");
+}
+.dark-mode .dark-light svg {
+ fill: #ffce45;
+ stroke: #ffce45;
+}
+.dark-mode .chat-area-group span {
+ color: #d1d1d2;
+}
+
+.chat-area-group {
+ flex-shrink: 0;
+ display: flex;
+}
+.chat-area-group * {
+ border: 2px solid var(--theme-bg-color);
+}
+.chat-area-group * + * {
+ margin-left: -5px;
+}
+.chat-area-group span {
+ width: 32px;
+ height: 32px;
+ background-color: var(--button-bg-color);
+ color: var(--theme-color);
+ border-radius: 50%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ font-size: 14px;
+ font-weight: 500;
+}
+
+textarea{
+ width: 100%;
+ resize: none;
+ height: 50px;
+ outline: none;
+ padding: 15px;
+ font-size: 16px;
+ margin-top: 20px;
+ border-radius: 5px;
+ max-height: 165px;
+ caret-color: #4671EA;
+ border: 1px solid #bfbfbf;
+}
+
+.id{
+ width: 100%;
+ text-align: center;
+ color: var(--body-color);
+}
+
+
+.form{
+ position:absolute;
+ left:25%;
+ right:25%;
+ width: 50%;
+ height:min-content;
+ top:5%;
+ bottom:5%;
+ padding: 20px;
+ font-size: 20px;
+ box-shadow: 0px 0px 3px #000;
+ border:0px;
+ border-radius: 10px;
+ background-color: var(--body-bg-color);
+}
+
+.box{
+ position: relative;
+ overflow: hidden;
+ height: 50px;
+ margin-bottom: 20px;
+ border-radius:5px;
+ border: 1px solid gray;
+ background-color:var(--theme-color);
+ box-shadow:5px 5px 15px #343a40;
+}
+
+.box > input{
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 60%;
+ padding: 13px;
+ transform: translateX(-100%);
+ border-radius:5px
+}
+
+.box label{
+ display: inline-block;
+ width: 100%;
+ padding: 13px;
+ cursor: pointer;
+ color: var(--body-color);
+ border-radius:5px
+}
+
+.box.ativo input,input:focus{ transform: translateX(0); }
+
+.box.ativo label, input:focus ~ label{transform: translateX(60%);}
+
+ .per{perspective: 800px; }
+
+a.button:active{
+ transform: rotateX(0deg);
+ border-radius:5px
+}
+a.button{
+ position: relative;
+ display: block;
+ padding: 13px;
+ margin-bottom: 20px;
+ transform: rotateX(15deg);
+ -webkit-transform: rotateX(15deg);
+ transform-style: preserve-3d;
+ text-align: center;
+ cursor: pointer;
+ background-color: #EF4D02;
+ border-radius:5px
+}
+
+.per a{
+ color: var(--body-color);
+}
+
+a.button:after{
+ position: absolute;
+ left: 0;
+ top: 100%;
+ width: 100%;
+ color:var(--body-color);
+ height: 40%;
+ content: '';
+ transition: all 0.3s;
+ transform: rotateX(-90deg);
+ transform-origin: 0% 0%;
+ border-radius:5px
+}
+
+
+
+
+@media (max-width: 1120px) {
+
+ .chat-area-main{
+ height: 100%;
+ }
+
+ .chat-area-header{
+ display:none
+ }
+
+
+ .detail-area {
+ display: none;
+ }
+
+ .search-bar {
+ margin-left: 0;
+ flex-grow: 1;
+ max-width: 70%;
+ position: relative;
+ left: 50%;
+ transform: translateX(-58%);
+ }
+
+ .search-bar input{
+ background-image: url("");
+ }
+ .dark-light{
+ margin: 10px;
+ }
+ .settings{
+ display:block
+ }
+
+}
+@media (max-width: 780px) {
+
+ .chat-area{
+ width: 100%;
+ position:absolute;
+ bottom: 0;
+ height: 90%;
+ padding-top: 10%;
+ }
+
+ .chat-area-main{
+ height: 100%;
+ }
+
+
+ .chat-area-header{
+ display:none
+ }
+
+ .conversation-area {
+ display: none;
+ }
+
+ .search-bar {
+ margin-left: 0;
+ /*flex-grow: 1;*/
+ width: 100%;
+ }
+
+ .search-bar input {
+ width: 150%;
+ }
+
+ .dark-light{
+ position: relative;
+ top: 50%;
+ transform: translateY(-20%);
+ margin-right: 20px;
+ }
+
+ .pc{
+ display: none;
+ }
+
+ .mobile{
+ display: block
+ }
+
+ .settings{
+ width: 20%;
+ height: 100%;
+ margin-right: 20px;
+ }
+
+ .user-profile{
+ margin-right: 9px;
+ }
+
+ .id{
+ position: absolute;
+ left:35%;
+ transform: translateX(-50%);
+ width: max-content;
+ }
+
+}
+
+
+
+
+
+
+*{
+ -ms-overflow-style: none;
+ scrollbar-width: none;
+}
+
+*::-webkit-scrollbar {
+ display:none;
+}
+
+
+
+#noteWrap {
+ position: fixed;
+ bottom: 0;
+ right: 5px;
+ background: var(--theme-color);
+ color: var(--chat-text-bg);
+ width: 16rem;
+ height: fit-content;
+ padding: 10px;
+ font-weight: 600;
+ border-radius: 10px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ box-shadow: 3px 3px 8px var(--button-bg-color);
+}
+#noteWrap:after {
+ content: "";
+ width: 0;
+ height: 0;
+ border-top: 15px solid transparent;
+ border-bottom: 15px solid transparent;
+ border-right: 15px solid #eaeaea;
+ position: absolute;
+ display: none
+}
+#noteWrap p {
+ font-size: 1.2rem;
+ text-align: center;
+}
+
+.chat-msg-text {
+ color: var(--chat-text-color);
+}
+
+
+#loader {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+}
+
+#loader > h1 {
+ position: absolute;
+ font-family: "Open Sans";
+ font-weight: 600;
+ font-size: 12px;
+ text-transform: uppercase;
+ left: 50%;
+ top: 58%;
+ margin-left: -20px;
+ color: var(--body-color)
+}
+
+.loader {
+ position: absolute;
+ top: 50%;
+ margin-left: -50px;
+ left: 50%;
+ animation: speeder 0.4s linear infinite;
+}
+.loader > span {
+ height: 5px;
+ width: 35px;
+ background: var(--theme-color);
+ position: absolute;
+ top: -19px;
+ left: 60px;
+ border-radius: 2px 10px 1px 0;
+}
+
+.base span {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-top: 6px solid transparent;
+ border-right: 100px solid var(--theme-color);
+ border-bottom: 6px solid transparent;
+}
+.base span:before {
+ content: "";
+ height: 22px;
+ width: 22px;
+ border-radius: 50%;
+ background: var(--theme-color);
+ position: absolute;
+ right: -110px;
+ top: -16px;
+}
+.base span:after {
+ content: "";
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-top: 0 solid transparent;
+ border-right: 55px solid var(--theme-color);
+ border-bottom: 16px solid transparent;
+ top: -16px;
+ right: -98px;
+}
+
+.face {
+ position: absolute;
+ height: 12px;
+ width: 20px;
+ background: var(--theme-color);
+ border-radius: 20px 20px 0 0;
+ transform: rotate(-40deg);
+ right: -125px;
+ top: -15px;
+}
+.face:after {
+ content: "";
+ height: 12px;
+ width: 12px;
+ background: var(--theme-color);
+ right: 4px;
+ top: 7px;
+ position: absolute;
+ transform: rotate(40deg);
+ transform-origin: 50% 50%;
+ border-radius: 0 0 0 2px;
+}
+
+.loader > span > span:nth-child(1),
+.loader > span > span:nth-child(2),
+.loader > span > span:nth-child(3),
+.loader > span > span:nth-child(4) {
+ width: 30px;
+ height: 1px;
+ background: var(--theme-color);
+ position: absolute;
+ animation: fazer1 0.2s linear infinite;
+}
+
+.loader > span > span:nth-child(2) {
+ top: 3px;
+ animation: fazer2 0.4s linear infinite;
+}
+
+.loader > span > span:nth-child(3) {
+ top: 1px;
+ animation: fazer3 0.4s linear infinite;
+ animation-delay: -1s;
+}
+
+.loader > span > span:nth-child(4) {
+ top: 4px;
+ animation: fazer4 1s linear infinite;
+ animation-delay: -1s;
+}
+
+@keyframes fazer1 {
+ 0% {
+ left: 0;
+ }
+ 100% {
+ left: -80px;
+ opacity: 0;
+ }
+}
+@keyframes fazer2 {
+ 0% {
+ left: 0;
+ }
+ 100% {
+ left: -100px;
+ opacity: 0;
+ }
+}
+@keyframes fazer3 {
+ 0% {
+ left: 0;
+ }
+ 100% {
+ left: -50px;
+ opacity: 0;
+ }
+}
+@keyframes fazer4 {
+ 0% {
+ left: 0;
+ }
+ 100% {
+ left: -150px;
+ opacity: 0;
+ }
+}
+@keyframes speeder {
+ 0% {
+ transform: translate(2px, 1px) rotate(0deg);
+ }
+ 10% {
+ transform: translate(-1px, -3px) rotate(-1deg);
+ }
+ 20% {
+ transform: translate(-2px, 0px) rotate(1deg);
+ }
+ 30% {
+ transform: translate(1px, 2px) rotate(0deg);
+ }
+ 40% {
+ transform: translate(1px, -1px) rotate(1deg);
+ }
+ 50% {
+ transform: translate(-1px, 3px) rotate(-1deg);
+ }
+ 60% {
+ transform: translate(-1px, 1px) rotate(0deg);
+ }
+ 70% {
+ transform: translate(3px, 1px) rotate(-1deg);
+ }
+ 80% {
+ transform: translate(-2px, -1px) rotate(1deg);
+ }
+ 90% {
+ transform: translate(2px, 1px) rotate(0deg);
+ }
+ 100% {
+ transform: translate(1px, -2px) rotate(-1deg);
+ }
+}
+.longfazers {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+}
+.longfazers span {
+ position: absolute;
+ height: 2px;
+ width: 20%;
+ background: var(--theme-color);
+}
+.longfazers span:nth-child(1) {
+ top: 20%;
+ animation: lf 0.6s linear infinite;
+ animation-delay: -5s;
+}
+.longfazers span:nth-child(2) {
+ top: 40%;
+ animation: lf2 0.8s linear infinite;
+ animation-delay: -1s;
+}
+.longfazers span:nth-child(3) {
+ top: 60%;
+ animation: lf3 0.6s linear infinite;
+}
+.longfazers span:nth-child(4) {
+ top: 80%;
+ animation: lf4 0.5s linear infinite;
+ animation-delay: -3s;
+}
+
+@keyframes lf {
+ 0% {
+ left: 200%;
+ }
+ 100% {
+ left: -200%;
+ opacity: 0;
+ }
+}
+@keyframes lf2 {
+ 0% {
+ left: 200%;
+ }
+ 100% {
+ left: -200%;
+ opacity: 0;
+ }
+}
+@keyframes lf3 {
+ 0% {
+ left: 200%;
+ }
+ 100% {
+ left: -100%;
+ opacity: 0;
+ }
+}
+@keyframes lf4 {
+ 0% {
+ left: 200%;
+ }
+ 100% {
+ left: -100%;
+ opacity: 0;
+ }
+}
\ No newline at end of file
diff --git a/css/login.css b/css/login.css
new file mode 100644
index 0000000..7a94fb8
--- /dev/null
+++ b/css/login.css
@@ -0,0 +1,165 @@
+
+
+html{
+ overflow:hidden;
+ font-family: 'Montserrat', sans-serif;
+}
+
+body {
+ margin:0;
+}
+
+h3 {
+ font-family: 'Montserrat', sans-serif;
+ font-weight:600;
+ letter-spacing: 2px;
+ font-size:32px;
+}
+p {
+ font-family: 'Lato', sans-serif;
+ letter-spacing: 1px;
+ font-size:14px;
+ color: #333333;
+}
+
+.header {
+ position:relative;
+ text-align:center;
+ background: linear-gradient(60deg, rgba(84,58,183,1) 0%, rgba(0,172,193,1) 100%);
+ color:white;
+}
+
+
+.inner-header {
+ height:20vh;
+ width:100%;
+ margin: 0;
+ padding: 0;
+}
+
+.flex { /*Flexbox for containers*/
+ display: flex;
+ flex-direction:column;
+ justify-content: center;
+ align-items: center;
+ text-align: center;
+}
+
+.bottom-container{
+ display:flex;
+ align-items:center;
+}
+
+a{
+text-decoration:none;
+ margin: 0px 5px;
+ font-family: 'Montserrat', sans-serif;
+ letter-spacing:0px;
+ font-size:14px;
+ font-weight:600;
+ color:limegreen;
+
+}
+
+.waves {
+ position:relative;
+ width: 100%;
+ height:15vh;
+ margin-bottom:-7px; /*Fix for safari gap*/
+ min-height:100px;
+ max-height:150px;
+}
+
+.content {
+ position:relative;
+ height:100%;
+ text-align:center;
+ background-color: white;
+}
+
+/* Animation */
+
+.parallax > use {
+ animation: move-forever 25s cubic-bezier(.55,.5,.45,.5) infinite;
+}
+.parallax > use:nth-child(1) {
+ animation-delay: -2s;
+ animation-duration: 7s;
+}
+.parallax > use:nth-child(2) {
+ animation-delay: -3s;
+ animation-duration: 10s;
+}
+.parallax > use:nth-child(3) {
+ animation-delay: -4s;
+ animation-duration: 13s;
+}
+.parallax > use:nth-child(4) {
+ animation-delay: -5s;
+ animation-duration: 20s;
+}
+@keyframes move-forever {
+ 0% {
+ transform: translate3d(-90px,0,0);
+ }
+ 100% {
+ transform: translate3d(85px,0,0);
+ }
+}
+/*Shrinking for mobile*/
+@media (max-width: 768px) {
+ .form{
+ max-width:80vh;
+ }
+ .waves {
+ height:40px;
+ min-height:40px;
+ }
+ .content {
+ height:70vh;
+ }
+ h1 {
+ font-size:24px;
+ }
+}
+
+form{
+ display:flex;
+ width:80vh;
+ justify-content:center;
+ align-items:center;
+ flex-direction:column;
+ padding:10px;
+ margin:10px;
+}
+
+input{
+ width:80%;
+ padding:8px;
+ margin:10px;
+ height:32px;
+ font-size:1rem;;
+ border:none;
+ box-shadow: 0px 0px 15px 0px rgb(0 0 0 / 20%);
+ border-radius:25px;
+ outline:none;
+ text-align:center;
+
+}
+
+.login-btn{
+ font-size:1rem;
+ border:none;
+ height:44px;
+ width:40%;
+ margin:20px 10px;
+ border-radius:25px;
+ background-color:#3A5FBB;
+ color:#ffffff
+
+}
+
+button:hover {
+ box-shadow: 0px 0px 15px 0px rgb(0 0 0 / 30%);
+
+}
\ No newline at end of file
diff --git a/css/style.css b/css/style.css
new file mode 100644
index 0000000..73442bd
--- /dev/null
+++ b/css/style.css
@@ -0,0 +1,253 @@
+#loader {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+}
+
+#loader > h1 {
+ position: absolute;
+ font-family: "Open Sans";
+ font-weight: 600;
+ font-size: 12px;
+ text-transform: uppercase;
+ left: 50%;
+ top: 58%;
+ margin-left: -20px;
+}
+
+.loader {
+ position: absolute;
+ top: 50%;
+ margin-left: -50px;
+ left: 50%;
+ animation: speeder 0.4s linear infinite;
+}
+.loader > span {
+ height: 5px;
+ width: 35px;
+ background: blue;
+ position: absolute;
+ top: -19px;
+ left: 60px;
+ border-radius: 2px 10px 1px 0;
+}
+
+.base span {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-top: 6px solid transparent;
+ border-right: 100px solid blue;
+ border-bottom: 6px solid transparent;
+}
+.base span:before {
+ content: "";
+ height: 22px;
+ width: 22px;
+ border-radius: 50%;
+ background: blue;
+ position: absolute;
+ right: -110px;
+ top: -16px;
+}
+.base span:after {
+ content: "";
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-top: 0 solid transparent;
+ border-right: 55px solid blue;
+ border-bottom: 16px solid transparent;
+ top: -16px;
+ right: -98px;
+}
+
+.face {
+ position: absolute;
+ height: 12px;
+ width: 20px;
+ background: blue;
+ border-radius: 20px 20px 0 0;
+ transform: rotate(-40deg);
+ right: -125px;
+ top: -15px;
+}
+.face:after {
+ content: "";
+ height: 12px;
+ width: 12px;
+ background: blue;
+ right: 4px;
+ top: 7px;
+ position: absolute;
+ transform: rotate(40deg);
+ transform-origin: 50% 50%;
+ border-radius: 0 0 0 2px;
+}
+
+.loader > span > span:nth-child(1),
+.loader > span > span:nth-child(2),
+.loader > span > span:nth-child(3),
+.loader > span > span:nth-child(4) {
+ width: 30px;
+ height: 1px;
+ background: blue;
+ position: absolute;
+ animation: fazer1 0.2s linear infinite;
+}
+
+.loader > span > span:nth-child(2) {
+ top: 3px;
+ animation: fazer2 0.4s linear infinite;
+}
+
+.loader > span > span:nth-child(3) {
+ top: 1px;
+ animation: fazer3 0.4s linear infinite;
+ animation-delay: -1s;
+}
+
+.loader > span > span:nth-child(4) {
+ top: 4px;
+ animation: fazer4 1s linear infinite;
+ animation-delay: -1s;
+}
+
+@keyframes fazer1 {
+ 0% {
+ left: 0;
+ }
+ 100% {
+ left: -80px;
+ opacity: 0;
+ }
+}
+@keyframes fazer2 {
+ 0% {
+ left: 0;
+ }
+ 100% {
+ left: -100px;
+ opacity: 0;
+ }
+}
+@keyframes fazer3 {
+ 0% {
+ left: 0;
+ }
+ 100% {
+ left: -50px;
+ opacity: 0;
+ }
+}
+@keyframes fazer4 {
+ 0% {
+ left: 0;
+ }
+ 100% {
+ left: -150px;
+ opacity: 0;
+ }
+}
+@keyframes speeder {
+ 0% {
+ transform: translate(2px, 1px) rotate(0deg);
+ }
+ 10% {
+ transform: translate(-1px, -3px) rotate(-1deg);
+ }
+ 20% {
+ transform: translate(-2px, 0px) rotate(1deg);
+ }
+ 30% {
+ transform: translate(1px, 2px) rotate(0deg);
+ }
+ 40% {
+ transform: translate(1px, -1px) rotate(1deg);
+ }
+ 50% {
+ transform: translate(-1px, 3px) rotate(-1deg);
+ }
+ 60% {
+ transform: translate(-1px, 1px) rotate(0deg);
+ }
+ 70% {
+ transform: translate(3px, 1px) rotate(-1deg);
+ }
+ 80% {
+ transform: translate(-2px, -1px) rotate(1deg);
+ }
+ 90% {
+ transform: translate(2px, 1px) rotate(0deg);
+ }
+ 100% {
+ transform: translate(1px, -2px) rotate(-1deg);
+ }
+}
+.longfazers {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+}
+.longfazers span {
+ position: absolute;
+ height: 2px;
+ width: 20%;
+ background: blue;
+}
+.longfazers span:nth-child(1) {
+ top: 20%;
+ animation: lf 0.6s linear infinite;
+ animation-delay: -5s;
+}
+.longfazers span:nth-child(2) {
+ top: 40%;
+ animation: lf2 0.8s linear infinite;
+ animation-delay: -1s;
+}
+.longfazers span:nth-child(3) {
+ top: 60%;
+ animation: lf3 0.6s linear infinite;
+}
+.longfazers span:nth-child(4) {
+ top: 80%;
+ animation: lf4 0.5s linear infinite;
+ animation-delay: -3s;
+}
+
+@keyframes lf {
+ 0% {
+ left: 200%;
+ }
+ 100% {
+ left: -200%;
+ opacity: 0;
+ }
+}
+@keyframes lf2 {
+ 0% {
+ left: 200%;
+ }
+ 100% {
+ left: -200%;
+ opacity: 0;
+ }
+}
+@keyframes lf3 {
+ 0% {
+ left: 200%;
+ }
+ 100% {
+ left: -100%;
+ opacity: 0;
+ }
+}
+@keyframes lf4 {
+ 0% {
+ left: 200%;
+ }
+ 100% {
+ left: -100%;
+ opacity: 0;
+ }
+}
\ No newline at end of file
diff --git a/dependencias/KFOmCnqEu92Fr1Mu4mxK.woff2 b/dependencias/KFOmCnqEu92Fr1Mu4mxK.woff2
new file mode 100644
index 0000000..020729e
Binary files /dev/null and b/dependencias/KFOmCnqEu92Fr1Mu4mxK.woff2 differ
diff --git a/dependencias/KFOmCnqEu92Fr1Mu7GxKOzY.woff2 b/dependencias/KFOmCnqEu92Fr1Mu7GxKOzY.woff2
new file mode 100644
index 0000000..8a8de61
Binary files /dev/null and b/dependencias/KFOmCnqEu92Fr1Mu7GxKOzY.woff2 differ
diff --git a/dependencias/Roboto.css b/dependencias/Roboto.css
new file mode 100644
index 0000000..692f71f
--- /dev/null
+++ b/dependencias/Roboto.css
@@ -0,0 +1,56 @@
+/* cyrillic-ext */
+@font-face {
+ font-family: 'Roboto';
+ font-style: normal;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu72xKOzY.woff2) format('woff2');
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
+}
+/* cyrillic */
+@font-face {
+ font-family: 'Roboto';
+ font-style: normal;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu5mxKOzY.woff2) format('woff2');
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* greek-ext */
+@font-face {
+ font-family: 'Roboto';
+ font-style: normal;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7mxKOzY.woff2) format('woff2');
+ unicode-range: U+1F00-1FFF;
+}
+/* greek */
+@font-face {
+ font-family: 'Roboto';
+ font-style: normal;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4WxKOzY.woff2) format('woff2');
+ unicode-range: U+0370-03FF;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Roboto';
+ font-style: normal;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7WxKOzY.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Roboto';
+ font-style: normal;
+ font-weight: 400;
+ src: url(KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2');
+ unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Roboto';
+ font-style: normal;
+ font-weight: 400;
+ src: url(KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
diff --git a/dependencias/ajax-jquery.min.js b/dependencias/ajax-jquery.min.js
new file mode 100644
index 0000000..a1c07fd
--- /dev/null
+++ b/dependencias/ajax-jquery.min.js
@@ -0,0 +1,2 @@
+/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/
+
+
+
+
+
+
+
+