Events

Table des matières

1. Login

We’ll add a listener for the Login event so, each time a user make a login, we’ll be able to fire custom code. To make the code scalable, we’ll use arrays and loops.

1.1. Attach the listeners

Edit /app/Providers/EventServiceProvider.php and update the $listen variable like this:

protected $listen = [
    'Illuminate\Auth\Events\Login' => [
        'App\Listeners\LoginSuccess',
        'App\Listeners\LoginSuccessMilk',
    ],
    'App\Events\Event' => [
        'App\Listeners\EventListener',
    ],
];

For the Login event, we’ve attached two classes, LoginSuccess and LoginSuccessMilk.

1.2. Create LoginSuccess

Create a file called /app/Listeners/LoginSuccess.php with this code:

<?php

namespace App\Listeners;

use Illuminate\Auth\Events\Login;
use Session;

class LoginSuccess
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
    }

    /**
     * Handle the event.
     *
     * @param  object $event
     * @return void
     */
    public function handle(Login $login)
    {
        $arr = Session::get('message');
        $arr[] = [
            'type' => 'success',
            'message' => 'Hi ' . $login->user->name . ', nice to see you again'
        ];
        Session::flash('message', $arr);
    }
}

This code is responsible for getting the message variable from the Session and store it in a variable:

$arr = Session::get('message');

Then add a new entry in the variable (which is / will be an array):

$arr[] = [
    'type' => 'success',
    'message' => 'Hi ' . $login->user->name . ', nice to see you again'
];

We define a type (success) and a message.

1.3. Create LoginSuccessMilk

Same thing with /app/Listeners/LoginSuccessMilk.php (need to be created) with this code:

<?php

namespace App\Listeners;

use Illuminate\Auth\Events\Login;
use Session;

class LoginSuccessMilk
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
    }

    /**
     * Handle the event.
     *
     * @param  object $event
     * @return void
     */
    public function handle(Login $login)
    {
        $arr = Session::get('message');
        $arr[] = [
            'type' => 'warning',
            'message' => 'Don\'t forget to buy some milk ?'
        ];
        Session::flash('message', $arr);
    }
}

1.4. Display messages

Laravel will display the home view once the user is logged-in so, edit the /resources/views/home.blade.php and modify the @section('content') section like this:

@section('content')

<?php

  if (Session::has('message')) {
    $alert = '<div class="alert alert-%s alert-dismissible ' .
      'fade show" role="alert">%s' .
      '<button type="button" class="close" data-dismiss="alert" ' .
      'aria-label="Close"><span aria-hidden="true">&times;</span> ' .
      '</button></div>';

    foreach (Session::get('message') as $msg) {
        echo sprintf($alert, $msg['type'], $msg['message']);
    }
  }

?>

[...]

@endsection

We’ll put our message before the previous content.

1.5. Test

Go to http://127.0.0.1:8000/login and make a connection, Laravel will fire the event, our two listeners will be triggered and:

Events captured

2. New Todo event

%TODO_6%

2.1. Objective

In a previous lab, we’ve coded in /app/Http/Controllers/TodoController.php

public function store(TodoRequest $request)
{
    $todo = $this->todoRepository->store($request->all());

    return redirect()->route('todos.show', ['id' => $todo->id])->withOk('Todo has been successfully created');
}

The objective, the mantra, is: keep the core as small as possible so, here, we’ll suppress the message:

public function store(TodoRequest $request)
{
    $todo = $this->todoRepository->store($request->all());

    return redirect()->route('todos.show', ['id' => $todo->id]);
}

But we’ll call an event and then show a message in our detail view.

2.2. Implementation

2.2.1. Create the event

php artisan make:event TodoCreated

Edit the added file /app/Events/TodoCreate.php and replace existing content by this one:ode will be:

<?php

namespace App\Events;

use App\Todo;

class TodoCreated
{
    public $todo;

    public function __construct(Todo $todo)
    {
        $this->todo = $todo;
    }
}

2.2.2. Create the listener

php artisan make:listener Created --event=App\Todo\TodoCreated

Edit the newly created file /app/Listeners/Created.php and use this content:

<?php

namespace App\Listeners;

use App\Events\TodoCreated;
use Session;

class Created
{
    public function handle(TodoCreated $event)
    {
        $arr = Session::get('message');
        $arr[] = [
            'type' => 'success',
            'message' => 'Todo ' . $event->todo->title . ' successfully created '.
                '(#' . $event->todo->id . ')'
        ];
        Session::flash('message', $arr);
    }
}

2.2.3. Reference the listener

Edit /app/Providers/EventServiceProvider.php and update the $listen array:

protected $listen = [
    ...
    'App\Events\TodoCreated' => [
        'App\Listeners\Created',
    ],
];

2.2.4. Raise the event

Edit /app/Http/Controllers/TodoController.php and use this code for the store() function:

public function store(TodoRequest $request)
{
    $todo = $this->todoRepository->store($request->all());

    event(new TodoCreated($todo));

    return redirect()->route('todos.show', ['id' => $todo->id]);
}

2.2.5. Display the message

Edit /resources/views/show.blade.php and remove the old:

<div class="msg hide alert alert-success alert-dismissible">&nbsp;</div>

and replace by:

<?php
  if (Session::has('message')) {
    $alert = '<div class="alert alert-%s alert-dismissible ' .
    'fade show" role="alert">%s' .
      '<button type="button" class="close" data-dismiss="alert" ' .
      'aria-label="Close"><span aria-hidden="true">&times;</span> ' .
      '</button></div>';

    foreach (Session::get('message') as $msg) {
        echo sprintf($alert, $msg['type'], $msg['message']);
    }
  }
?>

Success

Now, we can have several listeners and several possible answer (success, warning, error, ...).

If we wish to disable message, we just need to disable the events; without doing any changes in our view.

3. Final code

Here is the final code of this second lab: todos.zip

3.1. Install a fresh copy

  1. Start a DOS prompt
  2. Make sure Laravel is correctly install: type Laravel -V, if you see the Laravel Installer’s version number (f.i. 2.0.1), it’s fine.
  3. Install a fresh Laravel website: go to your public_html folder (i.e. where you wish create your website, can be c:\development\my_sites too if configured like this on your machine).
  4. At the prompt level, run laravel new a_folder_name (f.i. laravel new app_todos)
  5. Once the installation is done, go in that folder: type cd app_todos (i.e. your folder)
  6. Grab a copy of todos.zip and unzip the file (under DOS "C:\Program Files\7-Zip\7z.exe" x todos.zip -aoa i.e. extract with full path and overwrite existing files)
  7. Retrieve the name of the database to create:
    1. Open with a text editor the file called .env present in the root of app_todos
    2. Look to the DB_DATABASE variable, you’ll find the name of the database for the application (by default, it’ll be todos)
  8. Create a database with that name (todos) in your mySQL
    1. At the prompt level, type mysql -u root -p (where root is the username)
    2. When asking the password, just press enter (there is no password)
    3. In the MySQL prompt, type CREATE DATABASE todos; and press Enter
    4. Type quit for leaving MySQL
  9. Start the migration: php artisan migrate:install
  10. Create tables: php artisan migrate:fresh
  11. Add the authentication layer: php artisan make:auth
  12. Add fake data: php artisan todos:populate
  13. Run composer require "laravelcollective/html"
  14. Install composer require rap2hpoutre/laravel-log-viewer --dev
  15. This done, start artisan by starting php artisan serve on the DOS prompt.
  16. With your browser go to http://127.0.0.1:8000/login and make a login with christophe@todos.com for the email while admin is the password.
  17. Then we can use the application: http://127.0.0.1:8000

3.2. Code source

3.2.1. env

Our environment file.

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:SS+CZVwEkBRyzZQTxpogAroaFSbazMf+DtE9J0vftA8=
APP_DEBUG=true
APP_URL=http://127.0.0.1

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=todos
DB_USERNAME=root
DB_PASSWORD=

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
SESSION_LIFETIME=120
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

3.2.2. app

3.2.2.1. app/Todo.php

Our model, layer for our todos table.qsdnfqsdhnf

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Todo extends Model
{
    // Name of our table in the database
    protected $table = 'todos';

    // Only if $table->timestamps() was mentioned in the
    // CreateTodosTable class; set to False if not mentioned
    public $timestamps = true;

    // List of columns that we can update
    public $fillable = ['title', 'completed', 'description'];

    /**
     * Extend the model and offer a convenient way to retrieve the
     * user linked to our todo (thanks the user_id foreign key and
     * his link with the users table)
     *
     * @return void
     */
    public function user()
    {
        return $this->belongsTo('App\User', 'user_id', 'id');
    }
}
3.2.2.2. app/Console/Commands/clear.php

Our artisan command for clear tables

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class clear extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'todos:clear';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Clear todos app tables';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        \DB::table('todos')->truncate();

        \DB::table('users')->where('email', 'like', '%@todos.com')->delete();

        $this->info('>> Todos - Clear done <<');
    }
}
3.2.2.3. app/Console/Commands/populate.php

Our artisan command for populating tables

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Faker;

