Plugin Directory

Changeset 1324861


Ignore:
Timestamp:
01/09/2016 05:50:34 PM (10 years ago)
Author:
fabifott
Message:

WP-Filebase 3.4.1

Location:
wp-filebase
Files:
367 added
24 edited

Legend:

Unmodified
Added
Removed
  • wp-filebase/trunk/classes/Admin.php

    r1321065 r1324861  
    275275        } else {
    276276            $file_src_path = $upload ? $data->file_upload['tmp_name'] : ($add_existing ? $data->file_path : null);
    277             $file_name = $upload ? str_replace('\\', '', $data->file_upload['name']) : ((empty($file_src_path) && $update) ? $file->file_name : basename($file_src_path));
     277            $file_name = $upload ? str_replace('\\', '', $data->file_upload['name']) : ((empty($file_src_path) && $update) ? $file->file_name : substr(strrchr (str_replace('\\','/',$file_src_path),'/'),1)); // no basename here!
    278278        }
    279279
     
    470470        if (empty($file_version)) {
    471471            $matches = array();
    472             if (preg_match('/[-_\.]v?([0-9]{1,2}\.[0-9]{1,2}(\.[0-9]{1,2}){0,2})(-[a-zA-Z_]+)?$/', $fnwv, $matches) && !preg_match('/^[\.0-9]+-[\.0-9]+$/', $fnwv)) { // FIX: don't extract ver from 01.01.01-01.02.03.mp3
     472            /* match github-style files */
     473            if(preg_match('/^(.+?)-v?([0-9]{1,3}\.[0-9]{1,3}[-\.0-9a-zA-Z]*)-0-[0-9a-z]+$/', $fnwv, $matches))
     474            {
     475                $fnwv = $matches[1];
     476                $file_version = $matches[2];
     477            }
     478            elseif (preg_match('/[-_\.]v?([0-9]{1,3}\.[0-9]{1,3}(\.[0-9]{1,3}){0,2})(-[a-zA-Z_0-9]+)?$/', $fnwv, $matches)
     479                && !preg_match('/^[\.0-9]+-[\.0-9]+$/', $fnwv)) { // FIX: don't extract ver from 01.01.01-01.02.03.mp3
    473480                $file_version = $matches[1];
    474481                if ((strlen($fnwv) - strlen($matches[0])) > 1)
    475482                    $fnwv = substr($fnwv, 0, -strlen($matches[0]));
    476             }
    477             /* match github-style files */
    478             elseif(preg_match('/^(.+?)-v?([0-9]{1,3}\.[0-9]{1,3}[-\.0-9a-zA-Z]*)-0-[0-9a-z]+$/', $fnwv, $matches))
    479             {
    480                 $fnwv = $matches[1];
    481                 $file_version = $matches[2];
    482483            }
    483484        } elseif (substr($fnwv, -strlen($file_version)) == $file_version) {
     
    917918                                        "UPDATE `$wpdb->wpfilebase_files` "
    918919                                        . "SET `file_rescan_pending` = %d, `file_scan_lock` = 0 "
    919                                         . "WHERE `file_scan_lock` < %d", $re_thumb ? 2 : 1, time())
     920                                        . "WHERE `file_rescan_pending` < %d AND `file_scan_lock` < %d", $re_thumb ? 2 : 1, $re_thumb ? 2 : 1, time())
    920921        );
    921922    }
  • wp-filebase/trunk/classes/AdminDashboard.php

    r1321065 r1324861  
    88class WPFB_AdminDashboard {
    99
    10     static function screenLayoutColumns($columns, $screen_id) {
    11         $columns[$screen_id] = 2;
    12         return $columns;
    13     }
    1410
    1511    static function Setup($custom = false) {
     
    236232    }
    237233
     234    /**
     235     * Lists 20 normal log entries and max. 100 errors
     236     *
     237     * @param $for
     238     */
    238239    static function showLog($for) {
    239240        $filename = WPFB_Core::GetLogFile($for);
     
    246247        }
    247248        $n = count($lines);
     249        $ni = $n-1;
    248250        echo "<pre><strong>$for</strong> ",sprintf(__('%s ago'), human_time_diff(filemtime($filename))),":\n";
    249         for ($i = $n-1; $i >= max(0, $n - 20); $i--) {
     251        for ($i = $n-1; $i >= max(0, $n - 100); $i--) {
    250252            $msg = rtrim(substr($lines[$i], $date_len));
    251             if(stripos($msg, 'error') || stripos($msg, 'failed') || stripos($msg, 'exception') || stripos($msg, 'unexpected') || stripos($msg, 'warning')) {
    252                 $msg = "<span class='error'>$msg</span>";
    253             }
     253            $e = (stripos($msg, 'error') || stripos($msg, 'failed') || stripos($msg, 'exception') || stripos($msg, 'unexpected') || stripos($msg, 'warning'));
     254
     255            if($i < ($n - 20) && !$e)
     256                continue;
     257
     258            if($ni != $i)
     259                echo "<b>\t[...]\n</b>";
     260
     261            $e && $msg = "<span class='error'>$msg</span>";
    254262            echo '<b>'.substr($lines[$i], 0, $date_len).'</b>'.$msg . "\n";
     263            $ni = $i - 1;
    255264        }
    256265        echo '</pre>';
  • wp-filebase/trunk/classes/AdminGuiSettings.php

    r1321065 r1324861  
    99        wpfb_call('Output', 'PrintJS');
    1010
    11         wp_register_script('jquery-imagepicker', WPFB_PLUGIN_URI . 'extras/jquery/image-picker/image-picker.min.js', array('jquery'), WPFB_VERSION);
    12         wp_register_style('jquery-imagepicker', WPFB_PLUGIN_URI . 'extras/jquery/image-picker/image-picker.css', array(), WPFB_VERSION);
     11        wp_register_script('rvera-image-picker', WPFB_PLUGIN_URI . 'bower_components/image-picker/image-picker/image-picker.min.js', array('jquery'), WPFB_VERSION);
     12        wp_register_style('rvera-image-picker', WPFB_PLUGIN_URI .  'bower_components/image-picker/image-picker/image-picker.css', array(), WPFB_VERSION);
    1313
    1414        if (!current_user_can('manage_options')) {
     
    307307
    308308                                                                case 'icon':
    309                                     wp_print_scripts('jquery-imagepicker');
    310                                     wp_print_styles('jquery-imagepicker');
     309                                    wp_print_scripts('rvera-image-picker');
     310                                    wp_print_styles('rvera-image-picker');
    311311
    312312                                    echo '<select class="image-picker show-html" name="' . $opt_tag . '" id="' . $opt_tag . '">';
  • wp-filebase/trunk/classes/AdminGuiTpls.php

    r1321065 r1324861  
    66static $protected_tags = array('default','single','excerpt','filebrowser','filepage','filepage_excerpt');
    77
    8 static function InitClass() {
     8
     9static function Display()
     10{
    911    global $user_identity;
     12
    1013    wpfb_loadclass('File', 'Category');
    11    
     14
    1215    self::$sample_file = new WPFB_File(array(
    1316        'file_id' => 0,
     
    2427        'file_added_by' => wp_get_current_user()->ID
    2528    ));
    26    
     29
    2730    self::$sample_cat = new WPFB_Category(array(
    2831        'cat_id' => 0,
     
    3235        'cat_num_files' => 0, 'cat_num_files_total' => 0
    3336    ));
    34    
     37
    3538    self::$sample_file->Lock();
    3639    self::$sample_cat->Lock();
    37 }
    38 
    39 static function Display()
    40 {
    41     global $wpdb, $user_ID, $user_identity;
    4240   
    4341    wpfb_loadclass('Admin', 'Output', 'TplLib', 'ListTpl');
     
    4846    $_GET = stripslashes_deep($_GET);   
    4947    $action = (!empty($_POST['action']) ? $_POST['action'] : (!empty($_GET['action']) ? $_GET['action'] : ''));
    50     $clean_uri = remove_query_arg(array('message', 'action', 'file_id', 'cat_id', 'deltpl', 'hash_sync' /* , 's'*/)); // keep search keyword
    51    
     48
    5249    // security nonce
    5350    if(!empty($action) && $action != 'edit' && !check_admin_referer($action.'-'.$_REQUEST['type'],'wpfb-tpl-nonce'))
  • wp-filebase/trunk/classes/AdminLite.php

    r1321065 r1324861  
    77        wp_enqueue_style(WPFB . '-admin', WPFB_PLUGIN_URI . 'css/admin.css', array(), WPFB_VERSION, 'all');
    88
    9         wp_register_script('jquery-deserialize', WPFB_PLUGIN_URI . 'extras/jquery/jquery.deserialize.js', array('jquery'), WPFB_VERSION);
     9        wp_register_script('jquery-deserialize', WPFB_PLUGIN_URI . 'bower_components/jquery-deserialize/dist/jquery.deserialize.min.js', array('jquery'), WPFB_VERSION);
    1010
    1111        if (isset($_GET['page'])) {
  • wp-filebase/trunk/classes/AdvUploader.php

    r1321065 r1324861  
    4949
    5050
     51
     52jQuery(document).ready(function () {
     53    jQuery('#file_display_name,#file_version' ).keyup(function() { jQuery(this).data('keyUpTriggered', true); });
     54});
     55
    5156function fileQueued(fileObj) {
    5257    jQuery('#file-upload-progress').show().html('<div class="progress"><div class="percent">0%</div><div class="bar" style="width: 30px"></div></div><div class="filename original"> ' + fileObj.name + '</div>');
     
    6772            success: (function(data){
    6873                var d = jQuery('#file_display_name'), v = jQuery('#file_version');
    69                 d.val()||d.val(data.title);
    70                 v.val()||v.val(data.version);
     74                d.data('keyUpTriggered')||d.val(data.title);
     75                v.data('keyUpTriggered')||v.val(data.version);
    7176            })
    7277        });
     
    100105        return;
    101106    }
     107
     108    jQuery('#file_thumbnail_wrap').hide();
     109    jQuery('#file_thumbnail_preview').hide();
    102110   
    103111    var file_obj = jQuery.parseJSON(serverData);
     112
     113    if(file_obj && file_obj.nonce) {
     114        jQuery('#wpfb-file-nonce').val(file_obj.nonce);
     115    }
     116
     117    jQuery('#file-upload-progress').html('<strong class="crunching">' + '<?php _e('%s uploaded.','wp-filebase') ?>'.replace(/%s/g, file_obj.file_display_name ? file_obj.file_display_name : file_obj.name) + '</strong>');
    104118   
    105119    if(file_obj && 'undefined' != typeof(file_obj.file_id)) {       
    106120        jQuery('#file_form_action').val("updatefile");
    107121        jQuery('#file_id').val(file_obj.file_id);
    108         jQuery('#file-upload-progress').html('<strong class="crunching">' + '<?php _e('%s uploaded.','wp-filebase') ?>'.replace(/%s/g, file_obj.file_display_name) + '</strong>');
     122
    109123       
    110124        if(file_obj.file_thumbnail) {
     
    112126            jQuery('#file_thumbnail_name').html(file_obj.file_thumbnail);           
    113127            jQuery('#file_thumbnail_preview').show().css("background-image", 'url(\''+file_obj.file_thumbnail_url+'\')');
    114         } else {
    115             jQuery('#file_thumbnail_wrap').hide();
    116             jQuery('#file_thumbnail_preview').hide();
    117128        }
    118129       
    119130        jQuery('#file_display_name').val(file_obj.file_display_name);
    120131        jQuery('#file_version').val(file_obj.file_version);
    121        
    122         jQuery('#wpfb-file-nonce').val(file_obj.nonce);
     132
    123133    } else {
    124134        jQuery('#file_flash_upload').val(serverData);
  • wp-filebase/trunk/classes/Category.php

    r1321065 r1324861  
    131131    }
    132132
     133
     134    static $no_bubble = false;
     135
     136    static function DisableBubbling()
     137    {
     138        self::$no_bubble = true;
     139    }
     140
    133141    function NotifyFileAdded($file)
    134142    {
     143        if(self::$no_bubble)
     144            return;
    135145        //if($this->IsAncestorOf($file)) // Removed for secondary categories!
    136146        //{
     
    152162    function NotifyFileRemoved($file)
    153163    {
     164        if(self::$no_bubble)
     165            return;
     166
    154167        //if($this->IsAncestorOf($file)) // FIX: when a file is moved to another category this function is called on old category, so IsAncestorOf will false, since the files is no longer in this category
    155168        //{
     
    296309    function CurUserCanEdit($user = null)
    297310    {
    298         return parent::CurUserCanEdit($user) && $this->CurUserCanAddFiles($user);
     311        return parent::CurUserCanEdit($user);
    299312    }
    300313
  • wp-filebase/trunk/classes/Core.php

    r1321065 r1324861  
    2828        self::$settings = (object) get_option(WPFB_OPT_NAME, array());
    2929       
     30
    3031        if (defined('WPFB_NO_CORE_INIT'))
    3132            return; // on activation
     
    4546        add_action('wpfilebase_sync', array(__CLASS__, 'Sync')); // for Developers: New wp-filebase actions
    4647        add_action('wpfilebase_bgscan', array(__CLASS__, 'BgScanWork')); // for Developers: New wp-filebase actions
    47 
    4848
    4949        // for attachments and file browser
     
    100100        }
    101101
    102         if (defined('DOING_CRON') && DOING_CRON) {
    103             wpfb_loadclass('CCron');
    104             WPFB_CCron::SetLogFile(self::GetLogFile('ccron'));
    105             WPFB_CCron::doCron($_GET);
    106         }
    107102    }
    108103
     
    207202        global $wp_query;
    208203
    209         if (!empty($wp_query->query_vars['s']))
     204        if (WPFB_Core::$settings->search_integration && !empty($wp_query->query_vars['s'])) {
    210205            wpfb_loadclass('Search');
     206            WPFB_Search::sqlHooks();
     207        }
    211208
    212209
  • wp-filebase/trunk/classes/ExtensionLib.php

    r1321065 r1324861  
    1818            if($no_cache) {
    1919                delete_transient($cache_key);
    20                             $get_args['nocache'] = 1;
     20                $get_args['nocache'] = 1;
    2121            }
    2222
  • wp-filebase/trunk/classes/File.php

    r1321065 r1324861  
    5858    //static $cache_complete = false;
    5959
    60     static function InitClass()
    61     {
    62         global $wpdb;
    63         self::$id_var = 'file_id';
    64     }
    65 
     60
     61    /**
     62     * @param string $extra_sql
     63     *
     64     * @return WPFB_File[]
     65     */
    6666    static function GetFiles($extra_sql = '')
    6767    {
    6868        global $wpdb;
    6969        $files = array();
    70         $results = $wpdb->get_results("SELECT `$wpdb->wpfilebase_files`.* FROM $wpdb->wpfilebase_files $extra_sql");
     70        $results = $wpdb->get_results("SELECT `$wpdb->wpfilebase_files`.* FROM $wpdb->wpfilebase_files $extra_sql", ARRAY_A);
     71
    7172        if (!empty($results)) {
    7273            foreach (array_keys($results) as $i) {
    73                 $id = (int)$results[$i]->file_id;
     74                $id               = 0+$results[$i]['file_id'];
    7475                self::$cache[$id] = new WPFB_File($results[$i]);
    75                 $files[$id] = self::$cache[$id];
     76                $files[$id]       = self::$cache[$id];
    7677            }
    77         }
    78 
    79         unset($results); //
     78
     79            if(count($results) > 500) {
     80                unset($results);
     81                $wpdb->flush();
     82            }
     83        }
     84
    8085        return $files;
    8186    }
     
    713718    }
    714719
     720    function SetRescanPending($force_thumb=false) {
     721        $this->file_rescan_pending = max($this->file_rescan_pending, $force_thumb ? 2:1);
     722        if(!$this->locked)
     723            $this->DBSave();
     724    }
     725
    715726    static function UpdateTags($cur_file = null)
    716727    {
     
    729740    }
    730741
     742
     743    // TODO move to RemoteSync
     744    function SetRemoteSyncMeta($rev, $rsync_id, $uri_expires, $guid = '')
     745    {
     746        return false;
     747    }
     748
     749    /**
     750     *
     751     * @global type $wpdb
     752     * @return WPFB_RemoteFileInfo
     753     */
     754    function GetRemoteSyncMeta()
     755    {
     756        return false;
     757    }
     758
     759
    731760    function GetWPAttachmentID()
    732761    {
  • wp-filebase/trunk/classes/FileListTable.php

    r1321065 r1324861  
    146146
    147147    function column_last_dl_time($file) {
    148         return ( (!empty($file->file_last_dl_time) && $file->file_last_dl_time > 0) ? mysql2date(get_option('date_format'), $file->file_last_dl_time) : '-');
     148        $t =  mysql2date('U', $file->file_last_dl_time);
     149        $gmt_offset = get_option('gmt_offset') * 3600;
     150        return ($t > 0) ? sprintf(__('%s ago'), human_time_diff($t-$gmt_offset)) : '-';
    149151    }
    150152
     
    153155             'edit' => __('Edit'),
    154156             'delete' => __('Delete'),
    155 #       
    156157             //'change_cat' => 'Change Category',
    157158             'set_off' => 'Set Offline',
     
    254255                    break;
    255256                case 'nothumb':
    256                     $view_cond = "file_thumbnail = ''";
     257                    $view_cond = "(file_thumbnail = '' OR file_thumbnail IS NULL)";
    257258                    break;
    258259                case 'rescanpending':
  • wp-filebase/trunk/classes/Item.php

    r1321065 r1324861  
    1010    private $_read_permissions = null;
    1111
    12 
    1312    static $tpl_uid = 0;
    14     static $id_var;
    1513
    1614    function __construct($db_row = null) {
     
    440438     * @return WPFB_File[] Files
    441439     */
    442     function GetChildFiles($recursive = false, $sorting = null, $check_permissions = false) {
     440    function GetChildFiles($recursive = false, $sorting = null, $check_permissions = false, $local_only = false) {
    443441        if ($this->is_file)
    444442            return array($this->GetId() => $this);
     
    449447        // if recursive, include secondary category links with GetSqlCatWhereStr
    450448        $where = $recursive ? WPFB_File::GetSqlCatWhereStr($this->cat_id) : '(file_category = ' . $this->cat_id . ')';
     449
     450        if($local_only) $where = "(file_remote_uri = '' AND $where)";
    451451
    452452        $files = WPFB_File::GetFiles2($where, $check_permissions, $sorting);
     
    454454            $cats = $this->GetChildCats(true);
    455455            foreach (array_keys($cats) as $i)
    456                 $files += $cats[$i]->GetChildFiles(false, $sorting, $check_permissions);
     456                $files += $cats[$i]->GetChildFiles(false, $sorting, $check_permissions, $local_only);
    457457        }
    458458        return $files;
  • wp-filebase/trunk/classes/Output.php

    r1321065 r1324861  
    455455        $ft = preg_replace('/\.([^0-9])/', ' $1', $ft);
    456456        $ft = str_replace('_', ' ', $ft);
     457        $ft = str_replace('-', ' ', $ft);
    457458        $ft = str_replace('%20', ' ', $ft);
    458459        $ft = ucwords($ft);
  • wp-filebase/trunk/classes/ProgressReporter.php

    r1321065 r1324861  
    1414    var $field_update_times = array();
    1515
     16    var $memprof;
     17
     18    /**
     19     * @var progressbar
     20     */
     21    var $mem_bar = null;
     22
    1623    function __construct($suppress_output = false) {
    1724        $this->quiet = !!$suppress_output;
    1825        $this->debug = !empty($_REQUEST['debug']);
     26
     27        if ($this->memprof = (isset($_REQUEST['MEMPROF']) && function_exists('memprof_enable'))) {
     28            memprof_enable();
     29            $this->Log("Memprof enabled!");
     30        }
    1931    }
    2032
     
    2234        if (!$this->quiet)
    2335            self::DEcho((!$no_new_line) ? ($msg . "<br />") : $msg);
     36        $this->UpdateMemBar();
    2437    }
    2538
     
    2841            return;
    2942        self::DEcho("<span style='color:#d00;'>$err</span><br />");
     43        $this->UpdateMemBar();
    3044    }
    3145
     
    3347        if ($this->quiet)
    3448            return;
    35         self::DEcho("<span style='color:#d00;'>" . $e->getMessage() . "</span><br />");
     49        self::DEcho("<span style='color:#d00;'>" . print_r($e->getMessage(), true). "</span><br />");
    3650        if ($this->debug) {
    3751            var_dump($e);
    3852            self::DEcho("<br />");
    3953        }
     54        $this->UpdateMemBar();
    4055    }
    4156
    4257    function Debug() {
    4358        if ($this->debug) {
     59            $this->UpdateMemBar();
     60
    4461            $args = func_get_args();
    4562            $format = array_shift($args);
     
    4865            $this->Log("[$caller] " . vsprintf($format, $args));
    4966        }
     67    }
     68
     69    function DebugLog($msg) {
     70
    5071    }
    5172
     
    6384
    6485    function SetProgress($progress) {
     86        $this->UpdateMemBar();
    6587        $this->progress_cur = $progress;
    6688        if (!$this->quiet && !is_null($this->progress_bar)) {
     
    7092
    7193    function SetSubProgress($sub_progress, $sub_total) {
     94        $this->UpdateMemBar();
    7295        if (!$this->quiet && !is_null($this->progress_bar))
    7396            $this->progress_bar->set(100 * ($this->progress_cur + $sub_progress) / $this->progress_end);
     
    7699    function InitProgressField($format = 'Value = %#%', $val = 0, $obey_upd_interval = false) {
    77100        $this->last_field_id = $id = md5(uniqid());
    78         $this->Log(str_replace('%#%', "<span id='$id'>$val</span>", $format));
     101        $this->Log(str_replace('%#%', "<span id='$id'>$val</span>", $format), true);
     102
     103        if(is_numeric($val))
     104            echo (" (<span id='$id-rate-scope'></span>) <script> document.getElementById('$id-rate-scope').measure = {log: [{t: Date.now(),v: 0+'$val'}], update: function(v) {
     105                var el = document.getElementById('$id-rate-scope'), m = el.measure, now = Date.now(), l = m.log[0];
     106                m.log.push({t: now,v: 0+v});
     107                for(var i = m.log.length-1; i >= 0; i--) {
     108                    if((now - m.log[i].t) > 1000*60) {
     109                        l = m.log[i];
     110                        break;
     111                    }
     112                }
     113                var elapsed = now - l.t, delta = v - l.v, rate = delta / elapsed * 1000;
     114                el.innerHTML = (Math.round(rate*10)/10)+ ' per second (in the last minute)';
     115            }}; </script>");
     116
     117        echo "<br />";
     118
    79119        if ($obey_upd_interval && !$this->debug)
    80120            $this->field_update_times[$id] = 1;
     
    83123
    84124    function SetField($val, $id = false) {
     125        $this->UpdateMemBar();
     126
    85127        if (!$id)
    86128            $id = $this->last_field_id;
     129
    87130        if ($id && !$this->quiet && (!isset($this->field_update_times[$id]) || (($t = microtime(true)) - $this->field_update_times[$id]) >= self::FIELD_UPDATE_INTERVAL)) {
    88131            $val = str_replace('\\', '/', $val);
    89132            self::DEcho("<script> document.getElementById('$id').innerHTML = '$val'; </script>");
     133            if(is_numeric($val)) {
     134                self::DEcho("<script> document.getElementById('$id-rate-scope').measure.update('$val'); </script>");
     135            }
    90136            if (isset($t))
    91137                $this->field_update_times[$id] = $t;
    92138            return true;
    93139        }
     140        return false;
    94141    }
    95142
    96143    function FileChanged($file, $action) {
     144        $this->UpdateMemBar();
     145
    97146        if (empty($this->files[$action]))
    98147            $this->files[$action] = array();
     
    125174    }
    126175
     176    static function GetMemStats()
     177    {
     178        static $limit = -2;
     179        if ($limit == -2) {
     180            $limit = wpfb_call("Misc", "ParseIniFileSize",
     181                ini_get('memory_limit'));
     182        }
     183
     184        $usage = max(memory_get_usage(true), memory_get_usage());
     185
     186
     187
     188        return array(            'limit' => $limit,            'usage' => $usage        );;
     189    }
     190
     191    function InitMemBar() {
     192        if (!$this->mem_bar && !$this->quiet) {
     193            if (!class_exists('progressbar')) {
     194                include_once(WPFB_PLUGIN_ROOT . 'extras/progressbar.class.php');
     195            }
     196
     197            $ms = self::GetMemStats();
     198            $this->mem_bar = new progressbar($ms['usage'], $ms['limit'], 200, 20,
     199                '#d90', 'white', 'wpfb-progress-bar-mem');
     200            echo "<div><br /></div>";
     201            echo "<div>Memory Usage (limit = "
     202                . WPFB_Output::FormatFilesize($ms['limit']) . "):</div>";
     203            $this->mem_bar->print_code();
     204            echo "<div><br /></div>";
     205        }
     206        return $this->mem_bar;
     207    }
     208
     209    function UpdateMemBar() {
     210        if($this->mem_bar) {
     211            $ms = self::GetMemStats();
     212            $pu = round($ms['usage']/$ms['limit'] * 100);
     213
     214            if($this->memprof && $pu > 90) {
     215                memprof_dump_callgrind(fopen("/tmp/callgrind_mem.out", "w"));
     216                die("memprof @$pu% written to /tmp/callgrind_mem.out");
     217            }
     218
     219            if($this->memprof) {
     220                self::DEcho("Mem Usage: $pu %<br />");
     221                //sleep(1);
     222            }
     223
     224            $this->mem_bar->set($ms['usage']);
     225        }
     226    }
     227
     228    var $stopwatches = array();
     229
     230    function StopwatchStart() {
     231        array_push($this->stopwatches, microtime(true));
     232    }
     233
     234    function StopwatchEnd($msg) {
     235        $start = array_pop($this->stopwatches);
     236        $this->Log(sprintf($msg, human_time_diff($start, microtime(true))));
     237    }
     238
    127239}
  • wp-filebase/trunk/classes/Search.php

    r909709 r1324861  
    22class WPFB_Search {
    33
    4 static function InitClass()
     4static function sqlHooks()
    55{
    66    if(WPFB_Core::$settings->search_integration) {
  • wp-filebase/trunk/classes/Sync.php

    r1321065 r1324861  
    2222        register_shutdown_function(array(__CLASS__, 'CaptureShutdown'));
    2323
    24         if (self::$debug_output = (!empty($_GET['output'])
    25             || !empty($_GET['debug']))
     24        if (self::$debug_output = ( ! empty($_GET['output'])
     25            || ! empty($_GET['debug']))
    2626        ) {
    2727            @ini_set('display_errors', 1);
     
    5050        }
    5151        $error = array(
    52             'type' => $number,
     52            'type'    => $number,
    5353            'message' => $message,
    54             'file' => $file,
    55             'line' => $line
     54            'file'    => $file,
     55            'line'    => $line
    5656        );
    5757        if (self::$debug_output) {
     
    127127        foreach ($sync_data->cats as $id => $cat) {
    128128            $cat_path = $cat->GetLocalPath(true);
    129             if (!@is_dir($cat_path) || !@is_readable($cat_path)) {
     129            if ( ! @is_dir($cat_path) || ! @is_readable($cat_path)) {
    130130                if (WPFB_Core::$settings->remove_missing_files) {
    131131                    $cat->Delete();
     
    144144
    145145        // search for not added files
    146         $upload_dir = self::cleanPath(WPFB_Core::UploadDir());
    147         $all_files = self::cleanPath(list_files($upload_dir));
     146        $upload_dir               = self::cleanPath(WPFB_Core::UploadDir());
     147        $all_files                = self::cleanPath(list_files($upload_dir));
    148148        $sync_data->num_all_files = count($all_files);
    149149
     
    156156        if ($sync_data->num_all_files > 0) {
    157157            wpfb_loadclass('ProgressReporter');
    158             $progress_reporter = new WPFB_ProgressReporter(!$output);
     158            $progress_reporter = new WPFB_ProgressReporter(! $output);
    159159            $progress_reporter->InitProgress($sync_data->num_all_files);
    160160            $progress_reporter->InitProgressField('Current File: %#%', '-',
     
    163163
    164164        $num_new_files = 0;
    165         $i = 0;
    166         $ulp_len = strlen($upload_dir);
     165        $i             = 0;
     166        $ulp_len       = strlen($upload_dir);
    167167
    168168        // 1ps filter    (check extension, special file names, and filter existing file names and thumbnails)
     
    172172            // $fn = $upload_dir.implode('/',array_map('urlencode', explode('/', substr($all_files[$i], strlen($upload_dir)))));
    173173
    174             $fn = $all_files[$i];
    175             $fbn = basename($fn);
     174            $fn         = $all_files[$i];
     175            $fbn        = basename($fn);
    176176            $fbn_length = strlen($fbn);
    177177
     
    187187                    $sync_data->known_filenames)
    188188                //  || self::fast_in_array(utf8_encode(substr($fn, strlen($upload_dir))), $sync_data->known_filenames)
    189                 || !is_file($fn)
    190                 || !is_readable($fn)
    191                 || (!empty($fext_blacklist)
     189                || ! is_file($fn)
     190                || ! is_readable($fn)
     191                || ( ! empty($fext_blacklist)
    192192                    && self::fast_in_array(trim(strrchr($fbn, '.'), '.'),
    193193                        $fext_blacklist)) // check for blacklisted extension
     
    203203                    // make sure cat tree to new file location exists, and set the cat of the moved file
    204204                    $cat_id = WPFB_Admin::CreateCatTree($fn);
    205                     if (!empty($cat_id['error'])) {
     205                    if ( ! empty($cat_id['error'])) {
    206206                        $sync_data->log['error'][] = $cat_id['error'];
    207207                        continue 2;
     
    209209
    210210                    $result = $mf->ChangeCategoryOrName($cat_id, null, true);
    211                     if (is_array($result) && !empty($result['error'])) {
     211                    if (is_array($result) && ! empty($result['error'])) {
    212212                        $sync_data->log['error'][] = $result['error'];
    213213                        continue 2;
     
    239239            if (WPFB_Core::$settings->remove_missing_files) {
    240240                $mf->Remove();
    241             } elseif (!$mf->file_offline) {
     241            } elseif ( ! $mf->file_offline) {
    242242                $mf->file_offline = true; // set offline if not found
    243                 if (!$mf->locked) {
     243                if ( ! $mf->locked) {
    244244                    $mf->DBSave();
    245245                }
     
    277277    private static function NewProgressBar($steps)
    278278    {
    279         if (!class_exists('progressbar')) {
     279        if ( ! class_exists('progressbar')) {
    280280            include_once(WPFB_PLUGIN_ROOT . 'extras/progressbar.class.php');
    281281        }
     
    294294
    295295        wpfb_loadclass('File', 'Category');
    296         $sync_data = new WPFB_SyncData(true);
     296        $sync_data            = new WPFB_SyncData(true);
    297297        $sync_data->hash_sync = $hash_sync;
    298298                $sync_data->bg_scan = false;         self::PreSync($sync_data);
     
    318318        self::PrintDebugTrace("pre_add_files");
    319319
     320
    320321        self::AddNewFiles($sync_data, $progress_bar);
    321322        self::PostSync($sync_data, $output);
     
    327328     *
    328329     * @param WPFB_SyncData $sync_data
    329      * @param boolean $output
     330     * @param boolean       $output
    330331     */
    331332    private static function PostSync($sync_data, $output)
     
    392393     *
    393394     * @param WPFB_SyncData $sync_data
    394      * @param boolean $output
     395     * @param boolean       $output
    395396     */
    396397    private static function CheckChangedFiles($sync_data, $output)
     
    401402        }
    402403
    403         $sync_id3 = !WPFB_Core::$settings->disable_id3;
     404        $sync_id3   = ! WPFB_Core::$settings->disable_id3;
    404405        $upload_dir = self::cleanPath(WPFB_Core::UploadDir());
    405406
    406407        if (count($sync_data->files) > 0) {
    407408            wpfb_loadclass('ProgressReporter');
    408             $progress_reporter = new WPFB_ProgressReporter(!$output);
     409            $progress_reporter = new WPFB_ProgressReporter(! $output);
    409410            $progress_reporter->InitProgress(count($sync_data->files));
    410411            $progress_reporter->InitProgressField('Current File: %#%', '-',
     
    415416
    416417        foreach ($sync_data->files as $id => $file) {
    417             $file_path = self::cleanPath($file->GetLocalPath(true));
     418            $file_path     = self::cleanPath($file->GetLocalPath(true));
    418419            $rel_file_path = substr($file_path, strlen($upload_dir));
    419420
     
    436437
    437438            // remove thumb if missing
    438             if ($file->file_thumbnail && !file_exists($file->GetThumbPath())) {
     439            if ($file->file_thumbnail && ! file_exists($file->GetThumbPath())) {
    439440                $file->file_thumbnail = '';
    440441                $file->DBSave();
     
    447448            }
    448449
    449             if (!@is_file($file_path) || !@is_readable($file_path)) {
     450            if ( ! @is_file($file_path) || ! @is_readable($file_path)) {
    450451                $sync_data->missing_files[$id] = $file;
    451452                continue;
     
    455456                $file_hash = WPFB_Admin::GetFileHash($file_path);
    456457            }
    457             $file_size = WPFB_FileUtils::GetFileSize($file_path);
    458             $file_mtime = filemtime($file_path);
    459             $file_analyzetime = !$sync_id3 ? $file_mtime
     458            $file_size        = WPFB_FileUtils::GetFileSize($file_path);
     459            $file_mtime       = filemtime($file_path);
     460            $file_analyzetime = ! $sync_id3 ? $file_mtime
    460461                : WPFB_GetID3::GetFileAnalyzeTime($file);
    461462            if (is_null($file_analyzetime)) {
     
    468469                || $file_analyzetime < $file_mtime
    469470            ) {
    470                 $file->file_size = $file_size;
     471                $file->file_size  = $file_size;
    471472                $file->file_mtime = $file_mtime;
    472                 $file->file_hash = $sync_data->hash_sync ? $file_hash
     473                $file->file_hash  = $sync_data->hash_sync ? $file_hash
    473474                    : WPFB_Admin::GetFileHash($file_path);
    474475
     
    479480
    480481                $res = $file->DBSave();
    481                 if (!empty($res['error'])) {
     482                if ( ! empty($res['error'])) {
    482483                    $sync_data->log['error'][$id] = $res['error']
    483484                        . " (file $rel_file_path)";
     
    502503    {
    503504        self::PrintDebugTrace();
    504         $keys = array_keys($sync_data->new_files);
    505         $upload_dir = self::cleanPath(WPFB_Core::UploadDir());
     505        $keys           = array_keys($sync_data->new_files);
     506        $upload_dir     = self::cleanPath(WPFB_Core::UploadDir());
    506507        $upload_dir_len = strlen($upload_dir);
    507         $batch_size = 0;
     508        $batch_size     = 0;
    508509
    509510        $start_time = $cur_time = time();
    510511
     512        WPFB_Category::DisableBubbling();
     513
    511514        foreach ($keys as $i) {
    512             $fn = $sync_data->new_files[$i];
     515            $fn       = $sync_data->new_files[$i];
    513516            $rel_path = substr($fn, $upload_dir_len);
    514517            unset($sync_data->new_files[$i]);
     
    530533
    531534                    $sync_data->known_filenames[] = $rel_path;
    532                     if (!empty($res['file'])
     535                    if ( ! empty($res['file'])
    533536                        && $res['file']->GetThumbPath()
    534537                    ) {
     
    542545            } else {
    543546                //$res = array('file' => $ex_file);
    544                 $sync_data->log['added'][] = $ex_file;
     547                $sync_data->log['added'][]    = $ex_file;
    545548                $sync_data->known_filenames[] = $rel_path;
    546549            }
     
    548551            $sync_data->num_files_processed++;
    549552
    550             if (!empty($progress_bar)) {
     553            if ( ! empty($progress_bar)) {
    551554                $progress_bar->step();
    552555            }
    553556
    554             if (!empty($res['file'])) {
     557            if ( ! empty($res['file'])) {
    555558                $batch_size += $res['file']->file_size;
    556559                if ($max_batch_size > 0 && $batch_size > $max_batch_size) {
     
    561564        }
    562565
    563         if (!empty($progress_bar)) {
     566        if ( ! empty($progress_bar)) {
    564567            $progress_bar->complete();
    565568        }
     
    582585        return array(
    583586            'limit' => $limit,
    584             'used' => max(memory_get_usage(true), memory_get_usage())
     587            'used'  => max(memory_get_usage(true), memory_get_usage())
    585588        );
    586589    }
     
    590593        $num_files_to_add = $num_new_files = count($sync_data->new_files);
    591594
    592         $upload_dir = self::cleanPath(WPFB_Core::UploadDir());
     595        $upload_dir     = self::cleanPath(WPFB_Core::UploadDir());
    593596        $upload_dir_len = strlen($upload_dir);
    594597
     
    603606                && substr($sync_data->new_files[$i - 1], 0, $len)
    604607                == substr($sync_data->new_files[$i], 0, $len)
    605                 && !in_array(substr($sync_data->new_files[$i - 1],
     608                && ! in_array(substr($sync_data->new_files[$i - 1],
    606609                    $upload_dir_len), $sync_data->known_filenames)
    607610            ) {
     
    732735                || $num_files_total != $cat->cat_num_files_total
    733736            ) {
    734                 $cat->cat_num_files = $num_files;
     737                $cat->cat_num_files       = $num_files;
    735738                $cat->cat_num_files_total = $num_files_total;
    736739                $cat->DBSave();
     
    743746                    if ($file->file_category_name != $cat->GetTitle()) {
    744747                        $file->file_category_name = $cat->GetTitle();
    745                         if (!$file->locked) {
     748                        if ( ! $file->locked) {
    746749                            $file->DBSave();
    747750                        }
     
    773776     *
    774777     * @param WPFB_File $file
    775      * @param bool $forced_refresh_thumb
     778     * @param bool      $forced_refresh_thumb
    776779     *
    777780     * @return bool
     
    781784        $forced_refresh_thumb = false,
    782785        $allow_async = true
    783     )
    784     {
    785         if (!empty($_GET['debug'])) {
     786    ) {
     787        if ( ! empty($_GET['debug'])) {
    786788            WPFB_Sync::PrintDebugTrace("scanning_file: $file");
    787789        }
    788790
    789         if (!$file->TryScanLock()) {
     791        if ( ! $file->TryScanLock()) {
    790792            WPFB_Sync::PrintDebugTrace("scan_lock_failed: $file");
    791793            WPFB_Core::LogMsg("ERROR: ScanFile $file locking failed!", 'sync');
     
    796798        $file_path = $file->GetLocalPath();
    797799
    798         if (!$file->IsLocal()) {
     800        if ( ! $file->IsLocal()) {
    799801            $res = WPFB_Admin::SideloadFile($file->GetRemoteUri(), $file_path);
    800802            if ($res['error']) {
    801                 WPFB_Core::LogMsg("ERROR: ScanFile($file) download {$file->GetRemoteUri()} failed {$res['error']}!", 'sync');
     803                WPFB_Core::LogMsg("ERROR: ScanFile($file) download {$file->GetRemoteUri()} failed {$res['error']}!",
     804                    'sync');
    802805
    803806                $file->file_rescan_pending = 0;
     
    806809                return false;
    807810            }
    808         } elseif (!is_file($file_path) || !is_readable($file_path)) {
     811        } elseif ( ! is_file($file_path) || ! is_readable($file_path)) {
    809812            if (WPFB_Core::$settings->remove_missing_files) {
    810                 WPFB_Core::LogMsg("ScanFile($file) removing missing file!", 'sync');
     813                WPFB_Core::LogMsg("ScanFile($file) removing missing file!",
     814                    'sync');
    811815                $file->Remove();
    812816
    813817                return true;
    814818            } else {
    815                 $file->file_offline = true;
    816                 $file->file_mtime = 0;
     819                $file->file_offline        = true;
     820                $file->file_mtime          = 0;
    817821                $file->file_rescan_pending = 1;
    818822                $file->DbSave();
     
    828832
    829833        if (empty($file->file_thumbnail) || $forced_refresh_thumb
    830             || !is_file($file->GetThumbPath())
     834            || ! is_file($file->GetThumbPath())
    831835        ) {
    832836            $file->Lock(true);
     
    836840            if (WPFB_Core::$settings->base_auto_thumb
    837841                && (empty($file->file_thumbnail)
    838                     || !is_file($file->GetThumbPath()))
     842                    || ! is_file($file->GetThumbPath()))
    839843            ) {
    840844                $pwe = substr($file->GetLocalPath(), 0,
     
    850854                ) {
    851855                    $file->file_thumbnail = basename($thumb);
    852                     $dest_thumb = $file->GetThumbPath(true);
     856                    $dest_thumb           = $file->GetThumbPath(true);
    853857                    if ($dest_thumb != $thumb) {
    854858                        $dir = dirname($dest_thumb);
    855                         if (!is_dir($dir)) {
     859                        if ( ! is_dir($dir)) {
    856860                            WPFB_Admin::Mkdir($dir);
    857861                        }
     
    875879        $result = array();
    876880
    877         $upload_dir = self::cleanPath(WPFB_Core::UploadDir());
     881        $upload_dir     = self::cleanPath(WPFB_Core::UploadDir());
    878882        $upload_dir_len = strlen($upload_dir);
    879883
     
    887891            if (file_exists($f)) {
    888892                @chmod($f, octdec(WPFB_PERM_FILE));
    889                 if (!is_writable($f) && !is_writable(dirname($f))) {
     893                if ( ! is_writable($f) && ! is_writable(dirname($f))) {
    890894                    $result[] = sprintf(__('File <b>%s</b> is not writable!',
    891895                        'wp-filebase'), substr($f, $upload_dir_len));
     
    901905        $num_changed = $num_added = $num_errors = 0;
    902906        foreach ($result as $tag => $group) {
    903             if (empty($group) || !is_array($group) || count($group) == 0) {
     907            if (empty($group) || ! is_array($group) || count($group) == 0) {
    904908                continue;
    905909            }
    906910
    907             $t = str_replace('_', ' ', $tag);
     911            $t    = str_replace('_', ' ', $tag);
    908912            $t{0} = strtoupper($t{0});
    909913
     
    947951        //$clean_uri = remove_query_arg(array('message', 'action', 'file_id', 'cat_id', 'deltpl', 'hash_sync', 'doit', 'ids', 'files', 'cats', 'batch_sync' /* , 's'*/)); // keep search keyword
    948952        $clean_uri = admin_url('admin.php?page=wpfilebase_manage&batch_sync='
    949             . (int)!empty($_GET['batch_sync']));
     953            . (int) ! empty($_GET['batch_sync']));
    950954
    951955        // first files should be deleted, then cats!
    952         if (!empty($result['missing_files'])) {
     956        if ( ! empty($result['missing_files'])) {
    953957            echo '<p>' . sprintf(__('%d Files could not be found.',
    954958                    'wp-filebase'), count($result['missing_files'])) . ' ' .
     
    961965                        . __('Remove entries from database', 'wp-filebase')
    962966                        . '</a>')) . '</p>';
    963         } elseif (!empty($result['missing_folders'])) {
     967        } elseif ( ! empty($result['missing_folders'])) {
    964968            echo '<p>' . sprintf(__('%d Category Folders could not be found.',
    965969                    'wp-filebase'), count($result['missing_folders'])) . ' ' .
     
    977981    static function PrintDebugTrace($tag = "")
    978982    {
    979         if (!empty($_GET['debug'])) {
     983        if ( ! empty($_GET['debug'])) {
    980984            wpfb_loadclass('Output');
    981985            $ms = self::GetMemStats();
     
    10471051        if ($init) {
    10481052            $this->files = WPFB_File::GetFiles2();
    1049             $this->cats = WPFB_Category::GetCats();
    1050             $this->log = array(
    1051                 'missing_files' => array(),
    1052                 'missing_folders' => array(),
    1053                 'changed' => array(),
    1054                 'not_added' => array(),
    1055                 'error' => array(),
     1053            $this->cats  = WPFB_Category::GetCats();
     1054            $this->log   = array(
     1055                'missing_files'      => array(),
     1056                'missing_folders'    => array(),
     1057                'changed'            => array(),
     1058                'not_added'          => array(),
     1059                'error'              => array(),
    10561060                'updated_categories' => array(),
    1057                 'warnings' => array()
     1061                'warnings'           => array()
    10581062            );
    10591063
    1060             $this->known_filenames = array();
    1061             $this->new_files = array();
    1062             $this->missing_files = array();
    1063             $this->num_files_to_add = 0;
    1064             $this->num_all_files = 0;
     1064            $this->known_filenames     = array();
     1065            $this->new_files           = array();
     1066            $this->missing_files       = array();
     1067            $this->num_files_to_add    = 0;
     1068            $this->num_all_files       = 0;
    10651069            $this->num_files_processed = 0;
    10661070
    10671071            $this->time_begin = microtime(true);
    1068             $this->mem_peak = memory_get_peak_usage();
     1072            $this->mem_peak   = memory_get_peak_usage();
    10691073        }
    10701074    }
  • wp-filebase/trunk/classes/Widget.php

    r1254671 r1324861  
    22class WPFB_Widget {
    33   
    4 static function InitClass() {
     4static function register() {
    55    register_widget('WPFB_UploadWidget');
    66    register_widget('WPFB_AddCategoryWidget');
  • wp-filebase/trunk/css/admin.css

    r1321065 r1324861  
    701701     text-align: center;
    702702     width: 100%;
    703      top: 100%;
    704      margin-top: -3em;
     703    top: 50%;
     704    margin-top: 30px;
    705705     font-weight: bold;
    706706     text-shadow: 0px 0px 1px white,0px 0px 1px white;
  • wp-filebase/trunk/images/iron-icons.svg

    r1321065 r1324861  
    88-->
    99<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    10 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs>
     10<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
     11<defs>
    1112<g id="3d-rotation"><path d="M7.52 21.48C4.25 19.94 1.91 16.76 1.55 13H.05C.56 19.16 5.71 24 12 24l.66-.03-3.81-3.81-1.33 1.32zm.89-6.52c-.19 0-.37-.03-.52-.08-.16-.06-.29-.13-.4-.24-.11-.1-.2-.22-.26-.37-.06-.14-.09-.3-.09-.47h-1.3c0 .36.07.68.21.95.14.27.33.5.56.69.24.18.51.32.82.41.3.1.62.15.96.15.37 0 .72-.05 1.03-.15.32-.1.6-.25.83-.44s.42-.43.55-.72c.13-.29.2-.61.2-.97 0-.19-.02-.38-.07-.56-.05-.18-.12-.35-.23-.51-.1-.16-.24-.3-.4-.43-.17-.13-.37-.23-.61-.31.2-.09.37-.2.52-.33.15-.13.27-.27.37-.42.1-.15.17-.3.22-.46.05-.16.07-.32.07-.48 0-.36-.06-.68-.18-.96-.12-.28-.29-.51-.51-.69-.2-.19-.47-.33-.77-.43C9.1 8.05 8.76 8 8.39 8c-.36 0-.69.05-1 .16-.3.11-.57.26-.79.45-.21.19-.38.41-.51.67-.12.26-.18.54-.18.85h1.3c0-.17.03-.32.09-.45s.14-.25.25-.34c.11-.09.23-.17.38-.22.15-.05.3-.08.48-.08.4 0 .7.1.89.31.19.2.29.49.29.86 0 .18-.03.34-.08.49-.05.15-.14.27-.25.37-.11.1-.25.18-.41.24-.16.06-.36.09-.58.09H7.5v1.03h.77c.22 0 .42.02.6.07s.33.13.45.23c.12.11.22.24.29.4.07.16.1.35.1.57 0 .41-.12.72-.35.93-.23.23-.55.33-.95.33zm8.55-5.92c-.32-.33-.7-.59-1.14-.77-.43-.18-.92-.27-1.46-.27H12v8h2.3c.55 0 1.06-.09 1.51-.27.45-.18.84-.43 1.16-.76.32-.33.57-.73.74-1.19.17-.47.26-.99.26-1.57v-.4c0-.58-.09-1.1-.26-1.57-.18-.47-.43-.87-.75-1.2zm-.39 3.16c0 .42-.05.79-.14 1.13-.1.33-.24.62-.43.85-.19.23-.43.41-.71.53-.29.12-.62.18-.99.18h-.91V9.12h.97c.72 0 1.27.23 1.64.69.38.46.57 1.12.57 1.99v.4zM12 0l-.66.03 3.81 3.81 1.33-1.33c3.27 1.55 5.61 4.72 5.96 8.48h1.5C23.44 4.84 18.29 0 12 0z"/></g>
    1213<g id="accessibility"><path d="M12 2c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2zm9 7h-6v13h-2v-6h-2v6H9V9H3V7h18v2z"/></g>
     14<g id="accessible"><circle cx="12" cy="4" r="2"/><path d="M19 13v-2c-1.54.02-3.09-.75-4.07-1.83l-1.29-1.43c-.17-.19-.38-.34-.61-.45-.01 0-.01-.01-.02-.01H13c-.35-.2-.75-.3-1.19-.26C10.76 7.11 10 8.04 10 9.09V15c0 1.1.9 2 2 2h5v5h2v-5.5c0-1.1-.9-2-2-2h-3v-3.45c1.29 1.07 3.25 1.94 5 1.95zm-6.17 5c-.41 1.16-1.52 2-2.83 2-1.66 0-3-1.34-3-3 0-1.31.84-2.41 2-2.83V12.1c-2.28.46-4 2.48-4 4.9 0 2.76 2.24 5 5 5 2.42 0 4.44-1.72 4.9-4h-2.07z"/></g>
    1315<g id="account-balance"><path d="M4 10v7h3v-7H4zm6 0v7h3v-7h-3zM2 22h19v-3H2v3zm14-12v7h3v-7h-3zm-4.5-9L2 6v2h19V6l-9.5-5z"/></g>
    1416<g id="account-balance-wallet"><path d="M21 18v1c0 1.1-.9 2-2 2H5c-1.11 0-2-.9-2-2V5c0-1.1.89-2 2-2h14c1.1 0 2 .9 2 2v1h-9c-1.11 0-2 .9-2 2v8c0 1.1.89 2 2 2h9zm-9-2h10V8H12v8zm4-2.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"/></g>
     
    2527<g id="alarm-off"><path d="M12 6c3.87 0 7 3.13 7 7 0 .84-.16 1.65-.43 2.4l1.52 1.52c.58-1.19.91-2.51.91-3.92 0-4.97-4.03-9-9-9-1.41 0-2.73.33-3.92.91L9.6 6.43C10.35 6.16 11.16 6 12 6zm10-.28l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM2.92 2.29L1.65 3.57 2.98 4.9l-1.11.93 1.42 1.42 1.11-.94.8.8C3.83 8.69 3 10.75 3 13c0 4.97 4.02 9 9 9 2.25 0 4.31-.83 5.89-2.2l2.2 2.2 1.27-1.27L3.89 3.27l-.97-.98zm13.55 16.1C15.26 19.39 13.7 20 12 20c-3.87 0-7-3.13-7-7 0-1.7.61-3.26 1.61-4.47l9.86 9.86zM8.02 3.28L6.6 1.86l-.86.71 1.42 1.42.86-.71z"/></g>
    2628<g id="alarm-on"><path d="M22 5.72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM7.88 3.39L6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97 0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7zm-1.46-5.47L8.41 12.4l-1.06 1.06 3.18 3.18 6-6-1.06-1.06-4.93 4.95z"/></g>
     29<g id="all-out"><path d="M16.21 4.16l4 4v-4zm4 12l-4 4h4zm-12 4l-4-4v4zm-4-12l4-4h-4zm12.95-.95c-2.73-2.73-7.17-2.73-9.9 0s-2.73 7.17 0 9.9 7.17 2.73 9.9 0 2.73-7.16 0-9.9zm-1.1 8.8c-2.13 2.13-5.57 2.13-7.7 0s-2.13-5.57 0-7.7 5.57-2.13 7.7 0 2.13 5.57 0 7.7z"/></g>
    2730<g id="android"><path d="M6 18c0 .55.45 1 1 1h1v3.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5V19h2v3.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5V19h1c.55 0 1-.45 1-1V8H6v10zM3.5 8C2.67 8 2 8.67 2 9.5v7c0 .83.67 1.5 1.5 1.5S5 17.33 5 16.5v-7C5 8.67 4.33 8 3.5 8zm17 0c-.83 0-1.5.67-1.5 1.5v7c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5v-7c0-.83-.67-1.5-1.5-1.5zm-4.97-5.84l1.3-1.3c.2-.2.2-.51 0-.71-.2-.2-.51-.2-.71 0l-1.48 1.48C13.85 1.23 12.95 1 12 1c-.96 0-1.86.23-2.66.63L7.85.15c-.2-.2-.51-.2-.71 0-.2.2-.2.51 0 .71l1.31 1.31C6.97 3.26 6 5.01 6 7h12c0-1.99-.97-3.75-2.47-4.84zM10 5H9V4h1v1zm5 0h-1V4h1v1z"/></g>
    2831<g id="announcement"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 9h-2V5h2v6zm0 4h-2v-2h2v2z"/></g>
     
    3033<g id="archive"><path d="M20.54 5.23l-1.39-1.68C18.88 3.21 18.47 3 18 3H6c-.47 0-.88.21-1.16.55L3.46 5.23C3.17 5.57 3 6.02 3 6.5V19c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V6.5c0-.48-.17-.93-.46-1.27zM12 17.5L6.5 12H10v-2h4v2h3.5L12 17.5zM5.12 5l.81-1h12l.94 1H5.12z"/></g>
    3134<g id="arrow-back"><path d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"/></g>
     35<g id="arrow-downward"><path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z"/></g>
    3236<g id="arrow-drop-down"><path d="M7 10l5 5 5-5z"/></g>
    3337<g id="arrow-drop-down-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 12l-4-4h8l-4 4z"/></g>
    3438<g id="arrow-drop-up"><path d="M7 14l5-5 5 5z"/></g>
    3539<g id="arrow-forward"><path d="M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z"/></g>
     40<g id="arrow-upward"><path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z"/></g>
    3641<g id="aspect-ratio"><path d="M19 12h-2v3h-3v2h5v-5zM7 9h3V7H5v5h2V9zm14-6H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16.01H3V4.99h18v14.02z"/></g>
    3742<g id="assessment"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z"/></g>
     
    4247<g id="assignment-returned"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm0 15l-5-5h3V9h4v4h3l-5 5z"/></g>
    4348<g id="assignment-turned-in"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm-2 14l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z"/></g>
    44 <g id="attachment"><path d="M7.5 18C4.46 18 2 15.54 2 12.5S4.46 7 7.5 7H18c2.21 0 4 1.79 4 4s-1.79 4-4 4H9.5C8.12 15 7 13.88 7 12.5S8.12 10 9.5 10H17v1.5H9.5c-.55 0-1 .45-1 1s.45 1 1 1H18c1.38 0 2.5-1.12 2.5-2.5S19.38 8.5 18 8.5H7.5c-2.21 0-4 1.79-4 4s1.79 4 4 4H17V18H7.5z"/></g>
     49<g id="attachment"><path d="M2 12.5C2 9.46 4.46 7 7.5 7H18c2.21 0 4 1.79 4 4s-1.79 4-4 4H9.5C8.12 15 7 13.88 7 12.5S8.12 10 9.5 10H17v2H9.41c-.55 0-.55 1 0 1H18c1.1 0 2-.9 2-2s-.9-2-2-2H7.5C5.57 9 4 10.57 4 12.5S5.57 16 7.5 16H17v2H7.5C4.46 18 2 15.54 2 12.5z"/></g>
    4550<g id="autorenew"><path d="M12 6v3l4-4-4-4v3c-4.42 0-8 3.58-8 8 0 1.57.46 3.03 1.24 4.26L6.7 14.8c-.45-.83-.7-1.79-.7-2.8 0-3.31 2.69-6 6-6zm6.76 1.74L17.3 9.2c.44.84.7 1.79.7 2.8 0 3.31-2.69 6-6 6v-3l-4 4 4 4v-3c4.42 0 8-3.58 8-8 0-1.57-.46-3.03-1.24-4.26z"/></g>
    4651<g id="backspace"><path d="M22 3H7c-.69 0-1.23.35-1.59.88L0 12l5.41 8.11c.36.53.9.89 1.59.89h15c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-3 12.59L17.59 17 14 13.41 10.41 17 9 15.59 12.59 12 9 8.41 10.41 7 14 10.59 17.59 7 19 8.41 15.41 12 19 15.59z"/></g>
     
    5358<g id="build"><path d="M22.7 19l-9.1-9.1c.9-2.3.4-5-1.5-6.9-2-2-5-2.4-7.4-1.3L9 6 6 9 1.6 4.7C.4 7.1.9 10.1 2.9 12.1c1.9 1.9 4.6 2.4 6.9 1.5l9.1 9.1c.4.4 1 .4 1.4 0l2.3-2.3c.5-.4.5-1.1.1-1.4z"/></g>
    5459<g id="cached"><path d="M19 8l-4 4h3c0 3.31-2.69 6-6 6-1.01 0-1.97-.25-2.8-.7l-1.46 1.46C8.97 19.54 10.43 20 12 20c4.42 0 8-3.58 8-8h3l-4-4zM6 12c0-3.31 2.69-6 6-6 1.01 0 1.97.25 2.8.7l1.46-1.46C15.03 4.46 13.57 4 12 4c-4.42 0-8 3.58-8 8H1l4 4 4-4H6z"/></g>
    55 <g id="camera-enhance"><path d="M9 3L7.17 5H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2h-3.17L15 3H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zM12 17l1.25-2.75L16 13l-2.75-1.25L12 9l-1.25 2.75L8 13l2.75 1.25z"/></g>
     60<g id="camera-enhance"><path d="M9 3L7.17 5H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2h-3.17L15 3H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-1l1.25-2.75L16 13l-2.75-1.25L12 9l-1.25 2.75L8 13l2.75 1.25z"/></g>
    5661<g id="cancel"><path d="M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z"/></g>
    5762<g id="card-giftcard"><path d="M20 6h-2.18c.11-.31.18-.65.18-1 0-1.66-1.34-3-3-3-1.05 0-1.96.54-2.5 1.35l-.5.67-.5-.68C10.96 2.54 10.05 2 9 2 7.34 2 6 3.34 6 5c0 .35.07.69.18 1H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-5-2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM9 4c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm11 15H4v-2h16v2zm0-5H4V8h5.08L7 10.83 8.62 12 11 8.76l1-1.36 1 1.36L15.38 12 17 10.83 14.92 8H20v6z"/></g>
     
    7782<g id="cloud-upload"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"/></g>
    7883<g id="code"><path d="M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"/></g>
     84<g id="compare-arrows"><path d="M9.01 14H2v2h7.01v3L13 15l-3.99-4v3zm5.98-1v-3H22V8h-7.01V5L11 9l3.99 4z"/></g>
    7985<g id="content-copy"><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/></g>
    8086<g id="content-cut"><path d="M9.64 7.64c.23-.5.36-1.05.36-1.64 0-2.21-1.79-4-4-4S2 3.79 2 6s1.79 4 4 4c.59 0 1.14-.13 1.64-.36L10 12l-2.36 2.36C7.14 14.13 6.59 14 6 14c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4c0-.59-.13-1.14-.36-1.64L12 14l7 7h3v-1L9.64 7.64zM6 8c-1.1 0-2-.89-2-2s.9-2 2-2 2 .89 2 2-.9 2-2 2zm0 12c-1.1 0-2-.89-2-2s.9-2 2-2 2 .89 2 2-.9 2-2 2zm6-7.5c-.28 0-.5-.22-.5-.5s.22-.5.5-.5.5.22.5.5-.22.5-.5.5zM19 3l-6 6 2 2 7-7V3z"/></g>
    8187<g id="content-paste"><path d="M19 2h-4.18C14.4.84 13.3 0 12 0c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm7 18H5V4h2v3h10V4h2v16z"/></g>
     88<g id="copyright"><path d="M10.08 10.86c.05-.33.16-.62.3-.87s.34-.46.59-.62c.24-.15.54-.22.91-.23.23.01.44.05.63.13.2.09.38.21.52.36s.25.33.34.53.13.42.14.64h1.79c-.02-.47-.11-.9-.28-1.29s-.4-.73-.7-1.01-.66-.5-1.08-.66-.88-.23-1.39-.23c-.65 0-1.22.11-1.7.34s-.88.53-1.2.92-.56.84-.71 1.36S8 11.29 8 11.87v.27c0 .58.08 1.12.23 1.64s.39.97.71 1.35.72.69 1.2.91 1.05.34 1.7.34c.47 0 .91-.08 1.32-.23s.77-.36 1.08-.63.56-.58.74-.94.29-.74.3-1.15h-1.79c-.01.21-.06.4-.15.58s-.21.33-.36.46-.32.23-.52.3c-.19.07-.39.09-.6.1-.36-.01-.66-.08-.89-.23-.25-.16-.45-.37-.59-.62s-.25-.55-.3-.88-.08-.67-.08-1v-.27c0-.35.03-.68.08-1.01zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/></g>
    8289<g id="create"><path d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"/></g>
     90<g id="create-new-folder"><path d="M20 6h-8l-2-2H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-1 8h-3v3h-2v-3h-3v-2h3V9h2v3h3v2z"/></g>
    8391<g id="credit-card"><path d="M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4v-6h16v6zm0-10H4V6h16v2z"/></g>
    8492<g id="dashboard"><path d="M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6h8V3h-8z"/></g>
     93<g id="date-range"><path d="M9 11H7v2h2v-2zm4 0h-2v2h2v-2zm4 0h-2v2h2v-2zm2-7h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 16H5V9h14v11z"/></g>
    8594<g id="delete"><path d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"/></g>
    8695<g id="description"><path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z"/></g>
     
    8897<g id="done"><path d="M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z"/></g>
    8998<g id="done-all"><path d="M18 7l-1.41-1.41-6.34 6.34 1.41 1.41L18 7zm4.24-1.41L11.66 16.17 7.48 12l-1.41 1.41L11.66 19l12-12-1.42-1.41zM.41 13.41L6 19l1.41-1.41L1.83 12 .41 13.41z"/></g>
     99<g id="donut-large"><path d="M11 5.08V2c-5 .5-9 4.81-9 10s4 9.5 9 10v-3.08c-3-.48-6-3.4-6-6.92s3-6.44 6-6.92zM18.97 11H22c-.47-5-4-8.53-9-9v3.08C16 5.51 18.54 8 18.97 11zM13 18.92V22c5-.47 8.53-4 9-9h-3.03c-.43 3-2.97 5.49-5.97 5.92z"/></g>
     100<g id="donut-small"><path d="M11 9.16V2c-5 .5-9 4.79-9 10s4 9.5 9 10v-7.16c-1-.41-2-1.52-2-2.84s1-2.43 2-2.84zM14.86 11H22c-.48-4.75-4-8.53-9-9v7.16c1 .3 1.52.98 1.86 1.84zM13 14.84V22c5-.47 8.52-4.25 9-9h-7.14c-.34.86-.86 1.54-1.86 1.84z"/></g>
    90101<g id="drafts"><path d="M21.99 8c0-.72-.37-1.35-.94-1.7L12 1 2.95 6.3C2.38 6.65 2 7.28 2 8v10c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2l-.01-10zM12 13L3.74 7.84 12 3l8.26 4.84L12 13z"/></g>
    91102<g id="eject"><path d="M5 17h14v2H5zm7-12L5.33 15h13.34z"/></g>
     
    93104<g id="error-outline"><path d="M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"/></g>
    94105<g id="event"><path d="M17 12h-5v5h5v-5zM16 1v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-1V1h-2zm3 18H5V8h14v11z"/></g>
    95 <g id="event-seat"><defs><path id="a" d="M0 0h24v24H0V0z"/></defs><clipPath id="b"><use xlink:href="#a" overflow="visible"/></clipPath><path d="M4 18v3h3v-3h10v3h3v-6H4zm15-8h3v3h-3zM2 10h3v3H2zm15 3H7V5c0-1.1.9-2 2-2h6c1.1 0 2 .9 2 2v8z" clip-path="url(#b)"/></g>
     106<g id="event-seat"><path d="M4 18v3h3v-3h10v3h3v-6H4zm15-8h3v3h-3zM2 10h3v3H2zm15 3H7V5c0-1.1.9-2 2-2h6c1.1 0 2 .9 2 2v8z"/></g>
    96107<g id="exit-to-app"><path d="M10.09 15.59L11.5 17l5-5-5-5-1.41 1.41L12.67 11H3v2h9.67l-2.58 2.59zM19 3H5c-1.11 0-2 .9-2 2v4h2V5h14v14H5v-4H3v4c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"/></g>
    97108<g id="expand-less"><path d="M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z"/></g>
     
    108119<g id="find-in-page"><path d="M20 19.59V8l-6-6H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c.45 0 .85-.15 1.19-.4l-4.43-4.43c-.8.52-1.74.83-2.76.83-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5c0 1.02-.31 1.96-.83 2.75L20 19.59zM9 13c0 1.66 1.34 3 3 3s3-1.34 3-3-1.34-3-3-3-3 1.34-3 3z"/></g>
    109120<g id="find-replace"><path d="M11 6c1.38 0 2.63.56 3.54 1.46L12 10h6V4l-2.05 2.05C14.68 4.78 12.93 4 11 4c-3.53 0-6.43 2.61-6.92 6H6.1c.46-2.28 2.48-4 4.9-4zm5.64 9.14c.66-.9 1.12-1.97 1.28-3.14H15.9c-.46 2.28-2.48 4-4.9 4-1.38 0-2.63-.56-3.54-1.46L10 12H4v6l2.05-2.05C7.32 17.22 9.07 18 11 18c1.55 0 2.98-.51 4.14-1.36L20 21.49 21.49 20l-4.85-4.86z"/></g>
     121<g id="fingerprint"><path d="M17.81 4.47c-.08 0-.16-.02-.23-.06C15.66 3.42 14 3 12.01 3c-1.98 0-3.86.47-5.57 1.41-.24.13-.54.04-.68-.2-.13-.24-.04-.55.2-.68C7.82 2.52 9.86 2 12.01 2c2.13 0 3.99.47 6.03 1.52.25.13.34.43.21.67-.09.18-.26.28-.44.28zM3.5 9.72c-.1 0-.2-.03-.29-.09-.23-.16-.28-.47-.12-.7.99-1.4 2.25-2.5 3.75-3.27C9.98 4.04 14 4.03 17.15 5.65c1.5.77 2.76 1.86 3.75 3.25.16.22.11.54-.12.7-.23.16-.54.11-.7-.12-.9-1.26-2.04-2.25-3.39-2.94-2.87-1.47-6.54-1.47-9.4.01-1.36.7-2.5 1.7-3.4 2.96-.08.14-.23.21-.39.21zm6.25 12.07c-.13 0-.26-.05-.35-.15-.87-.87-1.34-1.43-2.01-2.64-.69-1.23-1.05-2.73-1.05-4.34 0-2.97 2.54-5.39 5.66-5.39s5.66 2.42 5.66 5.39c0 .28-.22.5-.5.5s-.5-.22-.5-.5c0-2.42-2.09-4.39-4.66-4.39-2.57 0-4.66 1.97-4.66 4.39 0 1.44.32 2.77.93 3.85.64 1.15 1.08 1.64 1.85 2.42.19.2.19.51 0 .71-.11.1-.24.15-.37.15zm7.17-1.85c-1.19 0-2.24-.3-3.1-.89-1.49-1.01-2.38-2.65-2.38-4.39 0-.28.22-.5.5-.5s.5.22.5.5c0 1.41.72 2.74 1.94 3.56.71.48 1.54.71 2.54.71.24 0 .64-.03 1.04-.1.27-.05.53.13.58.41.05.27-.13.53-.41.58-.57.11-1.07.12-1.21.12zM14.91 22c-.04 0-.09-.01-.13-.02-1.59-.44-2.63-1.03-3.72-2.1-1.4-1.39-2.17-3.24-2.17-5.22 0-1.62 1.38-2.94 3.08-2.94 1.7 0 3.08 1.32 3.08 2.94 0 1.07.93 1.94 2.08 1.94s2.08-.87 2.08-1.94c0-3.77-3.25-6.83-7.25-6.83-2.84 0-5.44 1.58-6.61 4.03-.39.81-.59 1.76-.59 2.8 0 .78.07 2.01.67 3.61.1.26-.03.55-.29.64-.26.1-.55-.04-.64-.29-.49-1.31-.73-2.61-.73-3.96 0-1.2.23-2.29.68-3.24 1.33-2.79 4.28-4.6 7.51-4.6 4.55 0 8.25 3.51 8.25 7.83 0 1.62-1.38 2.94-3.08 2.94s-3.08-1.32-3.08-2.94c0-1.07-.93-1.94-2.08-1.94s-2.08.87-2.08 1.94c0 1.71.66 3.31 1.87 4.51.95.94 1.86 1.46 3.27 1.85.27.07.42.35.35.61-.05.23-.26.38-.47.38z"/></g>
    110122<g id="flag"><path d="M14.4 6L14 4H5v17h2v-7h5.6l.4 2h7V6z"/></g>
    111 <g id="flight-land"><defs><path id="a" d="M0 0h24v24H0V0z"/></defs><defs><path id="c" d="M0 0h24v24H0V0z"/></defs><clipPath id="b"><use xlink:href="#a" overflow="visible"/></clipPath><clipPath id="d" clip-path="url(#b)"><use xlink:href="#c" overflow="visible"/></clipPath><path d="M2.5 19h19v2h-19zm7.18-5.73l4.35 1.16 5.31 1.42c.8.21 1.62-.26 1.84-1.06.21-.8-.26-1.62-1.06-1.84l-5.31-1.42-2.76-9.02L10.12 2v8.28L5.15 8.95l-.93-2.32-1.45-.39v5.17l1.6.43 5.31 1.43z" clip-path="url(#d)"/></g>
    112 <g id="flight-takeoff"><defs><path id="a" d="M0 0h24v24H0V0z"/></defs><clipPath id="b"><use xlink:href="#a" overflow="visible"/></clipPath><path d="M2.5 19h19v2h-19zm19.57-9.36c-.21-.8-1.04-1.28-1.84-1.06L14.92 10l-6.9-6.43-1.93.51 4.14 7.17-4.97 1.33-1.97-1.54-1.45.39 1.82 3.16.77 1.33 1.6-.43 5.31-1.42 4.35-1.16L21 11.49c.81-.23 1.28-1.05 1.07-1.85z" clip-path="url(#b)"/></g>
     123<g id="flight-land"><path d="M2.5 19h19v2h-19zm7.18-5.73l4.35 1.16 5.31 1.42c.8.21 1.62-.26 1.84-1.06.21-.8-.26-1.62-1.06-1.84l-5.31-1.42-2.76-9.02L10.12 2v8.28L5.15 8.95l-.93-2.32-1.45-.39v5.17l1.6.43 5.31 1.43z"/></g>
     124<g id="flight-takeoff"><path d="M2.5 19h19v2h-19zm19.57-9.36c-.21-.8-1.04-1.28-1.84-1.06L14.92 10l-6.9-6.43-1.93.51 4.14 7.17-4.97 1.33-1.97-1.54-1.45.39 1.82 3.16.77 1.33 1.6-.43 5.31-1.42 4.35-1.16L21 11.49c.81-.23 1.28-1.05 1.07-1.85z"/></g>
    113125<g id="flip-to-back"><path d="M9 7H7v2h2V7zm0 4H7v2h2v-2zm0-8c-1.11 0-2 .9-2 2h2V3zm4 12h-2v2h2v-2zm6-12v2h2c0-1.1-.9-2-2-2zm-6 0h-2v2h2V3zM9 17v-2H7c0 1.1.89 2 2 2zm10-4h2v-2h-2v2zm0-4h2V7h-2v2zm0 8c1.1 0 2-.9 2-2h-2v2zM5 7H3v12c0 1.1.89 2 2 2h12v-2H5V7zm10-2h2V3h-2v2zm0 12h2v-2h-2v2z"/></g>
    114126<g id="flip-to-front"><path d="M3 13h2v-2H3v2zm0 4h2v-2H3v2zm2 4v-2H3c0 1.1.89 2 2 2zM3 9h2V7H3v2zm12 12h2v-2h-2v2zm4-18H9c-1.11 0-2 .9-2 2v10c0 1.1.89 2 2 2h10c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 12H9V5h10v10zm-8 6h2v-2h-2v2zm-4 0h2v-2H7v2z"/></g>
     
    120132<g id="fullscreen"><path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/></g>
    121133<g id="fullscreen-exit"><path d="M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"/></g>
     134<g id="gavel"><path d="M1 21h12v2H1zM5.245 8.07l2.83-2.827 14.14 14.142-2.828 2.828zM12.317 1l5.657 5.656-2.83 2.83-5.654-5.66zM3.825 9.485l5.657 5.657-2.828 2.828-5.657-5.657z"/></g>
    122135<g id="gesture"><path d="M4.59 6.89c.7-.71 1.4-1.35 1.71-1.22.5.2 0 1.03-.3 1.52-.25.42-2.86 3.89-2.86 6.31 0 1.28.48 2.34 1.34 2.98.75.56 1.74.73 2.64.46 1.07-.31 1.95-1.4 3.06-2.77 1.21-1.49 2.83-3.44 4.08-3.44 1.63 0 1.65 1.01 1.76 1.79-3.78.64-5.38 3.67-5.38 5.37 0 1.7 1.44 3.09 3.21 3.09 1.63 0 4.29-1.33 4.69-6.1H21v-2.5h-2.47c-.15-1.65-1.09-4.2-4.03-4.2-2.25 0-4.18 1.91-4.94 2.84-.58.73-2.06 2.48-2.29 2.72-.25.3-.68.84-1.11.84-.45 0-.72-.83-.36-1.92.35-1.09 1.4-2.86 1.85-3.52.78-1.14 1.3-1.92 1.3-3.28C8.95 3.69 7.31 3 6.44 3 5.12 3 3.97 4 3.72 4.25c-.36.36-.66.66-.88.93l1.75 1.71zm9.29 11.66c-.31 0-.74-.26-.74-.72 0-.6.73-2.2 2.87-2.76-.3 2.69-1.43 3.48-2.13 3.48z"/></g>
    123136<g id="get-app"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"/></g>
    124 <g id="gif"><defs><path id="a" d="M24 24H0V0h24v24z"/></defs><clipPath id="b"><use xlink:href="#a" overflow="visible"/></clipPath><path d="M11.5 9H13v6h-1.5zM9 9H6c-.6 0-1 .5-1 1v4c0 .5.4 1 1 1h3c.6 0 1-.5 1-1v-2H8.5v1.5h-2v-3H10V10c0-.5-.4-1-1-1zm10 1.5V9h-4.5v6H16v-2h2v-1.5h-2v-1z" clip-path="url(#b)"/></g>
     137<g id="gif"><path d="M11.5 9H13v6h-1.5zM9 9H6c-.6 0-1 .5-1 1v4c0 .5.4 1 1 1h3c.6 0 1-.5 1-1v-2H8.5v1.5h-2v-3H10V10c0-.5-.4-1-1-1zm10 1.5V9h-4.5v6H16v-2h2v-1.5h-2v-1z"/></g>
    125138<g id="grade"><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"/></g>
    126139<g id="group-work"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zM8 17.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5zM9.5 8c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5S9.5 9.38 9.5 8zm6.5 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"/></g>
     
    128141<g id="help-outline"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"/></g>
    129142<g id="highlight-off"><path d="M14.59 8L12 10.59 9.41 8 8 9.41 10.59 12 8 14.59 9.41 16 12 13.41 14.59 16 16 14.59 13.41 12 16 9.41 14.59 8zM12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/></g>
    130 <g id="history"><path opacity=".9" d="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"/></g>
     143<g id="history"><path d="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"/></g>
    131144<g id="home"><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></g>
    132145<g id="hourglass-empty"><path d="M6 2v6h.01L6 8.01 10 12l-4 4 .01.01H6V22h12v-5.99h-.01L18 16l-4-4 4-3.99-.01-.01H18V2H6zm10 14.5V20H8v-3.5l4-4 4 4zm-4-5l-4-4V4h8v3.5l-4 4z"/></g>
     
    134147<g id="http"><path d="M4.5 11h-2V9H1v6h1.5v-2.5h2V15H6V9H4.5v2zm2.5-.5h1.5V15H10v-4.5h1.5V9H7v1.5zm5.5 0H14V15h1.5v-4.5H17V9h-4.5v1.5zm9-1.5H18v6h1.5v-2h2c.8 0 1.5-.7 1.5-1.5v-1c0-.8-.7-1.5-1.5-1.5zm0 2.5h-2v-1h2v1z"/></g>
    135148<g id="https"><path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z"/></g>
    136 <g id="inbox"><path d="M19 3H4.99c-1.1 0-1.98.9-1.98 2L3 19c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 12h-4c0 1.66-1.34 3-3 3s-3-1.34-3-3H4.99V5H19v10zm-3-5h-2V7h-4v3H8l4 4 4-4z"/></g>
    137 <g id="indeterminate-check-box"><defs><path id="a" d="M0 0h24v24H0z"/></defs><clipPath id="b"><use xlink:href="#a" overflow="visible"/></clipPath><path clip-path="url(#b)" d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"/></g>
     149<g id="important-devices"><path d="M23 11.01L18 11c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h5c.55 0 1-.45 1-1v-9c0-.55-.45-.99-1-.99zM23 20h-5v-7h5v7zM20 2H2C.89 2 0 2.89 0 4v12c0 1.1.89 2 2 2h7v2H7v2h8v-2h-2v-2h2v-2H2V4h18v5h2V4c0-1.11-.9-2-2-2zm-8.03 7L11 6l-.97 3H7l2.47 1.76-.94 2.91 2.47-1.8 2.47 1.8-.94-2.91L15 9h-3.03z"/></g>
     150<g id="inbox"><path d="M19 3H4.99c-1.11 0-1.98.89-1.98 2L3 19c0 1.1.88 2 1.99 2H19c1.1 0 2-.9 2-2V5c0-1.11-.9-2-2-2zm0 12h-4c0 1.66-1.35 3-3 3s-3-1.34-3-3H4.99V5H19v10z"/></g>
     151<g id="indeterminate-check-box"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"/></g>
    138152<g id="info"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/></g>
    139153<g id="info-outline"><path d="M11 17h2v-6h-2v6zm1-15C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zM11 9h2V7h-2v2z"/></g>
     
    144158<g id="language"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zm6.93 6h-2.95c-.32-1.25-.78-2.45-1.38-3.56 1.84.63 3.37 1.91 4.33 3.56zM12 4.04c.83 1.2 1.48 2.53 1.91 3.96h-3.82c.43-1.43 1.08-2.76 1.91-3.96zM4.26 14C4.1 13.36 4 12.69 4 12s.1-1.36.26-2h3.38c-.08.66-.14 1.32-.14 2 0 .68.06 1.34.14 2H4.26zm.82 2h2.95c.32 1.25.78 2.45 1.38 3.56-1.84-.63-3.37-1.9-4.33-3.56zm2.95-8H5.08c.96-1.66 2.49-2.93 4.33-3.56C8.81 5.55 8.35 6.75 8.03 8zM12 19.96c-.83-1.2-1.48-2.53-1.91-3.96h3.82c-.43 1.43-1.08 2.76-1.91 3.96zM14.34 14H9.66c-.09-.66-.16-1.32-.16-2 0-.68.07-1.35.16-2h4.68c.09.65.16 1.32.16 2 0 .68-.07 1.34-.16 2zm.25 5.56c.6-1.11 1.06-2.31 1.38-3.56h2.95c-.96 1.65-2.49 2.93-4.33 3.56zM16.36 14c.08-.66.14-1.32.14-2 0-.68-.06-1.34-.14-2h3.38c.16.64.26 1.31.26 2s-.1 1.36-.26 2h-3.38z"/></g>
    145159<g id="launch"><path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"/></g>
     160<g id="lightbulb-outline"><path d="M9 21c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-1H9v1zm3-19C8.14 2 5 5.14 5 9c0 2.38 1.19 4.47 3 5.74V17c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-2.26c1.81-1.27 3-3.36 3-5.74 0-3.86-3.14-7-7-7zm2.85 11.1l-.85.6V16h-4v-2.3l-.85-.6C7.8 12.16 7 10.63 7 9c0-2.76 2.24-5 5-5s5 2.24 5 5c0 1.63-.8 3.16-2.15 4.1z"/></g>
     161<g id="line-style"><path d="M3 16h5v-2H3v2zm6.5 0h5v-2h-5v2zm6.5 0h5v-2h-5v2zM3 20h2v-2H3v2zm4 0h2v-2H7v2zm4 0h2v-2h-2v2zm4 0h2v-2h-2v2zm4 0h2v-2h-2v2zM3 12h8v-2H3v2zm10 0h8v-2h-8v2zM3 4v4h18V4H3z"/></g>
     162<g id="line-weight"><path d="M3 17h18v-2H3v2zm0 3h18v-1H3v1zm0-7h18v-3H3v3zm0-9v4h18V4H3z"/></g>
    146163<g id="link"><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/></g>
    147164<g id="list"><path d="M3 13h2v-2H3v2zm0 4h2v-2H3v2zm0-8h2V7H3v2zm4 4h14v-2H7v2zm0 4h14v-2H7v2zM7 7v2h14V7H7z"/></g>
    148165<g id="lock"><path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z"/></g>
    149166<g id="lock-open"><path d="M12 17c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6-9h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6h1.9c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm0 12H6V10h12v10z"/></g>
    150 <g id="lock-outline"><path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6-5.1c1.71 0 3.1 1.39 3.1 3.1v2H9V6h-.1c0-1.71 1.39-3.1 3.1-3.1zM18 20H6V10h12v10zm-6-3c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z"/></g>
     167<g id="lock-outline"><path d="M12 17c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6-9h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM8.9 6c0-1.71 1.39-3.1 3.1-3.1s3.1 1.39 3.1 3.1v2H8.9V6zM18 20H6V10h12v10z"/></g>
    151168<g id="loyalty"><path d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7zm11.77 8.27L13 19.54l-4.27-4.27C8.28 14.81 8 14.19 8 13.5c0-1.38 1.12-2.5 2.5-2.5.69 0 1.32.28 1.77.74l.73.72.73-.73c.45-.45 1.08-.73 1.77-.73 1.38 0 2.5 1.12 2.5 2.5 0 .69-.28 1.32-.73 1.77z"/></g>
    152169<g id="mail"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/></g>
     
    156173<g id="more-horiz"><path d="M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/></g>
    157174<g id="more-vert"><path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/></g>
     175<g id="motorcycle"><path d="M19.44 9.03L15.41 5H11v2h3.59l2 2H5c-2.8 0-5 2.2-5 5s2.2 5 5 5c2.46 0 4.45-1.69 4.9-4h1.65l2.77-2.77c-.21.54-.32 1.14-.32 1.77 0 2.8 2.2 5 5 5s5-2.2 5-5c0-2.65-1.97-4.77-4.56-4.97zM7.82 15C7.4 16.15 6.28 17 5 17c-1.63 0-3-1.37-3-3s1.37-3 3-3c1.28 0 2.4.85 2.82 2H5v2h2.82zM19 17c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z"/></g>
     176<g id="move-to-inbox"><path d="M19 3H4.99c-1.11 0-1.98.9-1.98 2L3 19c0 1.1.88 2 1.99 2H19c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 12h-4c0 1.66-1.35 3-3 3s-3-1.34-3-3H4.99V5H19v10zm-3-5h-2V7h-4v3H8l4 4 4-4z"/></g>
     177<g id="next-week"><path d="M20 7h-4V5c0-.55-.22-1.05-.59-1.41C15.05 3.22 14.55 3 14 3h-4c-1.1 0-2 .9-2 2v2H4c-1.1 0-2 .9-2 2v11c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V9c0-1.1-.9-2-2-2zM10 5h4v2h-4V5zm1 13.5l-1-1 3-3-3-3 1-1 4 4-4 4z"/></g>
    158178<g id="note-add"><path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 14h-3v3h-2v-3H8v-2h3v-3h2v3h3v2zm-3-7V3.5L18.5 9H13z"/></g>
    159 <g id="offline-pin"><defs><path id="a" d="M0 0h24v24H0V0z"/></defs><clipPath id="b"><use xlink:href="#a" overflow="visible"/></clipPath><path clip-path="url(#b)" d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2zm5 16H7v-2h10v2zm-6.7-4L7 10.7l1.4-1.4 1.9 1.9 5.3-5.3L17 7.3 10.3 14z"/></g>
     179<g id="offline-pin"><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2zm5 16H7v-2h10v2zm-6.7-4L7 10.7l1.4-1.4 1.9 1.9 5.3-5.3L17 7.3 10.3 14z"/></g>
     180<g id="opacity"><path d="M17.66 8L12 2.35 6.34 8C4.78 9.56 4 11.64 4 13.64s.78 4.11 2.34 5.67 3.61 2.35 5.66 2.35 4.1-.79 5.66-2.35S20 15.64 20 13.64 19.22 9.56 17.66 8zM6 14c.01-2 .62-3.27 1.76-4.4L12 5.27l4.24 4.38C17.38 10.77 17.99 12 18 14H6z"/></g>
    160181<g id="open-in-browser"><path d="M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z"/></g>
    161182<g id="open-in-new"><path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"/></g>
    162183<g id="open-with"><path d="M10 9h4V6h3l-5-5-5 5h3v3zm-1 1H6V7l-5 5 5 5v-3h3v-4zm14 2l-5-5v3h-3v4h3v3l5-5zm-9 3h-4v3H7l5 5 5-5h-3v-3z"/></g>
    163184<g id="pageview"><path d="M11.5 9C10.12 9 9 10.12 9 11.5s1.12 2.5 2.5 2.5 2.5-1.12 2.5-2.5S12.88 9 11.5 9zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-3.21 14.21l-2.91-2.91c-.69.44-1.51.7-2.39.7C9.01 16 7 13.99 7 11.5S9.01 7 11.5 7 16 9.01 16 11.5c0 .88-.26 1.69-.7 2.39l2.91 2.9-1.42 1.42z"/></g>
     185<g id="pan-tool"><path d="M23 5.5V20c0 2.2-1.8 4-4 4h-7.3c-1.08 0-2.1-.43-2.85-1.19L1 14.83s1.26-1.23 1.3-1.25c.22-.19.49-.29.79-.29.22 0 .42.06.6.16.04.01 4.31 2.46 4.31 2.46V4c0-.83.67-1.5 1.5-1.5S11 3.17 11 4v7h1V1.5c0-.83.67-1.5 1.5-1.5S15 .67 15 1.5V11h1V2.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5V11h1V5.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5z"/></g>
    164186<g id="payment"><path d="M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4v-6h16v6zm0-10H4V6h16v2z"/></g>
    165187<g id="perm-camera-mic"><path d="M20 5h-3.17L15 3H9L7.17 5H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h7v-2.09c-2.83-.48-5-2.94-5-5.91h2c0 2.21 1.79 4 4 4s4-1.79 4-4h2c0 2.97-2.17 5.43-5 5.91V21h7c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm-6 8c0 1.1-.9 2-2 2s-2-.9-2-2V9c0-1.1.9-2 2-2s2 .9 2 2v4z"/></g>
     
    171193<g id="perm-phone-msg"><path d="M20 15.5c-1.25 0-2.45-.2-3.57-.57-.35-.11-.74-.03-1.02.24l-2.2 2.2c-2.83-1.44-5.15-3.75-6.59-6.58l2.2-2.21c.28-.27.36-.66.25-1.01C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 17 .55 0 1-.45 1-1v-3.5c0-.55-.45-1-1-1zM12 3v10l3-3h6V3h-9z"/></g>
    172194<g id="perm-scan-wifi"><path d="M12 3C6.95 3 3.15 4.85 0 7.23L12 22 24 7.25C20.85 4.87 17.05 3 12 3zm1 13h-2v-6h2v6zm-2-8V6h2v2h-2z"/></g>
     195<g id="pets"><circle cx="4.5" cy="9.5" r="2.5"/><circle cx="9" cy="5.5" r="2.5"/><circle cx="15" cy="5.5" r="2.5"/><circle cx="19.5" cy="9.5" r="2.5"/><path d="M17.34 14.86c-.87-1.02-1.6-1.89-2.48-2.91-.46-.54-1.05-1.08-1.75-1.32-.11-.04-.22-.07-.33-.09-.25-.04-.52-.04-.78-.04s-.53 0-.79.05c-.11.02-.22.05-.33.09-.7.24-1.28.78-1.75 1.32-.87 1.02-1.6 1.89-2.48 2.91-1.31 1.31-2.92 2.76-2.62 4.79.29 1.02 1.02 2.03 2.33 2.32.73.15 3.06-.44 5.54-.44h.18c2.48 0 4.81.58 5.54.44 1.31-.29 2.04-1.31 2.33-2.32.31-2.04-1.3-3.49-2.61-4.8z"/></g>
    173196<g id="picture-in-picture"><path d="M19 7h-8v6h8V7zm2-4H3c-1.1 0-2 .9-2 2v14c0 1.1.9 1.98 2 1.98h18c1.1 0 2-.88 2-1.98V5c0-1.1-.9-2-2-2zm0 16.01H3V4.98h18v14.03z"/></g>
    174 <g id="play-for-work"><path fill="#010101" d="M11 5v5.59H7.5l4.5 4.5 4.5-4.5H13V5h-2zm-5 9c0 3.31 2.69 6 6 6s6-2.69 6-6h-2c0 2.21-1.79 4-4 4s-4-1.79-4-4H6z"/></g>
     197<g id="picture-in-picture-alt"><path d="M19 11h-8v6h8v-6zm4 8V4.98C23 3.88 22.1 3 21 3H3c-1.1 0-2 .88-2 1.98V19c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2zm-2 .02H3V4.97h18v14.05z"/></g>
     198<g id="play-for-work"><path d="M11 5v5.59H7.5l4.5 4.5 4.5-4.5H13V5h-2zm-5 9c0 3.31 2.69 6 6 6s6-2.69 6-6h-2c0 2.21-1.79 4-4 4s-4-1.79-4-4H6z"/></g>
    175199<g id="polymer"><path d="M19 4h-4L7.11 16.63 4.5 12 9 4H5L.5 12 5 20h4l7.89-12.63L19.5 12 15 20h4l4.5-8z"/></g>
    176200<g id="power-settings-new"><path d="M13 3h-2v10h2V3zm4.83 2.17l-1.42 1.42C17.99 7.86 19 9.81 19 12c0 3.87-3.13 7-7 7s-7-3.13-7-7c0-2.19 1.01-4.14 2.58-5.42L6.17 5.17C4.23 6.82 3 9.26 3 12c0 4.97 4.03 9 9 9s9-4.03 9-9c0-2.74-1.23-5.18-3.17-6.83z"/></g>
     201<g id="pregnant-woman"><path d="M9 4c0-1.11.89-2 2-2s2 .89 2 2-.89 2-2 2-2-.89-2-2zm7 9c-.01-1.34-.83-2.51-2-3 0-1.66-1.34-3-3-3s-3 1.34-3 3v7h2v5h3v-5h3v-4z"/></g>
    177202<g id="print"><path d="M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z"/></g>
    178 <g id="query-builder"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zM12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z"/></g>
     203<g id="query-builder"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"/></g>
    179204<g id="question-answer"><path d="M21 6h-2v9H6v2c0 .55.45 1 1 1h11l4 4V7c0-.55-.45-1-1-1zm-4 6V3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v14l4-4h10c.55 0 1-.45 1-1z"/></g>
    180205<g id="radio-button-checked"><path d="M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm0-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"/></g>
    181206<g id="radio-button-unchecked"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"/></g>
    182207<g id="receipt"><path d="M18 17H6v-2h12v2zm0-4H6v-2h12v2zm0-4H6V7h12v2zM3 22l1.5-1.5L6 22l1.5-1.5L9 22l1.5-1.5L12 22l1.5-1.5L15 22l1.5-1.5L18 22l1.5-1.5L21 22V2l-1.5 1.5L18 2l-1.5 1.5L15 2l-1.5 1.5L12 2l-1.5 1.5L9 2 7.5 3.5 6 2 4.5 3.5 3 2v20z"/></g>
     208<g id="record-voice-over"><circle cx="9" cy="9" r="4"/><path d="M9 15c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4zm7.76-9.64l-1.68 1.69c.84 1.18.84 2.71 0 3.89l1.68 1.69c2.02-2.02 2.02-5.07 0-7.27zM20.07 2l-1.63 1.63c2.77 3.02 2.77 7.56 0 10.74L20.07 16c3.9-3.89 3.91-9.95 0-14z"/></g>
    183209<g id="redeem"><path d="M20 6h-2.18c.11-.31.18-.65.18-1 0-1.66-1.34-3-3-3-1.05 0-1.96.54-2.5 1.35l-.5.67-.5-.68C10.96 2.54 10.05 2 9 2 7.34 2 6 3.34 6 5c0 .35.07.69.18 1H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-5-2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM9 4c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm11 15H4v-2h16v2zm0-5H4V8h5.08L7 10.83 8.62 12 11 8.76l1-1.36 1 1.36L15.38 12 17 10.83 14.92 8H20v6z"/></g>
    184210<g id="redo"><path d="M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.96 7.22L3.9 16c1.05-3.19 4.05-5.5 7.6-5.5 1.95 0 3.73.72 5.12 1.88L13 16h9V7l-3.6 3.6z"/></g>
     
    194220<g id="restore"><path d="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"/></g>
    195221<g id="room"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"/></g>
     222<g id="rounded-corner"><path d="M19 19h2v2h-2v-2zm0-2h2v-2h-2v2zM3 13h2v-2H3v2zm0 4h2v-2H3v2zm0-8h2V7H3v2zm0-4h2V3H3v2zm4 0h2V3H7v2zm8 16h2v-2h-2v2zm-4 0h2v-2h-2v2zm4 0h2v-2h-2v2zm-8 0h2v-2H7v2zm-4 0h2v-2H3v2zM21 8c0-2.76-2.24-5-5-5h-5v2h5c1.65 0 3 1.35 3 3v5h2V8z"/></g>
     223<g id="rowing"><path d="M8.5 14.5L4 19l1.5 1.5L9 17h2l-2.5-2.5zM15 1c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 20.01L18 24l-2.99-3.01V19.5l-7.1-7.09c-.31.05-.61.07-.91.07v-2.16c1.66.03 3.61-.87 4.67-2.04l1.4-1.55c.19-.21.43-.38.69-.5.29-.14.62-.23.96-.23h.03C15.99 6.01 17 7.02 17 8.26v5.75c0 .84-.35 1.61-.92 2.16l-3.58-3.58v-2.27c-.63.52-1.43 1.02-2.29 1.39L16.5 18H18l3 3.01z"/></g>
    196224<g id="save"><path d="M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h10v4z"/></g>
    197 <g id="schedule"><path fill-opacity=".9" d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zM12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z"/></g>
     225<g id="schedule"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"/></g>
    198226<g id="search"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></g>
    199227<g id="select-all"><path d="M3 5h2V3c-1.1 0-2 .9-2 2zm0 8h2v-2H3v2zm4 8h2v-2H7v2zM3 9h2V7H3v2zm10-6h-2v2h2V3zm6 0v2h2c0-1.1-.9-2-2-2zM5 21v-2H3c0 1.1.9 2 2 2zm-2-4h2v-2H3v2zM9 3H7v2h2V3zm2 18h2v-2h-2v2zm8-8h2v-2h-2v2zm0 8c1.1 0 2-.9 2-2h-2v2zm0-12h2V7h-2v2zm0 8h2v-2h-2v2zm-4 4h2v-2h-2v2zm0-16h2V3h-2v2zM7 17h10V7H7v10zm2-8h6v6H9V9z"/></g>
     
    225253<g id="star"><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"/></g>
    226254<g id="star-border"><path d="M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z"/></g>
    227 <g id="star-half"><path d="M22 9.74l-7.19-.62L12 2.5 9.19 9.13 2 9.74l5.46 4.73-1.64 7.03L12 17.77l6.18 3.73-1.63-7.03L22 9.74zM12 15.9V6.6l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.9z"/></g>
     255<g id="star-half"><path d="M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4V6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z"/></g>
    228256<g id="stars"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zm4.24 16L12 15.45 7.77 18l1.12-4.81-3.73-3.23 4.92-.42L12 5l1.92 4.53 4.92.42-3.73 3.23L16.23 18z"/></g>
    229257<g id="store"><path d="M20 4H4v2h16V4zm1 10v-2l-1-5H4l-1 5v2h1v6h10v-6h4v6h2v-6h1zm-9 4H6v-4h6v4z"/></g>
     258<g id="subdirectory-arrow-left"><path d="M11 9l1.42 1.42L8.83 14H18V4h2v12H8.83l3.59 3.58L11 21l-6-6 6-6z"/></g>
     259<g id="subdirectory-arrow-right"><path d="M19 15l-6 6-1.42-1.42L15.17 16H4V4h2v10h9.17l-3.59-3.58L13 9l6 6z"/></g>
    230260<g id="subject"><path d="M14 17H4v2h10v-2zm6-8H4v2h16V9zM4 15h16v-2H4v2zM4 5v2h16V5H4z"/></g>
    231261<g id="supervisor-account"><path d="M16.5 12c1.38 0 2.49-1.12 2.49-2.5S17.88 7 16.5 7C15.12 7 14 8.12 14 9.5s1.12 2.5 2.5 2.5zM9 11c1.66 0 2.99-1.34 2.99-3S10.66 5 9 5C7.34 5 6 6.34 6 8s1.34 3 3 3zm7.5 3c-1.83 0-5.5.92-5.5 2.75V19h11v-2.25c0-1.83-3.67-2.75-5.5-2.75zM9 13c-2.33 0-7 1.17-7 3.5V19h7v-2.25c0-.85.33-2.34 2.37-3.47C10.5 13.1 9.66 13 9 13z"/></g>
     
    241271<g id="thumb-up"><path d="M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-1.91l-.01-.01L23 10z"/></g>
    242272<g id="thumbs-up-down"><path d="M12 6c0-.55-.45-1-1-1H5.82l.66-3.18.02-.23c0-.31-.13-.59-.33-.8L5.38 0 .44 4.94C.17 5.21 0 5.59 0 6v6.5c0 .83.67 1.5 1.5 1.5h6.75c.62 0 1.15-.38 1.38-.91l2.26-5.29c.07-.17.11-.36.11-.55V6zm10.5 4h-6.75c-.62 0-1.15.38-1.38.91l-2.26 5.29c-.07.17-.11.36-.11.55V18c0 .55.45 1 1 1h5.18l-.66 3.18-.02.24c0 .31.13.59.33.8l.79.78 4.94-4.94c.27-.27.44-.65.44-1.06v-6.5c0-.83-.67-1.5-1.5-1.5z"/></g>
     273<g id="timeline"><path d="M23 8c0 1.1-.9 2-2 2-.18 0-.35-.02-.51-.07l-3.56 3.55c.05.16.07.34.07.52 0 1.1-.9 2-2 2s-2-.9-2-2c0-.18.02-.36.07-.52l-2.55-2.55c-.16.05-.34.07-.52.07s-.36-.02-.52-.07l-4.55 4.56c.05.16.07.33.07.51 0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2c.18 0 .35.02.51.07l4.56-4.55C8.02 9.36 8 9.18 8 9c0-1.1.9-2 2-2s2 .9 2 2c0 .18-.02.36-.07.52l2.55 2.55c.16-.05.34-.07.52-.07s.36.02.52.07l3.55-3.56C19.02 8.35 19 8.18 19 8c0-1.1.9-2 2-2s2 .9 2 2z"/></g>
    243274<g id="toc"><path d="M3 9h14V7H3v2zm0 4h14v-2H3v2zm0 4h14v-2H3v2zm16 0h2v-2h-2v2zm0-10v2h2V7h-2zm0 6h2v-2h-2v2z"/></g>
    244275<g id="today"><path d="M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z"/></g>
    245276<g id="toll"><path d="M15 4c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6zM3 12c0-2.61 1.67-4.83 4-5.65V4.26C3.55 5.15 1 8.27 1 12s2.55 6.85 6 7.74v-2.09c-2.33-.82-4-3.04-4-5.65z"/></g>
    246 <g id="track-changes"><path fill="#231F20" d="M19.07 4.93l-1.41 1.41C19.1 7.79 20 9.79 20 12c0 4.42-3.58 8-8 8s-8-3.58-8-8c0-4.08 3.05-7.44 7-7.93v2.02C8.16 6.57 6 9.03 6 12c0 3.31 2.69 6 6 6s6-2.69 6-6c0-1.66-.67-3.16-1.76-4.24l-1.41 1.41C15.55 9.9 16 10.9 16 12c0 2.21-1.79 4-4 4s-4-1.79-4-4c0-1.86 1.28-3.41 3-3.86v2.14c-.6.35-1 .98-1 1.72 0 1.1.9 2 2 2s2-.9 2-2c0-.74-.4-1.38-1-1.72V2h-1C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10c0-2.76-1.12-5.26-2.93-7.07z"/></g>
     277<g id="touch-app"><path d="M9 11.24V7.5C9 6.12 10.12 5 11.5 5S14 6.12 14 7.5v3.74c1.21-.81 2-2.18 2-3.74C16 5.01 13.99 3 11.5 3S7 5.01 7 7.5c0 1.56.79 2.93 2 3.74zm9.84 4.63l-4.54-2.26c-.17-.07-.35-.11-.54-.11H13v-6c0-.83-.67-1.5-1.5-1.5S10 6.67 10 7.5v10.74l-3.43-.72c-.08-.01-.15-.03-.24-.03-.31 0-.59.13-.79.33l-.79.8 4.94 4.94c.27.27.65.44 1.06.44h6.79c.75 0 1.33-.55 1.44-1.28l.75-5.27c.01-.07.02-.14.02-.2 0-.62-.38-1.16-.91-1.38z"/></g>
     278<g id="track-changes"><path d="M19.07 4.93l-1.41 1.41C19.1 7.79 20 9.79 20 12c0 4.42-3.58 8-8 8s-8-3.58-8-8c0-4.08 3.05-7.44 7-7.93v2.02C8.16 6.57 6 9.03 6 12c0 3.31 2.69 6 6 6s6-2.69 6-6c0-1.66-.67-3.16-1.76-4.24l-1.41 1.41C15.55 9.9 16 10.9 16 12c0 2.21-1.79 4-4 4s-4-1.79-4-4c0-1.86 1.28-3.41 3-3.86v2.14c-.6.35-1 .98-1 1.72 0 1.1.9 2 2 2s2-.9 2-2c0-.74-.4-1.38-1-1.72V2h-1C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10c0-2.76-1.12-5.26-2.93-7.07z"/></g>
    247279<g id="translate"><path d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"/></g>
    248280<g id="trending-down"><path d="M16 18l2.29-2.29-4.88-4.88-4 4L2 7.41 3.41 6l6 6 4-4 6.3 6.29L22 12v6z"/></g>
     
    251283<g id="turned-in"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2-2-2z"/></g>
    252284<g id="turned-in-not"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2-2-2zm0 15l-5-2.18L7 18V5h10v13z"/></g>
     285<g id="unarchive"><path d="M20.55 5.22l-1.39-1.68C18.88 3.21 18.47 3 18 3H6c-.47 0-.88.21-1.15.55L3.46 5.22C3.17 5.57 3 6.01 3 6.5V19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6.5c0-.49-.17-.93-.45-1.28zM12 9.5l5.5 5.5H14v2h-4v-2H6.5L12 9.5zM5.12 5l.82-1h12l.93 1H5.12z"/></g>
    253286<g id="undo"><path d="M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8z"/></g>
    254287<g id="unfold-less"><path d="M7.41 18.59L8.83 20 12 16.83 15.17 20l1.41-1.41L12 14l-4.59 4.59zm9.18-13.18L15.17 4 12 7.17 8.83 4 7.41 5.41 12 10l4.59-4.59z"/></g>
    255288<g id="unfold-more"><path d="M12 5.83L15.17 9l1.41-1.41L12 3 7.41 7.59 8.83 9 12 5.83zm0 12.34L8.83 15l-1.41 1.41L12 21l4.59-4.59L15.17 15 12 18.17z"/></g>
     289<g id="update"><path d="M21 10.12h-6.78l2.74-2.82c-2.73-2.7-7.15-2.8-9.88-.1-2.73 2.71-2.73 7.08 0 9.79 2.73 2.71 7.15 2.71 9.88 0C18.32 15.65 19 14.08 19 12.1h2c0 1.98-.88 4.55-2.64 6.29-3.51 3.48-9.21 3.48-12.72 0-3.5-3.47-3.53-9.11-.02-12.58 3.51-3.47 9.14-3.47 12.65 0L21 3v7.12zM12.5 8v4.25l3.5 2.08-.72 1.21L11 13V8h1.5z"/></g>
    256290<g id="verified-user"><path d="M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm-2 16l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z"/></g>
    257291<g id="view-agenda"><path d="M20 13H3c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h17c.55 0 1-.45 1-1v-6c0-.55-.45-1-1-1zm0-10H3c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h17c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z"/></g>
     
    269303<g id="visibility-off"><path d="M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z"/></g>
    270304<g id="warning"><path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"/></g>
     305<g id="watch-later"><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2zm4.2 14.2L11 13V7h1.5v5.2l4.5 2.7-.8 1.3z"/></g>
     306<g id="weekend"><path d="M21 10c-1.1 0-2 .9-2 2v3H5v-3c0-1.1-.9-2-2-2s-2 .9-2 2v5c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2v-5c0-1.1-.9-2-2-2zm-3-5H6c-1.1 0-2 .9-2 2v2.15c1.16.41 2 1.51 2 2.82V14h12v-2.03c0-1.3.84-2.4 2-2.82V7c0-1.1-.9-2-2-2z"/></g>
    271307<g id="work"><path d="M20 6h-4V4c0-1.11-.89-2-2-2h-4c-1.11 0-2 .89-2 2v2H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-6 0h-4V4h4v2z"/></g>
    272308<g id="youtube-searched-for"><path d="M17.01 14h-.8l-.27-.27c.98-1.14 1.57-2.61 1.57-4.23 0-3.59-2.91-6.5-6.5-6.5s-6.5 3-6.5 6.5H2l3.84 4 4.16-4H6.51C6.51 7 8.53 5 11.01 5s4.5 2.01 4.5 4.5c0 2.48-2.02 4.5-4.5 4.5-.65 0-1.26-.14-1.82-.38L7.71 15.1c.97.57 2.09.9 3.3.9 1.61 0 3.08-.59 4.22-1.57l.27.27v.79l5.01 4.99L22 19l-4.99-5z"/></g>
    273 <g id="zoom-in"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14zM12 10h-2v2H9v-2H7V9h2V7h1v2h2v1z"/></g>
     309<g id="zoom-in"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14zm2.5-4h-2v2H9v-2H7V9h2V7h1v2h2v1z"/></g>
    274310<g id="zoom-out"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14zM7 9h5v1H7z"/></g>
    275 </defs></svg>
     311</defs>
     312</svg>
  • wp-filebase/trunk/js/admin.js

    r1303067 r1324861  
    9393}
    9494
     95function WPFB_VersionCompare(v1, v2, options) {
     96    var lexicographical = options && options.lexicographical,
     97        zeroExtend = options && options.zeroExtend,
     98        v1parts = v1.split('.'),
     99        v2parts = v2.split('.');
     100
     101    function isValidPart(x) {
     102        return (lexicographical ? /^\d+[A-Za-z]*$/ : /^\d+$/).test(x);
     103    }
     104
     105    if (!v1parts.every(isValidPart) || !v2parts.every(isValidPart)) {
     106        return NaN;
     107    }
     108
     109    if (zeroExtend) {
     110        while (v1parts.length < v2parts.length) v1parts.push("0");
     111        while (v2parts.length < v1parts.length) v2parts.push("0");
     112    }
     113
     114    if (!lexicographical) {
     115        v1parts = v1parts.map(Number);
     116        v2parts = v2parts.map(Number);
     117    }
     118
     119    for (var i = 0; i < v1parts.length; ++i) {
     120        if (v2parts.length == i) {
     121            return 1;
     122        }
     123
     124        if (v1parts[i] == v2parts[i]) {
     125            continue;
     126        }
     127        else if (v1parts[i] > v2parts[i]) {
     128            return 1;
     129        }
     130        else {
     131            return -1;
     132        }
     133    }
     134
     135    if (v1parts.length != v2parts.length) {
     136        return -1;
     137    }
     138
     139    return 0;
     140}
     141
    95142
    96143if('undefined' !== typeof jQuery) {
  • wp-filebase/trunk/lib/wpfb_form_file.php

    r1321065 r1324861  
    218218
    219219    <div class="wpfb-upload-box">
    220         <?php if ($update && $file->IsScanLocked()) { ?>
    221             <div class="overlay-locked"><?php echo WPFB_Admin::Icon('lock', 80); ?>
    222                 <span><?php printf(__('This file is locked for %s or until the scan process completes.', 'wp-filebase'), human_time_diff(time(), $file->file_scan_lock)); echo ' '.__('You can edit meta data only.', 'wp-filebase') ?></span>
     220        <?php if ($update && ($file->IsScanLocked() || $file->GetRemoteSyncMeta() )) { ?>
     221            <div class="overlay-locked"><?php echo WPFB_Admin::Icon('lock', 70); ?>
     222                <span><?php $file->IsScanLocked() &&
     223                         printf(__('This file is locked for %s or until the scan process completes.', 'wp-filebase'), human_time_diff(time(), $file->file_scan_lock))
     224                    ; echo ' '.__('You can edit meta data only.', 'wp-filebase') ?></span>
    223225            </div>
    224226        <?php } ?>
     227
    225228        <div id="wpfilebase-upload-menu" class="admin-scheme-bgcolor-0">
    226             <a href="#" <?php echo ($file->IsRemote() ? '' : 'class="admin-scheme-bgcolor-2 current"'); ?> onclick="return WPFB_switchFileUpload(0)"><?php _e('Upload') ?></a>
     229            <a href="#" <?php echo ($file->IsRemote() ? '' : 'class="admin-scheme-bgcolor-2 current"'); ?> onclick="return WPFB_switchFileUpload(0)"><?php $update ? _e('Upload Update','wp-filebase') : _e('Upload') ?></a>
    227230            <a href="#" <?php echo ($file->IsRemote() ? 'class="admin-scheme-bgcolor-2 current"' : ''); ?> onclick="return WPFB_switchFileUpload(1)"><?php _e('File URL') ?></a>
    228231            <input type="hidden" name="file_is_remote" id="file_is_remote" value="<?php echo ($file->IsRemote() ? 1 : 0); ?>" />
  • wp-filebase/trunk/readme.txt

    r1321065 r1324861  
    44Tags: filebase, filemanager, file, files, manager, upload, download, downloads, downloadmanager, images, pdf, widget, filelist, list, thumbnails, thumbnail, attachment, attachments, category, categories, media, template, ftp, http, mp3, id3
    55Requires at least: 3.1
    6 Tested up to: 4.4
    7 Stable tag: 3.4.0
     6Tested up to: 4.4.1
     7Stable tag: 3.4.1
    88
    99Adds a powerful download manager including file categories, downloads counter, widgets, sorted file lists and more to your WordPress blog.
     
    120120
    121121== Changelog ==
     122
     123= 3.4.1 =
     124* `-` considered as word seperate when parsing file name
     125* Fill out file display and version automatically
     126* Fixed cron bug
     127* Updated image-picker and jquery-deserialize
    122128
    123129= 3.4.0 =
  • wp-filebase/trunk/tests/bootstrap.php

    r1321065 r1324861  
    1616
    1717require dirname( __FILE__ ) . '/create-test-files.php';
     18
     19
     20// this is for failsafe (during tests)
     21wpfb_loadclass('Core');
     22if(empty(WPFB_Core::$settings->upload_path)) {
     23    wpfilebase_activate();
     24    WPFB_Core::$settings = (object) get_option(WPFB_OPT_NAME);
     25}
  • wp-filebase/trunk/wp-filebase.php

    r1321065 r1324861  
    55  Plugin URI:  https://wpfilebase.com/
    66  Description: Adds a powerful downloads manager supporting file categories, download counter, widgets, sorted file lists and more to your WordPress blog.
    7   Version:     3.4.0
     7  Version:     3.4.1
    88  Author:      Fabian Schlieper
    99  Author URI:  http://fabi.me/
     
    1717if (!defined('WPFB')) {
    1818    define('WPFB', 'wpfb');
    19     define('WPFB_VERSION', '3.4.0');
     19    define('WPFB_VERSION', '3.4.1');
    2020    define('WPFB_PLUGIN_ROOT', str_replace('\\', '/', dirname(__FILE__)) . '/');
    2121    if (!defined('ABSPATH')) {
     
    8686    {
    8787        wpfb_loadclass('Widget');
     88        WPFB_Widget::register();
    8889    }
    8990
Note: See TracChangeset for help on using the changeset viewer.