class populate extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'todos:populate';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Add fake data\'s to tables';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        // First clear previous content
        $this->call('todos:clear');

        // Ask how many items to create, default 20
        $wNbr = $this->ask('How many todos do you want to create?', 20);

        // Create user Christophe
        \DB::table('users')->insert([[
            'name' => 'Christophe',
            'email' => 'christophe@todos.com',
            'password' => bcrypt('admin')
        ]]);

        // Getting the ID of the user Christophe
        $user_id = \DB::table('users')->where('name', 'Christophe')->take(1)->value('id');

        // Use faker to get french dummy text
        // If needed, just run "composer require fzaninotto/faker" in
        // a DOS prompt
        $faker = Faker\Factory::create('fr_FR');

        // Insert a few items for him
        for ($i = 0; $i < $wNbr; $i++) {
            \DB::table('todos')->insert([
                [
                    'title' => $faker->sentence($nbWords = 6, $variableNbWords = true) .
                        ' (todo #' . ($i + 1) . ')',
                    'description' => $faker->realText($maxNbChars = 1000),
                    'user_id' => $user_id,
                    'completed' => $faker->boolean(),
                    'created_at' => now(),
                    'updated_at' => now()
                ]
            ]);
        }

        $this->info('>> Todos - Populating done <<');
    }
}
3.2.2.4. app/Events/TodoCreated.php

File that declare our TodoCreated own event.

<?php

namespace App\Events;

use App\Todo;

class TodoCreated
{
    public $todo;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct(Todo $todo)
    {
        $this->todo = $todo;
    }
}
3.2.2.5. app/Http/Controllers/TodoController.php

Implements the code to run for each route.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests\TodoRequest;
use App\Repositories\TodoRepositoryInterface;
use App\Repositories\TodoRepository;
use App\Events\TodoCreated;
use Response;

class TodoController extends Controller
{
    protected $todoRepository;
    protected $nbrPerPage = 5;

    public function __construct(TodoRepositoryInterface $todoRepository)
    {
        $this->todoRepository = $todoRepository;

        // Methods in the controller needs to be logged in
        // Except getting the list of todos (method index) and showing
        // one of them (method show).
        // All other methods requires a valid login.
        $this->middleware('auth', ['except' => ['index', 'show']]);
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        // Retrieve all todos
        $datas = $this->todoRepository->getPaginate($this->nbrPerPage);
        $links = $datas->render();

        // call the index.blade.php view and pass the data
        return view('index', compact('datas', 'links'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(TodoRequest $request)
    {
        $todo = $this->todoRepository->store($request->all());

        event(new TodoCreated($todo));

        return redirect()->route('todos.show', ['id' => $todo->id])->withOk('Todo has been successfully created');
    }

    /**
     * Display the specified resource.
     *
     * @param  int                       $id
     * @return \Illuminate\Http\Response
     */
    public function show(int $id)
    {
        $data = $this->todoRepository->getById($id);

        return view('show', compact('data'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int                       $id
     * @param  TodoRepositoryInterface   $todoRepository
     * @return \Illuminate\Http\Response
     */
    public function edit(int $id)
    {
        $data = $this->todoRepository->getById($id);

        return view('edit', compact('data'));
    }

    /**
     * Update the specified resource in storage.
     * This function answer to the PUT method (updating an existing record)
     *
     * @param  TodoRequest               $request
     * @param  int                       $id
     * @return \Illuminate\Http\Response
     */
    public function update(TodoRequest $request, int $id)
    {
        $this->todoRepository->update($id, $request->all());

        // Redirect to the edit form
        return redirect()->route('todos.edit', ['id' => $id])->withOk('Successfully updated');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int                       $id
     * @param  TodoRepositoryInterface   $todoRepository
     * @return \Illuminate\Http\Response
     */
    public function destroy(Request $request, int $id)
    {
        $this->todoRepository->destroy($id);

        if (!$request->ajax()) {
            return redirect()->route('todos.index')->withOk('Successfully removed');
        } else {
            // Return a JSON string that will be used in an Ajax request
            return Response::json([
                'status' => true,
                'message' => 'Successfully deleted'
            ]);
        }
    }
}
3.2.2.6. app/Http/Requests/TodoRequest.php

Define who can use our Todo records and specify which rules should be applied to records.

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class TodoRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'title' => 'required|string|max:100',
            'completed' => 'boolean'
        ];
    }
}
3.2.2.7. app/Listeners/LoginSuccess.php

Add in the Session a message “Hi {{ user }}, nice to see you again”

<?php

namespace App\Listeners;

use Illuminate\Auth\Events\Login;
use Session;

class LoginSuccess
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
    }

    /**
     * Handle the event.
     *
     * @param  object $event
     * @return void
     */
    public function handle(Login $login)
    {
        $arr = Session::get('message');
        $arr[] = [
            'type' => 'success',
            'message' => 'Hi ' . $login->user->name . ', nice to see you again'
        ];
        Session::flash('message', $arr);
    }
}
3.2.2.8. app/Listeners/LoginSuccessMilk.php

Add in the Session a message “Don’t forget to buy some milk ?”

<?php

namespace App\Listeners;

use Illuminate\Auth\Events\Login;
use Session;

class LoginSuccessMilk
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
    }

    /**
     * Handle the event.
     *
     * @param  object $event
     * @return void
     */
    public function handle(Login $login)
    {
        $arr = Session::get('message');
        $arr[] = [
            'type' => 'info',
            'message' => 'Don\'t forget to buy some milk ?'
        ];
        Session::flash('message', $arr);
    }
}
3.2.2.9. app/Providers/AppServiceProvider.php

Since we need to bind our interface and our repository.

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Schema::defaultStringLength(191);
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind(
            'App\Repositories\TodoRepositoryInterface',
            'App\Repositories\TodoRepository'
        );
    }
}
3.2.2.10. app/Providers/EventServiceProvider.php

This file will inform Laravel about which events are listened and who’ll answer to calls.

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Event;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;

class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        'Illuminate\Auth\Events\Login' => [
            'App\Listeners\LoginSuccess',
            'App\Listeners\LoginSuccessMilk',
            'App\Listeners\LoginCheck',
        ],
        'App\Events\TodoCreated' => [
            'App\Listeners\Created',
        ]
    ];

    /**
     * Register any events for your application.
     *
     * @return void
     */
    public function boot()
    {
        parent::boot();
    }
}
3.2.2.11. app/Repositories/TodoRepositoryInterface.php

Defines the functions that are supported by the TodoRepository i.e. the data logic.

<?php

namespace App\Repositories;

use App\Todo;
use Illuminate\Database\Eloquent\Collection;
use App\Http\Requests\TodoRequest;

/**
 * Define the function that should be available through the
 * TodoRepository
 */
interface TodoRepositoryInterface
{
    /**
     * Get a pagination
     *
     * @param  int        $n
     * @return Collection
     */
    public function getPaginate(int $n);

    /**
     * Get the list of records of the table
     *
     * @return Collection
     */
    public function index() : Collection;

    /**
     * Get a specific todo; identified by his ID
     *
     * @param  int  $id
     * @return Todo
     */
    public function getById(int $id) : Todo;

    /**
     * Save the todo
     *
     * @param  array $inputs Submitted datas
     * @return void
     */
    //public function store(TodoRequest $todo) : Todo;
    public function store(array $inputs) : Todo;

    /**
     * Remove the specified todo
     *
     * @param  int  $id
     * @return void
     */
    public function destroy(int $id);

    /**
     * Update the specified todo, update columns
     *
     * @param  int   $id
     * @param  array $inputs Submitted datas
     * @return void
     */
    public function update(int $id, array $inputs) : Todo;
}
3.2.2.12. app/Repositories/TodoRepository.php

Implements functions for our data logic.

<?php

namespace App\Repositories;

use Illuminate\Database\Eloquent\Collection;
use App\Todo;
use Auth;

/**
 * Implements functions for working with the todos table
 */
class TodoRepository implements TodoRepositoryInterface
{
    protected $todo;

    public function __construct(Todo $todo)
    {
        $this->todo = $todo;
    }

    public function getPaginate(int $n)
    {
        return $this->todo::with('user')
            ->latest('todos.created_at')
            ->paginate($n);
    }

    /**
     * Get the list of records of the table
     *
     * @return Collection
     */
    public function index() : Collection
    {
        return $this->todo::with('user')->all();
    }

    /**
     * Get a specific todo; identified by his ID
     *
     * @param  int  $id
     * @return Todo
     */
    public function getById(int $id) : Todo
    {
        return $this->todo->where('id', $id)->firstOrFail();
    }

    private function save(Todo $todo, array $inputs) : Todo
    {
        $todo->title = $inputs['title'];
        $todo->description = $inputs['description'];

        $todo->save();

        return $todo;
    }

    /**
     * Save the todo
     *
     * @param  array $inputs List of fields present in the creation form
     * @return Todo
     */
    public function store(array $inputs) : Todo
    {
        $todo = new $this->todo();

        $todo->completed = false;
        $todo->user_id = Auth::user()->id;

        return $this->save($todo, $inputs); // Save the submitted data
    }

    /**
     * Remove the specified todo
     *
     * @param  int  $id
     * @return void
     */
    public function destroy(int $id)
    {
        $this->todo->destroy($id);
    }

    /**
     * Update the specified todo, update columns
     *
     * @param  int   $id
     * @param  array $inputs Submitted datas
     * @return void
     */
    public function update(int $id, array $inputs) : Todo
    {
        return $this->save($this->getById($id), $inputs);
    }
}

3.2.3. database

3.2.3.1. database/migrations/create_todos_table.php

Define the structure of the todos table.

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateTodosTable extends Migration
{
    /**
     * The migration is running
     * Define a foreign key between user_id and the users table
     *
     * @return void
     */
    public function up()
    {
        Schema::create('todos', function (Blueprint $table) {
            // Our primary key
            $table->increments('id');

            // Allow Eloquent to add two fields and managed them:
            // created_at and updated_at
            $table->timestamps();

            $table->string('title', 100);
            $table->boolean('completed')->default(0);
            $table->text('description', 1000)->nullable();

            // The author of the record
            $table->integer('user_id')->unsigned();
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('todos');
    }
}

3.2.4. public

3.2.4.1. public/images/errors/error_404_data.json

The JSON file that will be used by the 404 error page (Lottie)

{"v":"5.1.1","fr":30,"ip":0,"op":360,"w":1020,"h":737,"nm":"robo internet lost","ddd":0,"assets":[],"fonts":{"list":[{"fName":"Roboto-Regular","fFamily":"Roboto","fStyle":"Regular","ascent":75}]},"layers":[{"ddd":0,"ind":1,"ty":5,"nm":"We couldn?t connect","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510,635.2,0],"ix":2},"a":{"a":0,"k":[161.279,-13.324,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"t":{"d":{"k":[{"s":{"s":36,"f":"Roboto-Regular","t":"We couldn?t connect","j":0,"tr":0,"lh":43.2,"ls":0,"fc":[0,0,0]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":211,"op":360,"st":389,"bm":0},{"ddd":0,"ind":2,"ty":5,"nm":"We?re Sorry                          ","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510,605.2,0],"ix":2},"a":{"a":0,"k":[90.158,-9.659,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"t":{"d":{"k":[{"s":{"s":36,"f":"Roboto-Regular","t":"We?re Sorry                          ","j":0,"tr":0,"lh":43.2,"ls":0,"fc":[0,0,0]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":211,"op":360,"st":389,"bm":0},{"ddd":0,"ind":3,"ty":5,"nm":"Searching Network....","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510,605.248,0],"ix":2},"a":{"a":0,"k":[169.576,-9.756,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"t":{"d":{"k":[{"s":{"s":36,"f":"Roboto-Regular","t":"Searching Network....","j":0,"tr":0,"lh":43.2,"ls":0,"fc":[0,0,0]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":210,"st":-1,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"red cross/robot 2.1 Outlines","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.262,117.5,0],"ix":2},"a":{"a":0,"k":[21.5,21.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[15.507,20.674],[0,5.169],[-15.506,20.674],[-20.674,15.507],[-5.169,0.001],[-20.674,-15.505],[-15.506,-20.674],[0,-5.168],[15.507,-20.674],[20.674,-15.505],[5.168,0.001],[20.674,15.507]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.25,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.957000014361,0.289999988032,0.238999998803,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[21.299,21.299],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":210,"op":360,"st":210,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"w3/robot 2.1 Outlines 2","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.348,98.5,0],"ix":2},"a":{"a":0,"k":[51.5,19.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.233,1.558],[25.475,-32.165],[-1.558,-1.233],[-1.234,1.558],[-22.586,-28.517],[-1.062,0],[-0.661,0.524]],"o":[[-25.431,-32.109],[-1.234,1.558],[1.558,1.234],[22.555,-28.478],[0.711,0.897],[0.782,0],[1.558,-1.234]],"v":[[49.731,12.938],[-49.73,12.938],[-49.144,17.992],[-44.09,17.405],[44.09,17.405],[46.914,18.77],[49.145,17.992]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[51.214,19.477],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":190,"op":360,"st":190,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"w2/robot 2.1 Outlines 2","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.308,116.5,0],"ix":2},"a":{"a":0,"k":[35,14.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[17.048,-21.514],[-1.557,-1.234],[-0.782,0],[-0.71,0.896],[-14.166,-17.877],[-1.558,1.234],[1.234,1.557]],"o":[[-1.234,1.557],[0.661,0.524],[1.061,0],[14.14,-17.844],[1.233,1.557],[1.556,-1.234],[-17.021,-21.479]],"v":[[-33.27,7.613],[-32.685,12.667],[-30.453,13.445],[-27.631,12.082],[27.631,12.082],[32.685,12.667],[33.27,7.613]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[34.754,14.151],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":180,"op":360,"st":180,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"w1/robot 2.1 Outlines 2","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.261,133.5,0],"ix":2},"a":{"a":0,"k":[18.5,9,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[8.6,-10.865],[-1.558,-1.234],[-1.233,1.558],[-5.717,-7.222],[-1.558,1.233],[1.232,1.558]],"o":[[-1.233,1.558],[1.558,1.233],[5.707,-7.21],[1.234,1.558],[1.558,-1.234],[-8.586,-10.848]],"v":[[-16.818,2.289],[-16.23,7.343],[-11.176,6.754],[11.176,6.754],[16.23,7.343],[16.819,2.289]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[18.301,8.826],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":170,"op":360,"st":170,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"w3/robot 2.1 Outlines 3","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.348,98.5,0],"ix":2},"a":{"a":0,"k":[51.5,19.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.233,1.558],[25.475,-32.165],[-1.558,-1.233],[-1.234,1.558],[-22.586,-28.517],[-1.062,0],[-0.661,0.524]],"o":[[-25.431,-32.109],[-1.234,1.558],[1.558,1.234],[22.555,-28.478],[0.711,0.897],[0.782,0],[1.558,-1.234]],"v":[[49.731,12.938],[-49.73,12.938],[-49.144,17.992],[-44.09,17.405],[44.09,17.405],[46.914,18.77],[49.145,17.992]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[51.214,19.477],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":155,"op":165,"st":155,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"w2/robot 2.1 Outlines 3","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.308,116.5,0],"ix":2},"a":{"a":0,"k":[35,14.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[17.048,-21.514],[-1.557,-1.234],[-0.782,0],[-0.71,0.896],[-14.166,-17.877],[-1.558,1.234],[1.234,1.557]],"o":[[-1.234,1.557],[0.661,0.524],[1.061,0],[14.14,-17.844],[1.233,1.557],[1.556,-1.234],[-17.021,-21.479]],"v":[[-33.27,7.613],[-32.685,12.667],[-30.453,13.445],[-27.631,12.082],[27.631,12.082],[32.685,12.667],[33.27,7.613]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[34.754,14.151],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":145,"op":165,"st":145,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"w1/robot 2.1 Outlines 3","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.261,133.5,0],"ix":2},"a":{"a":0,"k":[18.5,9,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[8.6,-10.865],[-1.558,-1.234],[-1.233,1.558],[-5.717,-7.222],[-1.558,1.233],[1.232,1.558]],"o":[[-1.233,1.558],[1.558,1.233],[5.707,-7.21],[1.234,1.558],[1.558,-1.234],[-8.586,-10.848]],"v":[[-16.818,2.289],[-16.23,7.343],[-11.176,6.754],[11.176,6.754],[16.23,7.343],[16.819,2.289]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[18.301,8.826],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":135,"op":165,"st":135,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"w3/robot 2.1 Outlines","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.348,98.5,0],"ix":2},"a":{"a":0,"k":[51.5,19.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.233,1.558],[25.475,-32.165],[-1.558,-1.233],[-1.234,1.558],[-22.586,-28.517],[-1.062,0],[-0.661,0.524]],"o":[[-25.431,-32.109],[-1.234,1.558],[1.558,1.234],[22.555,-28.478],[0.711,0.897],[0.782,0],[1.558,-1.234]],"v":[[49.731,12.938],[-49.73,12.938],[-49.144,17.992],[-44.09,17.405],[44.09,17.405],[46.914,18.77],[49.145,17.992]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[51.214,19.477],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":120,"op":130,"st":120,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"w2/robot 2.1 Outlines","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.308,116.5,0],"ix":2},"a":{"a":0,"k":[35,14.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[17.048,-21.514],[-1.557,-1.234],[-0.782,0],[-0.71,0.896],[-14.166,-17.877],[-1.558,1.234],[1.234,1.557]],"o":[[-1.234,1.557],[0.661,0.524],[1.061,0],[14.14,-17.844],[1.233,1.557],[1.556,-1.234],[-17.021,-21.479]],"v":[[-33.27,7.613],[-32.685,12.667],[-30.453,13.445],[-27.631,12.082],[27.631,12.082],[32.685,12.667],[33.27,7.613]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[34.754,14.151],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":110,"op":130,"st":110,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"w1/robot 2.1 Outlines","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.261,133.5,0],"ix":2},"a":{"a":0,"k":[18.5,9,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[8.6,-10.865],[-1.558,-1.234],[-1.233,1.558],[-5.717,-7.222],[-1.558,1.233],[1.232,1.558]],"o":[[-1.233,1.558],[1.558,1.233],[5.707,-7.21],[1.234,1.558],[1.558,-1.234],[-8.586,-10.848]],"v":[[-16.818,2.289],[-16.23,7.343],[-11.176,6.754],[11.176,6.754],[16.23,7.343],[16.819,2.289]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[18.301,8.826],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":100,"op":130,"st":100,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"white box/robot 2.1 Outlines","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.312,650.5,0],"ix":2},"a":{"a":0,"k":[175.5,126,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[96.65,0],[0,11.556],[0,0],[0,0],[0,0]],"o":[[-96.65,0],[0,0],[0,0],[0,0],[0,11.556]],"v":[[0,-104.616],[-175,-125.538],[-175,125.538],[175,125.538],[175,-125.538]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[175.25,125.789],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":360,"st":0,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"Layer 81/robot 2.1 Outlines","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":80,"s":[0],"e":[120]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":90,"s":[120],"e":[120]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":210,"s":[120],"e":[0]},{"t":220}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[510.087,672.5,0],"e":[510.545,232.5,0],"to":[0.07620303332806,-73.3333358764648,0],"ti":[-0.07620303332806,60,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":30,"s":[510.545,232.5,0],"e":[510.545,312.5,0],"to":[0.07620303332806,-60,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":40,"s":[510.545,312.5,0],"e":[510.545,232.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":50,"s":[510.545,232.5,0],"e":[510.545,312.5,0],"to":[0,0,0],"ti":[0,-8.33333301544189,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":60,"s":[510.545,312.5,0],"e":[510.545,282.5,0],"to":[0,8.33333301544189,0],"ti":[0,5,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":70,"s":[510.545,282.5,0],"e":[510.545,282.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":241,"s":[510.545,282.5,0],"e":[510.545,312.5,0],"to":[0,5,0],"ti":[0,-5,0]},{"t":251}],"ix":2},"a":{"a":0,"k":[28.5,29,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-5.28,0],[0,-5.295],[5.28,0],[0,5.296]],"o":[[5.28,0],[0,5.296],[-5.28,0],[0,-5.295]],"v":[[0,-9.589],[9.56,0],[0,9.589],[-9.56,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.980000035903,0.995999983245,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[20.543,34.04],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-10.157,0],[0,-10.187],[10.157,0],[0,10.188]],"o":[[10.157,0],[0,10.188],[-10.157,0],[0,-10.187]],"v":[[-0.001,-18.447],[18.392,-0.001],[-0.001,18.447],[-18.392,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.187999994615,0.187999994615,0.187999994615,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[29.203,28.56],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[15.569,0],[0,-15.617],[-15.569,0],[0,15.615]],"o":[[-15.569,0],[0,15.615],[15.569,0],[0,-15.617]],"v":[[0,-28.31],[-28.225,0.001],[0,28.31],[28.225,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.349000010771,0.349000010771,0.349000010771,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[28.474,28.56],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":360,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"eye/robot 2.1 Outlines","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[510.387,672.5,0],"e":[510.845,232.5,0],"to":[0.07620303332806,-73.3333358764648,0],"ti":[-0.07620303332806,60,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":30,"s":[510.845,232.5,0],"e":[510.845,312.5,0],"to":[0.07620303332806,-60,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":40,"s":[510.845,312.5,0],"e":[510.845,232.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":50,"s":[510.845,232.5,0],"e":[510.845,312.5,0],"to":[0,0,0],"ti":[0,-13.3333330154419,0]},{"t":60}],"ix":2},"a":{"a":0,"k":[72,72,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[31.958,0],[0,32.054],[-31.957,0],[0,-32.054]],"o":[[-31.957,0],[0,-32.054],[31.958,0],[0,32.054]],"v":[[0,58.171],[-57.997,0],[0,-58.171],[57.997,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.980000035903,0.995999983245,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5.471,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[71.674,71.848],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,30.866],[-30.318,1.918],[1.183,0],[0,-32.054],[-31.957,0],[-1.183,0]],"o":[[0,-30.866],[-1.183,-0.091],[-31.957,0],[0,32.054],[1.183,0],[-30.318,-1.917]],"v":[[-23.535,0],[30.82,-58.08],[27.178,-58.171],[-30.82,0],[27.178,58.171],[30.82,58.079]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.917999985639,0.917999985639,0.917999985639,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[44.497,71.849],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":360,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"Robot/robot 2.1 Outlines","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[510.384,692.5,0],"e":[510.732,252.5,0],"to":[0.05790242180228,-73.3333358764648,0],"ti":[-0.05790242180228,60,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":30,"s":[510.732,252.5,0],"e":[510.732,332.5,0],"to":[0.05790242180228,-60,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":40,"s":[510.732,332.5,0],"e":[510.732,252.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":50,"s":[510.732,252.5,0],"e":[510.732,332.5,0],"to":[0,0,0],"ti":[0,-13.3333330154419,0]},{"t":60}],"ix":2},"a":{"a":0,"k":[164,179,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-11.464,0],[0,-11.499],[11.465,0],[0,11.499]],"o":[[11.465,0],[0,11.499],[-11.464,0],[0,-11.499]],"v":[[0,-20.822],[20.758,-0.001],[0,20.822],[-20.758,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5.471,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[163.177,314.728],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,8.219],[-6.92,3.379],[3.278,0],[0,-11.506],[-11.472,0],[-2.731,1.37]],"o":[[0,-8.219],[-2.731,-1.369],[-11.472,0],[0,11.507],[3.278,0],[-6.92,-3.379]],"v":[[3.277,0],[14.931,-18.721],[5.826,-20.821],[-14.932,0],[5.826,20.821],[14.931,18.721]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.4,0.6,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[157.35,314.728],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-11.464,0],[0,-11.499],[11.465,0],[0,11.499]],"o":[[11.465,0],[0,11.499],[-11.464,0],[0,-11.499]],"v":[[0,-20.822],[20.758,-0.001],[0,20.822],[-20.758,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.54900004069,0.788000009574,0.023999999551,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[163.177,314.728],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[20.758,-13.904],[-20.759,-13.904],[-118.088,-13.904],[-118.088,13.905],[-20.759,13.905],[20.758,13.905],[118.088,13.905],[118.088,-13.904]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4.159,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[163.177,300.955],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[98.534,248.384],[227.795,248.384]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4.78,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[163.743,21.548],[163.743,2.736]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5.471,"ix":5},"lc":2,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[65.19,0],[0,-65.385],[0,0],[-6.555,0],[0,0],[0,6.575],[0,0]],"o":[[-65.189,0],[0,0],[0,6.575],[0,0],[6.556,0],[0,0],[0,-65.386]],"v":[[-0.001,-142.505],[-118.088,-24.063],[-118.088,130.542],[-106.162,142.505],[106.16,142.505],[118.088,130.542],[118.088,-24.154]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5.471,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[163.178,201.672],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[97.128,258.068],[97.128,238.068]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[227.795,258.068],[227.795,238.068]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,6.575],[0,0],[-61.002,4.657],[3.096,0],[0,-65.386],[0,0],[-6.555,0],[0,0]],"o":[[0,0],[0,-62.281],[-3.005,-0.274],[-65.189,0],[0,0],[0,6.575],[0,0],[-6.555,0.091]],"v":[[-45.387,130.588],[-45.387,-24.108],[63.596,-142.186],[54.49,-142.55],[-63.596,-24.108],[-63.596,130.497],[-51.67,142.46],[-33.461,142.46]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.910000011968,0.455000005984,0.039000002543,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[108.686,201.626],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[65.19,0],[0,-65.385],[0,0],[-6.555,0],[0,0],[0,6.575],[0,0]],"o":[[-65.189,0],[0,0],[0,6.575],[0,0],[6.556,0],[0,0],[0,-65.386]],"v":[[-0.001,-142.505],[-118.088,-24.063],[-118.088,130.542],[-106.162,142.505],[106.16,142.505],[118.088,130.542],[118.088,-24.154]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.545000023935,0.090000002992,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[163.178,201.672],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[12.109,0],[0,-10.319],[0,0],[-1.183,0],[0,0],[0,1.097],[0,0]],"o":[[-12.109,0],[0,0],[0,1.005],[0,0],[1.184,0],[0,0],[0,-10.319]],"v":[[0,-22.419],[-21.852,-3.79],[-21.852,20.501],[-19.666,22.419],[19.667,22.419],[21.852,20.501],[21.852,-3.79]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5.471,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[163.177,44.784],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,1.005],[0,0],[-10.288,1.461],[1.275,0],[0,-10.319],[0,0],[-1.183,0],[0,0]],"o":[[0,0],[0,-9.223],[-1.183,-0.183],[-12.109,0],[0,0],[0,1.005],[0,0],[-1.184,-0.091]],"v":[[-5.462,20.501],[-5.462,-3.79],[12.746,-22.145],[9.104,-22.419],[-12.747,-3.79],[-12.747,20.501],[-10.562,22.419],[-3.277,22.419]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.910000011968,0.455000005984,0.039000002543,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[154.072,44.784],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":2,"cix":2,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[12.109,0],[0,-10.319],[0,0],[-1.183,0],[0,0],[0,1.097],[0,0]],"o":[[-12.109,0],[0,0],[0,1.005],[0,0],[1.184,0],[0,0],[0,-10.319]],"v":[[0,-22.419],[-21.852,-3.79],[-21.852,20.501],[-19.666,22.419],[19.667,22.419],[21.852,20.501],[21.852,-3.79]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.545000023935,0.090000002992,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[163.177,44.784],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":2,"cix":2,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[10.015,0],[0,0],[0,10.045],[0,0],[-10.015,0],[0,0],[0,-10.045],[0,0]],"o":[[0,0],[-10.015,0],[0,0],[0,-10.045],[0,0],[10.015,0],[0,0],[0,10.045]],"v":[[7.785,30.455],[-7.784,30.455],[-25.994,12.191],[-25.994,-12.191],[-7.784,-30.455],[7.785,-30.455],[25.994,-12.191],[25.994,12.191]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5.471,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[39.671,228.977],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":2,"cix":2,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[10.015,0],[0,0],[0,10.045],[0,0],[-10.015,0],[0,0],[0,-10.045],[0,0]],"o":[[0,0],[-10.015,0],[0,0],[0,-10.045],[0,0],[10.015,0],[0,0],[0,10.045]],"v":[[7.785,30.455],[-7.784,30.455],[-25.993,12.191],[-25.993,-12.191],[-7.784,-30.455],[7.785,-30.455],[25.993,-12.191],[25.993,12.191]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.313999998803,0.313999998803,0.313999998803,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5.471,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[287.684,228.977],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":2,"cix":2,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-3.505,-30.455],[3.505,-30.455],[3.505,30.456],[-3.505,30.456]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.910000011968,0.455000005984,0.039000002543,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[287.502,229.068],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":2,"cix":2,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-3.506,-30.455],[3.506,-30.455],[3.506,30.456],[-3.506,30.456]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.910000011968,0.455000005984,0.039000002543,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[38.943,229.068],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":2,"cix":2,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[10.015,0],[0,0],[0,10.045],[0,0],[-10.015,0],[0,0],[0,-10.045],[0,0]],"o":[[0,0],[-10.015,0],[0,0],[0,-10.045],[0,0],[10.015,0],[0,0],[0,10.045]],"v":[[7.785,30.455],[-7.784,30.455],[-25.994,12.191],[-25.994,-12.191],[-7.784,-30.455],[7.785,-30.455],[25.994,-12.191],[25.994,12.191]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.545000023935,0.090000002992,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[39.671,228.977],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":2,"cix":2,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[10.015,0],[0,0],[0,10.045],[0,0],[-10.015,0],[0,0],[0,-10.045],[0,0]],"o":[[0,0],[-10.015,0],[0,0],[0,-10.045],[0,0],[10.015,0],[0,0],[0,10.045]],"v":[[7.785,30.455],[-7.784,30.455],[-25.993,12.191],[-25.993,-12.191],[-7.784,-30.455],[7.785,-30.455],[25.993,-12.191],[25.993,12.191]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.545000023935,0.090000002992,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[287.684,228.977],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":2,"cix":2,"ix":20,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":360,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"black hole/robot 2.1 Outlines","cl":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510.312,526.5,0],"ix":2},"a":{"a":0,"k":[175.5,21.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-11.542],[96.649,0],[0,11.542],[-96.65,0]],"o":[[0,11.542],[-96.65,0],[0,-11.542],[96.649,0]],"v":[[175,0.001],[0,20.898],[-175,0.001],[0,-20.898]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.588000009574,0.588000009574,0.588000009574,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[175.25,21.147],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":360,"st":0,"bm":0}],"markers":[],"chars":[{"ch":"S","size":36,"style":"Regular","w":59.33,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.441,-1.904],[0,-3.483],[2.637,-2.018],[4.948,0],[3.174,2.49],[0,4.297],[0,0],[-2.295,-3.255],[-4.232,-1.871],[-4.883,0],[-4.492,3.467],[0,5.762],[1.611,2.67],[3.336,2.002],[5.908,1.663],[2.457,2.006],[0,2.903],[-2.588,2.039],[-4.623,0],[-2.734,-2.466],[0,-4.312],[0,0],[2.1,3.32],[3.825,1.888],[4.883,0],[4.475,-3.662],[0,-5.598],[-3.662,-3.369],[-8.041,-2.311]],"o":[[2.441,1.904],[0,3.484],[-2.637,2.019],[-5.306,0],[-3.174,-2.49],[0,0],[0,4.134],[2.295,3.255],[4.231,1.871],[7.52,0],[4.492,-3.467],[0,-3.613],[-1.611,-2.669],[-3.337,-2.002],[-5.908,-1.663],[-2.458,-2.005],[0,-3.619],[2.588,-2.039],[4.98,0],[2.734,2.467],[0,0],[0,-3.938],[-2.1,-3.32],[-3.825,-1.888],[-7.162,0],[-4.476,3.662],[0,4.948],[3.662,3.369],[6.413,1.855]],"v":[[42.48,-26.05],[46.143,-17.969],[42.188,-9.717],[30.811,-6.689],[18.091,-10.425],[13.33,-20.605],[3.906,-20.605],[7.349,-9.521],[17.139,-1.831],[30.811,0.977],[48.828,-4.224],[55.566,-18.066],[53.149,-27.49],[45.728,-34.497],[31.86,-39.995],[19.312,-45.498],[15.625,-52.86],[19.507,-61.346],[30.322,-64.404],[41.895,-60.705],[45.996,-50.537],[55.42,-50.537],[52.271,-61.426],[43.384,-69.238],[30.322,-72.07],[12.866,-66.577],[6.152,-52.686],[11.646,-40.21],[29.199,-31.689]],"c":true},"ix":2},"nm":"S","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"S","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"e","size":36,"style":"Regular","w":52.98,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-4.427,6.804],[0,0],[2.213,-1.302],[3.19,0],[2.913,3.207],[0.13,5.209],[0,0],[0,0],[3.809,4.525],[6.868,0],[3.596,-2.327],[2.002,-4.118],[0,-5.241],[0,0],[-4.492,-4.704],[-7.162,0]],"o":[[0,0],[-1.66,2.148],[-2.214,1.302],[-4.492,0],[-2.914,-3.206],[0,0],[0,0],[0,-8.43],[-3.809,-4.524],[-4.199,0],[-3.597,2.328],[-2.002,4.118],[0,0],[0,7.878],[4.492,4.704],[8.854,0]],"v":[[48.682,-9.229],[43.164,-13.525],[37.354,-8.35],[29.248,-6.396],[18.14,-11.206],[13.574,-23.828],[49.365,-23.828],[49.365,-27.588],[43.652,-47.021],[27.637,-53.809],[15.942,-50.317],[7.544,-40.649],[4.541,-26.611],[4.541,-24.951],[11.279,-6.079],[28.76,0.977]],"c":true},"ix":2},"nm":"e","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-2.214,-2.522],[-0.261,-4.59],[0,0],[0,0],[-2.474,2.654],[-3.646,0]],"o":[[2.213,2.523],[0,0],[0,0],[0.586,-4.785],[2.473,-2.653],[3.776,0]],"v":[[36.621,-42.603],[40.332,-31.934],[40.332,-31.25],[13.867,-31.25],[18.457,-42.407],[27.637,-46.387]],"c":true},"ix":2},"nm":"e","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"e","np":5,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"a","size":36,"style":"Regular","w":54.39,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,4.851],[0,0],[3.45,3.044],[6.087,0],[3.206,-1.432],[1.871,-2.457],[0,-2.637],[0,0],[-2.181,1.628],[-3.223,0],[-1.888,-1.871],[0,-3.157],[0,0],[0,0],[4.182,-3.043],[0,-5.501],[-3.337,-2.946],[-5.209,0],[-4.199,4.362],[-0.521,-1.041]],"o":[[0,0],[-1.237,-2.864],[0,0],[-0.13,-5.338],[-3.451,-3.043],[-3.841,0],[-3.207,1.433],[-1.872,2.458],[0,0],[0,-2.311],[2.18,-1.627],[3.678,0],[1.888,1.872],[0,0],[0,0],[-7.585,0],[-4.183,3.044],[0,4.525],[3.336,2.946],[5.827,0],[0.325,2.67],[0,0]],"v":[[48.926,0],[48.926,-0.781],[47.07,-12.354],[47.07,-36.67],[41.699,-49.243],[27.393,-53.809],[16.821,-51.66],[9.204,-45.825],[6.396,-38.184],[15.479,-38.184],[18.75,-44.092],[26.855,-46.533],[35.205,-43.726],[38.037,-36.182],[38.037,-32.031],[29.248,-32.031],[11.597,-27.466],[5.322,-14.648],[10.327,-3.442],[23.145,0.977],[38.184,-5.566],[39.453,0]],"c":true},"ix":2},"nm":"a","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[1.888,1.595],[0,2.832],[-11.068,0],[0,0],[0,0],[2.539,-1.465],[2.832,0]],"o":[[-1.888,-1.595],[0,-6.477],[0,0],[0,0],[-1.14,2.344],[-2.539,1.465],[-2.962,0]],"v":[[17.188,-9.277],[14.355,-15.918],[30.957,-25.635],[38.037,-25.635],[38.037,-14.795],[32.52,-9.082],[24.463,-6.885]],"c":true},"ix":2},"nm":"a","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"a","np":5,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"r","size":36,"style":"Regular","w":33.84,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.758,0],[2.962,-4.72],[0,0],[0,0],[0,0],[0,0],[0,0],[-5.925,0],[-1.367,-0.227]],"o":[[-0.912,-0.455],[-5.437,0],[0,0],[0,0],[0,0],[0,0],[0,0],[2.116,-5.045],[1.595,0],[0,0]],"v":[[32.373,-53.125],[28.369,-53.809],[15.771,-46.729],[15.625,-52.832],[6.836,-52.832],[6.836,0],[15.869,0],[15.869,-37.5],[27.93,-45.068],[32.373,-44.727]],"c":true},"ix":2},"nm":"r","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"r","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"c","size":36,"style":"Regular","w":52.34,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.506,3.288],[0,6.087],[0,0],[-2.523,3.304],[-4.59,0],[-2.328,-2.197],[-0.261,-3.418],[0,0],[3.922,3.548],[5.924,0],[3.532,-2.213],[1.888,-4.004],[0,-5.143],[0,0],[-4.248,-4.801],[-7.195,0],[-3.207,1.627],[-1.921,2.734],[-0.163,3.027],[0,0],[2.409,-1.953],[3.223,0]],"o":[[-2.507,-3.288],[0,0],[0,-6.25],[2.522,-3.304],[3.418,0],[2.327,2.197],[0,0],[-0.261,-5.664],[-3.923,-3.548],[-4.818,0],[-3.532,2.214],[-1.888,4.004],[0,0],[0,8.334],[4.248,4.802],[3.58,0],[3.206,-1.627],[1.92,-2.734],[0,0],[-0.261,2.93],[-2.409,1.953],[-4.655,0]],"v":[[17.285,-11.328],[13.525,-25.391],[13.525,-27.1],[17.31,-41.431],[27.979,-46.387],[36.597,-43.091],[40.479,-34.668],[49.023,-34.668],[42.749,-48.486],[27.979,-53.809],[15.454,-50.488],[7.324,-41.162],[4.492,-27.441],[4.492,-25.928],[10.864,-6.226],[28.027,0.977],[38.208,-1.465],[45.898,-8.008],[49.023,-16.65],[40.479,-16.65],[36.475,-9.326],[28.027,-6.396]],"c":true},"ix":2},"nm":"c","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"c","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"h","size":36,"style":"Regular","w":55.08,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[-2.214,1.563],[-2.93,0],[-1.709,-1.823],[-0.033,-3.809],[0,0],[0,0],[0,0],[11.165,0],[4.004,-4.915]],"o":[[0,0],[0,0],[0,0],[0,0],[1.237,-2.539],[2.213,-1.563],[3.613,0],[1.709,1.823],[0,0],[0,0],[0,0],[-0.098,-12.598],[-6.413,0],[0,0]],"v":[[15.869,-75],[6.836,-75],[6.836,0],[15.869,0],[15.869,-37.646],[21.045,-43.799],[28.76,-46.143],[36.743,-43.408],[39.355,-34.961],[39.355,0],[48.389,0],[48.389,-34.912],[31.494,-53.809],[15.869,-46.436]],"c":true},"ix":2},"nm":"h","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"h","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"i","size":36,"style":"Regular","w":24.27,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[16.65,-52.832],[7.617,-52.832],[7.617,0],[16.65,0]],"c":true},"ix":2},"nm":"i","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-0.896,-0.977],[-1.758,0],[-0.912,0.977],[0,1.465],[0.911,1.009],[1.758,0],[0.895,-1.009],[0,-1.465]],"o":[[0.895,0.977],[1.758,0],[0.911,-0.977],[0,-1.465],[-0.912,-1.009],[-1.758,0],[-0.896,1.009],[0,1.465]],"v":[[8.228,-63.184],[12.207,-61.719],[16.211,-63.184],[17.578,-66.846],[16.211,-70.557],[12.207,-72.07],[8.228,-70.557],[6.885,-66.846]],"c":true},"ix":2},"nm":"i","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"i","np":5,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"n","size":36,"style":"Regular","w":55.18,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[-2.214,1.563],[-2.93,0],[-1.709,-1.823],[-0.033,-3.809],[0,0],[0,0],[0,0],[11.165,0],[4.036,-5.078],[0,0]],"o":[[0,0],[0,0],[0,0],[1.237,-2.539],[2.213,-1.563],[3.613,0],[1.709,1.823],[0,0],[0,0],[0,0],[-0.098,-12.598],[-6.511,0],[0,0],[0,0]],"v":[[6.836,-52.832],[6.836,0],[15.869,0],[15.869,-37.646],[21.045,-43.799],[28.76,-46.143],[36.743,-43.408],[39.355,-34.961],[39.355,0],[48.389,0],[48.389,-34.912],[31.494,-53.809],[15.674,-46.191],[15.381,-52.832]],"c":true},"ix":2},"nm":"n","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"n","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"g","size":36,"style":"Regular","w":56.1,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.825,-4.98],[-6.185,0],[-3.613,4.167],[0,0],[2.457,-2.474],[4.395,0],[3.873,4.785],[0,0],[-3.646,-1.628],[-3.809,0],[-4.053,3.938],[0,6.836],[0,0],[0,0],[0,0],[6.445,0],[3.809,-4.866],[0,-8.235]],"o":[[3.825,4.98],[6.25,0],[0,0],[0,4.492],[-2.458,2.473],[-5.599,0],[0,0],[1.92,2.832],[3.645,1.627],[6.836,0],[4.053,-3.939],[0,0],[0,0],[0,0],[-3.613,-4.557],[-6.283,0],[-3.809,4.867],[0,8.594]],"v":[[10.425,-6.494],[25.439,0.977],[40.234,-5.273],[40.234,-0.732],[36.548,9.717],[26.27,13.428],[12.061,6.25],[7.373,11.67],[15.723,18.359],[26.904,20.801],[43.237,14.893],[49.316,-1.27],[49.316,-52.832],[41.064,-52.832],[40.625,-46.973],[25.537,-53.809],[10.4,-46.509],[4.688,-26.855]],"c":true},"ix":2},"nm":"g","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-2.474,3.418],[-4.395,0],[-2.767,-5.045],[0,0],[5.696,0],[2.441,3.402],[0,5.957]],"o":[[2.473,-3.418],[5.534,0],[0,0],[-2.67,5.176],[-4.395,0],[-2.441,-3.401],[0,-6.705]],"v":[[17.48,-41.016],[27.783,-46.143],[40.234,-38.574],[40.234,-14.453],[27.686,-6.689],[17.432,-11.792],[13.77,-25.83]],"c":true},"ix":2},"nm":"g","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"g","np":5,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":" ","size":36,"style":"Regular","w":24.76,"data":{},"fFamily":"Roboto"},{"ch":"N","size":36,"style":"Regular","w":71.29,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[62.891,-71.094],[53.564,-71.094],[53.564,-16.064],[17.676,-71.094],[8.252,-71.094],[8.252,0],[17.676,0],[17.676,-54.785],[53.467,0],[62.891,0]],"c":true},"ix":2},"nm":"N","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"N","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"t","size":36,"style":"Regular","w":32.67,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.051,-2.441],[-4.037,0],[-2.377,0.647],[0,0],[1.041,0],[0.879,1.059],[0,2.119],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,4.492],[2.051,2.441],[2.246,0],[0,0],[-1.823,0.391],[-2.116,0],[-0.879,-1.059],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.059,-65.625],[10.059,-52.832],[0.439,-52.832],[0.439,-45.85],[10.059,-45.85],[10.059,-13.086],[13.135,-2.686],[22.266,0.977],[29.199,0.006],[29.199,-7.275],[24.902,-6.689],[20.41,-8.278],[19.092,-13.045],[19.092,-45.85],[28.955,-45.85],[28.955,-52.832],[19.092,-52.832],[19.092,-65.625]],"c":true},"ix":2},"nm":"t","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"t","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"w","size":36,"style":"Regular","w":75.15,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[41.064,-52.832],[33.789,-52.832],[21.484,-13.281],[11.084,-52.832],[2.1,-52.832],[17.432,0],[24.756,0],[37.256,-40.039],[50.098,0],[57.422,0],[72.803,-52.832],[63.77,-52.832],[53.613,-12.451]],"c":true},"ix":2},"nm":"w","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"w","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"o","size":36,"style":"Regular","w":57.03,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-4.443,-4.98],[-7.162,0],[-3.662,2.279],[-1.97,4.086],[0,5.144],[0,0],[4.443,4.98],[7.194,0],[3.629,-2.246],[2.034,-4.134],[0,-5.176]],"o":[[0,8.203],[4.443,4.98],[4.752,0],[3.662,-2.278],[1.969,-4.085],[0,0],[0,-8.268],[-4.443,-4.98],[-4.655,0],[-3.63,2.246],[-2.035,4.134],[0,0]],"v":[[4.443,-26.27],[11.108,-6.494],[28.516,0.977],[41.138,-2.441],[49.585,-11.987],[52.539,-25.83],[52.539,-26.465],[45.874,-46.338],[28.418,-53.809],[15.991,-50.439],[7.495,-40.869],[4.443,-26.904]],"c":true},"ix":2},"nm":"o","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-2.734,3.548],[-4.46,0],[-2.751,-3.596],[0,-5.794],[2.702,-3.596],[4.59,0],[2.718,3.548],[0,5.859]],"o":[[2.734,-3.548],[4.557,0],[2.75,3.597],[0,6.478],[-2.702,3.597],[-4.558,0],[-2.718,-3.548],[0,-6.608]],"v":[[17.627,-41.064],[28.418,-46.387],[39.38,-40.991],[43.506,-26.904],[39.453,-11.792],[28.516,-6.396],[17.603,-11.719],[13.525,-25.83]],"c":true},"ix":2},"nm":"o","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"o","np":5,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"k","size":36,"style":"Regular","w":50.68,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[39.99,0],[50.586,0],[27.637,-30.762],[48.193,-52.832],[37.207,-52.832],[20.752,-35.449],[15.918,-29.639],[15.918,-75],[6.885,-75],[6.885,0],[15.918,0],[15.918,-18.555],[21.582,-24.463]],"c":true},"ix":2},"nm":"k","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"k","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":".","size":36,"style":"Regular","w":26.32,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.928,-1.009],[-1.855,0],[-0.961,1.009],[0,1.498],[0.96,1.042],[1.855,0],[0.928,-1.041],[0,-1.563]],"o":[[0.928,1.009],[1.855,0],[0.96,-1.009],[0,-1.563],[-0.961,-1.041],[-1.855,0],[-0.928,1.042],[0,1.498]],"v":[[8.423,-0.977],[12.598,0.537],[16.821,-0.977],[18.262,-4.736],[16.821,-8.643],[12.598,-10.205],[8.423,-8.643],[7.031,-4.736]],"c":true},"ix":2},"nm":".","mn":"ADBE Vector Shape - Group","hd":false}],"nm":".","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"W","size":36,"style":"Regular","w":88.72,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[12.354,-71.094],[2.979,-71.094],[20.166,0],[28.711,0],[43.896,-51.807],[45.02,-57.227],[46.143,-51.807],[60.791,0],[69.336,0],[86.572,-71.094],[77.148,-71.094],[66.113,-22.461],[64.6,-12.891],[62.646,-21.484],[48.926,-71.094],[41.016,-71.094],[26.953,-21.484],[24.951,-13.037],[23.584,-22.412]],"c":true},"ix":2},"nm":"W","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"W","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"?","size":36,"style":"Regular","w":14.75,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.579,3.239],[-0.033,3.255],[0,0],[0,0],[0,0],[3.027,-4.231],[0,0]],"o":[[1.579,-3.239],[0,0],[0,0],[0,0],[-0.098,4.688],[0,0],[2.473,-1.985]],"v":[[13.55,-58.911],[15.967,-68.652],[15.967,-75],[7.031,-75],[7.031,-67.969],[2.344,-54.59],[7.471,-51.074]],"c":true},"ix":2},"nm":"?","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"?","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"y","size":36,"style":"Regular","w":47.31,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[1.709,-1.237],[3.059,0],[0,0],[0,0],[0,0],[0,0],[-3.288,8.789],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-1.107,3.288],[-1.709,1.237],[0,0],[0,0],[0,0],[0,0],[7.161,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.938,-52.832],[1.074,-52.832],[19.922,-0.586],[17.92,4.785],[13.696,11.572],[6.543,13.428],[4.102,13.232],[4.102,20.557],[7.471,21.191],[9.18,21.338],[24.854,8.154],[46.094,-52.832],[36.426,-52.832],[24.121,-13.232]],"c":true},"ix":2},"nm":"y","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"y","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"u","size":36,"style":"Regular","w":55.13,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[6.901,0],[0,8.008],[0,0],[0,0],[0,0],[-2.946,-3.271],[-5.632,0],[-3.516,4.134]],"o":[[0,0],[0,0],[0,0],[0,0],[-2.279,5.144],[-6.511,0],[0,0],[0,0],[0,0],[0.032,6.413],[2.946,3.271],[6.803,0],[0,0]],"v":[[39.648,0],[48.242,0],[48.242,-52.832],[39.209,-52.832],[39.209,-14.404],[25.439,-6.689],[15.674,-18.701],[15.674,-52.832],[6.641,-52.832],[6.641,-18.457],[11.108,-3.931],[23.975,0.977],[39.453,-5.225]],"c":true},"ix":2},"nm":"u","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"u","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"l","size":36,"style":"Regular","w":24.27,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[16.65,-75],[7.617,-75],[7.617,0],[16.65,0]],"c":true},"ix":2},"nm":"l","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"l","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"},{"ch":"d","size":36,"style":"Regular","w":56.4,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-3.857,-5.013],[-6.12,0],[-3.613,4.427],[0,0],[0,0],[0,0],[0,0],[0,0],[6.184,0],[3.841,-4.932],[0,-8.105]],"o":[[0,8.073],[3.857,5.013],[6.445,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.613,-4.231],[-6.218,0],[-3.841,4.932],[0,0]],"v":[[4.639,-26.172],[10.425,-6.543],[25.391,0.977],[40.479,-5.664],[40.918,0],[49.219,0],[49.219,-75],[40.186,-75],[40.186,-47.461],[25.488,-53.809],[10.4,-46.411],[4.639,-26.855]],"c":true},"ix":2},"nm":"d","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-2.474,3.418],[-4.427,0],[-2.702,-4.98],[0,0],[5.729,0],[2.473,3.386],[0,5.99]],"o":[[2.473,-3.418],[5.598,0],[0,0],[-2.637,5.144],[-4.362,0],[-2.474,-3.385],[0,-6.705]],"v":[[17.383,-41.016],[27.734,-46.143],[40.186,-38.672],[40.186,-14.404],[27.637,-6.689],[17.383,-11.768],[13.672,-25.83]],"c":true},"ix":2},"nm":"d","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"d","np":5,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Roboto"}]}

3.2.5. resources

3.2.5.1. resources/views/create.blade.php

The form for adding a new todo.

@extends('master')

@section('content')

  {{-- Display the name of the connected user --}}
  <div class="panel-heading">Hi {{ Auth::user()->name }}, please add your new Todo below</div>  

  <div class="panel-body">   

    {{-- 
      Messages sent by the controller like in
        return view('...')->with('message', '<div class="...">success</div>'))
      will be displayed here
    --}}
    @if(Session::has('message'))
      {!! Session::get('message') !!}
    @endif

    {!! Form::open(['route' => 'todos.store']) !!}

    <div class="form-group {!! $errors->has('todo') ? 'has-error' : '' !!}"> 
        {{--
          Output the "Title" entry.
        --}}
        {!! Form::text('title', '', array('size' => '100', 'class' => 'form-control', 'placeholder' => 'Enter Todo\'s title')) !!}
        {!! $errors->first('title', '<div class="alert alert-danger">:message</div>') !!}
      </div>

      <div class="form-group">
        {{--
          Output the "Completed" flag.
        --}}      
        {!! Form::checkbox('completed', 1, 0)  !!}
        {!! Form::label('completed', 'Completed'); !!}
      </div>

      <div class="form-group {!! $errors->has('todo') ? 'has-error' : '' !!}">
        {{--
          Output the "Description" textarea.
        --}}
        {!! Form::label('description', 'Description (optional)'); !!}
        {!! Form::textarea('description', '', array('class' => 'form-control')) !!}
      </div>

      {{--
        Output the submit button
      --}}
      {!! Form::submit('Submit !', array('class' => 'btn btn-sm btn-primary')) !!}

      <a href="javascript:location.href='{{ route('todos.index') }}'" class="btn btn-sm btn-success">
        <span class="glyphicon glyphicon-circle-arrow-left"></span> Back
      </a> 
    {!! Form::close() !!}
  </div>
@endsection

@section('navigation')
@endsection
3.2.5.2. resources/views/edit.blade.php

The form for the edition of an existing todo.

@extends('master')

@section('content')

  <div class="panel-heading">Need to edit a Todo?</div>  

  <div class="panel-body">   

    {{-- 
      Messages sent by the controller like in
        return view('...')->with('message', '<div class="...">success</div>'))
      will be displayed here
    --}}
    @if(Session::has('message'))
      {!! Session::get('message') !!}
    @endif

    {!! Form::model($data, ['route' => ['todos.update', $data->id], 'method' => 'PUT']) !!}

      <div class="form-group {!! $errors->has('todo') ? 'has-error' : '' !!}"> 
        {{--
          Output the "Title" entry.
        --}}
        {!! Form::text('title', null, array('size' => '100', 'class' => 'form-control', 'placeholder' => 'Enter Todo\'s title')) !!}
        {!! $errors->first('title', '<div class="alert alert-danger">:message</div>') !!}
      </div>

      <div class="form-group">
        {{--
          Output the "Completed" flag.
        --}}      
        {!! Form::checkbox('completed', 1, null)  !!}
        {!! Form::label('completed', 'Completed'); !!}
      </div>

      <div class="form-group {!! $errors->has('todo') ? 'has-error' : '' !!}">
        {{--
          Output the "Description" textarea.
        --}}      
        {!! Form::label('description', 'Description (optional)'); !!}
        {!! Form::textarea('description', null, array('class' => 'form-control')) !!}
      </div>

      {{--
        Output the submit button
      --}}      
      {!! Form::submit('Submit !', array('class'=> 'btn btn-sm btn-primary')) !!}

      @include('buttons.back')

      {!! Form::close() !!}
  </div>
@endsection

@section('navigation')  
@endsection
3.2.5.3. resources/views/index.blade.php

Display the list of todos, like in a blog.

@extends('master')

@section('content')

    @if(session()->has('ok'))
    <div class="alert alert-success alert-dismissible">{!! session('ok') !!}</div>
  @endif

  {{--
    $data is a collection of records
  --}}
  @isset($datas)
    {{--
      For each todo, we'll show his title in a H3
      Clicking on the title will display the todo's details
      We'll also show: todo's description and his author.
    --}}
    @foreach($datas as $data)
      <h3><a href="{{ route('todos.show', ['id' => $data->id]) }}">#{{ $loop->iteration. " - " . $data->title }}</a></h3>

      <div style="padding:5px 0 15px 0;">
        @include('buttons.show')
        @auth 
          @include('buttons.edit')
          @include('buttons.delete')
        @endauth 
      </div>
      <p>{{ $data->description }}</p>
      <small>Author: {{ $data->user->name }}</small>
      <hr/>
    @endforeach
    <small>Number of todos: {{ count($datas) }}</small>
  @endisset
@endsection

@section('navigation')
  {{ $links }}
  <hr/>
  @include('buttons.add')

@endsection
3.2.5.4. resources/views/master.blade.php

Our page’s master. Defines how pages should looks like.

<!DOCTYPE html>
<html lang="{{ app()->getLocale() }}">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  {{--
    Important for our Ajax requests: we need to protect our server's requests
    with the generated session token
  --}}
  <meta name="csrf-token" content="{{ csrf_token() }}">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Some stupid Todos application</title>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">
  <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
  <style>
    textarea { max-height:150px; }
  </style>
</head>
<body>
  @include('navbar') 
  <main role="main">  
    <div class="jumbotron">
      <div class="container">
        <h1 class="display-3">Some stupid Todos application</h1>
        <small>A simple Laravel application, learning purposes</small>
      </div>
    </div>
  </main>
  <div class="container">
    @yield('content')
    <hr/>
    @yield('navigation')
  </div>
  @yield('script')
</body>
</html>
3.2.5.5. resources/views/show.blade.php

Show the detail of a todo. If a valid user is logged-in, display action’s buttons.

@extends('master')

@section('content')

<?php
  if (Session::has('message')) {
    $alert = '<div class="alert alert-%s alert-dismissible ' .
    'fade show" role="alert">%s' .
      '<button type="button" class="close" data-dismiss="alert" ' .
      'aria-label="Close"><span aria-hidden="true">&times;</span> ' .
      '</button></div>';

    foreach (Session::get('message') as $msg) {
        echo sprintf($alert, $msg['type'], $msg['message']);
    }
  }
?>

  {{-- 
    Display the detail of a todo; make sure we've one
  --}}
  @isset($data)
    {{-- 
      Show information's like title, description and timestamps
    --}}
    <h3>{{ $data->title }}</h3>
    <p>{{ $data->description }}</p>
    <small>
      Created at: {{ $data->created_at }}
      <br/>
      Last updated: {{ $data->updated_at }}
      <br/>

      {{--
        $data->user isn't a column but, in our model, the user() function
        returns an object which represent a record of the users table.
        So, through $data->user we can access to the user's name, email, ...
      --}}
      Author: {{ $data->user->name }}
    </small>

  @endisset

@endsection

@section('navigation')
  @include('buttons.back')
  @auth 
    <span class="buttons">
      @include('buttons.edit')
      @include('buttons.delete')
    </span>
  @endauth
@endsection

@section('script')
{{--
  Add our script for our buttons
--}}
<script defer="defer">
  $('.delete, .edit').click(function(){

    if ($(this).hasClass('delete')) {

      // Add the csrf-token protection but only when the request is 
      // made on the same site (no cross-domain). 
      // Don't share the token outside
      $.ajaxSetup({
        beforeSend: function(xhr, type) {
          if (!type.crossDomain) {
              xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'));
          }
        }
      });

      // By clicking on the delete button, make an Ajax request
      $.ajax({
        url: '{{ route('todos.destroy', $data->id) }}',
        type: 'DELETE',
        contentType: 'application/json',
        success: function (data) {
          if (data.hasOwnProperty("message")) {
            // Show the message
            $('.msg').html(data.message).removeClass('hide');
            // And remove buttons.
            $('.buttons').remove();
            // The back button should refresh the page so don't 
            // use history.back() anymore
            $('.back').attr("href", "{{ route('todos.index') }}");
          }
        },
        error: function (data, textStatus, errorThrown) {
          console.log(data);
        }
      });
    } else {
      // The user has clicked on the edit button, redirect the browser
      // to the edit page
      window.location.replace('{{ route('todos.edit', ['id' => $data->id]) }}');
    }
});
</script>
@endsection
3.2.5.6. resources/views/errors/404.blade.php

The 404 error page.

@extends('master')

@section('content')
<div class="container">
  <div class="row">
    <div class="col-sm">
     <div class="panel-heading">
                <h3 class="panel-title">Houston, we have a problem!</h3>
            </div>
            <div class="panel-body"> 
                <p>Oups... nothing here</p>             
                <a href="{{ route('todos.index') }}" class="back btn btn-sm btn-success">
                    <i class="far fa-hand-point-left"></i> Back
                </a>
            </div>
    </div>
    <div class="col-sm">
     <div id="lottie" style="height:250px;" />
    </div>
  </div>
</div>
@endsection

@section('script')
<script src="https://cdnjs.cloudflare.com/ajax/libs/bodymovin/4.13.0/bodymovin.min.js" type="text/javascript"></script>
    <script>
        var animation = bodymovin.loadAnimation({
            container: document.getElementById('lottie'),
            autoplay: true,
            path: 'images/errors/error_404_data.json', // https://www.lottiefiles.com/1408-network-lost
            renderer: 'svg',
            loop: true
        })
    </script>
@endsection
3.2.5.7. resources/views/buttons/add.blade.php

Add a new item button.

<button type="submit" class="btn btn-sm btn-primary" 
  onclick="location.href='{{ route('todos.create') }}'">
  <i class="far fa-plus-square"></i> Add new item
</button>
3.2.5.8. resources/views/buttons/back.blade.php

Go back button.

<a href="javascript:history.back()" class="back btn btn-sm btn-success">
    <i class="far fa-hand-point-left"></i> Back
</a>
3.2.5.9. resources/views/buttons/delete.blade.php

Delete an item button.

{!! Form::open(['method' => 'DELETE', 'route' => ['todos.destroy', $data->id], 'style' => 'display:inline']) !!}

<button type="submit" class="btn btn-sm btn-danger delete" onclick="return confirm('Remove this record?')">
    <i class="far fa-trash-alt"></i> Delete
</button>

{!! Form::close() !!}
3.2.5.10. resources/views/buttons/edit.blade.php

Edit an existing item button.

<button type="submit" class="btn btn-sm btn-primary" 
    onclick="location.href='{{ route('todos.edit', ['id' => $data->id]) }}'">
    <i class="far fa-edit"></i> Edit
</button>
3.2.5.11. resources/views/buttons/show.blade.php

Show button, go to the detail page.

<button type="submit" class="btn btn-sm btn-success" 
    onclick="location.href='{{ route('todos.show', ['id' => $data->id]) }}'">
    <i class="far fa-eye"></i> Show
</button>

3.2.6. routes

3.2.6.1. routes/web.php

Definition of our routes and how to manage them.

<?php
/*
if (env('APP_DEBUG', false)) {
    DB::listen(function ($query) {
        echo '<pre class="app_debug">' .
        'Query fired ' .
        '"' . $query->sql . '" ' .
        '<small>(' . __FILE__ . ' - ' . __LINE__ . ')</small>' .
        '</pre>';
    });
}
*/
// Enable authentication routes
Auth::routes();

// Register http://127.0.0.1:8000/login and display the login screen
Route::get('home', 'HomeController@index')->name('home');

// Register the http://127.0.0.1:8000/logout and logout
Route::get('logout', ['as' => 'logout', 'uses' => 'Auth\LoginController@logout']);

// -------------------

// Attach the controller to every actions (GET, HEAD, POST, DELETE, ...)
// for the "todos" resource. Use "php artisan route:list" to retrieve all
// routes created by this Route::resource() statement.
Route::resource('todos', 'TodoController');

// Default homepage : show the list of todos
Route::get('/', 'TodoController@index');

// Enable authentication routes
Auth::routes();

// Register http://127.0.0.1:8000/login and display the login screen
Route::get('home', 'HomeController@index')->name('home');

// Register the http://127.0.0.1:8000/logout and logout
Route::get('logout', ['as' => 'logout', 'uses' => 'Auth\LoginController@logout']);

// -------------------

// Attach the controller to every actions (GET, HEAD, POST, DELETE, ...)
// for the "todos" resource. Use "php artisan route:list" to retrieve all
// routes created by this Route::resource() statement.
Route::resource('todos', 'TodoController');

// Default homepage : show the list of todos
Route::get('/', 'TodoController@index');

// Only when debugging
if (env('APP_DEBUG', false)) {
    // Get access to the Laravel log files
    Route::get('logs', '\Rap2hpoutre\LaravelLogViewer\LogViewerController@index');
    // Get access to informations about the system and installed packages
    Route::get('decompose', '\Lubusin\Decomposer\Controllers\DecomposerController@index');
}

3.2.7. tests

3.2.7.1. tests/Feature/TodoControllerTest.php

Our automated PHPUnit tests scenario.

<?php

namespace Tests\Feature;

use Tests\TestCase;
use Auth;
use app\Todo;
use Faker;

class TodoControllerTest extends TestCase
{
    private $email = 'christophe@todos.com';
    private $password = 'admin';

    /**
     * Test a few URLs as a guest
     *
     * @return boolean
     */
    public function testGuestURLs() : bool
    {
        // To be sure, start the tests as guest
        if (Auth::check()) {
            Auth::logout();
        }

        // These routes are publicly available
        // The expected HTTP code is 200 ("Ok")
        $arr = ['todos.index', 'login', 'password.request'];

        foreach ($arr as $name) {
            $url = route($name);
            $this->output('Check 200 for ' . $url);

            $response = $this->call('GET', $url);
            $response->assertStatus(200);
        }

        // These routes are restricted to logged-in users
        // so the expected HTTP code is 302 ("HTTP redirection") and
        // should redirect to the login screen
        $uri = route('login');

        $arr = [
            'todos.create' => 'GET',
            'todos.edit' => 'GET',
            'todos.destroy' => 'DELETE',
            'todos.update' => 'PUT'
        ];

        foreach ($arr as $name => $method) {
            // Except for create, we need to provide an ID
            if ($name == 'todos.create') {
                $url = route($name);
            } else {
                $url = route($name, '9999');
            }

            $this->output('Check 302 for [' . $method . '] ' . $url);

            $response = $this->call($method, $url);
            $response->assertRedirect($uri);
        }

        return true;
    }

    /**
     * Try posting some data and check
     *
     * @return boolean
     */
    public function testPosting() : bool
    {
        self::output('Connect as ' . $this->email . ' and ' .
            'post some data');

        // Connect
        $user = [
            'email' => $this->email,
            'password' => $this->password
        ];

        if (Auth::attempt($user)) {
            // Ok, we're logged-in

            $faker = Faker\Factory::create('fr_FR');

            $postData = [
                'title' => $faker->sentence($nbWords = 6, $variableNbWords = true),
                'description' => 'Filled in by PHPUnit'
            ];

            // Submit the record
            $response = $this->call('POST', route('todos.store'), $postData);

            // The response would be a redirection to the URL
            // for displaying the detail of the inserted record
            // 1. Retrieve the last inserted record; get his ID
            $id = Todo::max('id');

            // 2. Build the URI to that page
            // (f.i. http://127.0.0.1/todos/33
            $uri = route('todos.show', $id);

            self::output('Create new Todo #' . $id . ' and check returned URI');

            // And now assert that it's fine
            $response->assertRedirect($uri);
        }

        return true;
    }
}