Skip to content

Commit

Permalink
bump 20.10.08
Browse files Browse the repository at this point in the history
- Fixed WP_Object_Cache::dc_save() -> cache meta data type, change string to array if original data serialized.
- Fixed WP_Object_Cache::dc_save() -> wrong logic causes a random delay if array size more than 1MB.
  • Loading branch information
nawawi committed Nov 27, 2020
1 parent 59d56a5 commit 6b44aae
Show file tree
Hide file tree
Showing 10 changed files with 123 additions and 100 deletions.
5 changes: 5 additions & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
= 20.10.08 (2020-11-28)

- Fixed WP_Object_Cache::dc_save() -> cache meta data type, change string to array if original data serialized.
- Fixed WP_Object_Cache::dc_save() -> wrong logic causes a random delay if array size more than 1MB.

= 20.10.07 (2020-11-26)

- Fixed Tweaks::misc() -> removed deprecated jetpack hook instagram_cache_oembed_api_response_body.
Expand Down
4 changes: 2 additions & 2 deletions docket-cache.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
* @wordpress-plugin
* Plugin Name: Docket Cache
* Plugin URI: https://wordpress.org/plugins/docket-cache/
* Version: 20.10.07
* VerPrev: 20.10.06
* Version: 20.10.08
* VerPrev: 20.10.07
* Description: A persistent object cache stored as a plain PHP code, accelerates caching with OPcache backend.
* GitHub Plugin URI: https://github.com/nawawi/docket-cache
* Author: Nawawi Jamili
Expand Down
20 changes: 8 additions & 12 deletions includes/cache.php
Original file line number Diff line number Diff line change
Expand Up @@ -668,7 +668,7 @@ private function maybe_expire($group, $expire = 0, $key = '')
$expire = 0;
}

$expire = $this->fs()->sanitize_second($expire);
$expire = $this->fs()->sanitize_timestamp($expire);
$maxttl = $this->cache_maxttl;

if (0 === $expire && $maxttl < 2419200) {
Expand Down Expand Up @@ -959,6 +959,7 @@ private function dc_code($file, $arr)
return false;
}

// jangan gatai tangan usik. same with strlen(serialize($arr))
$len = \strlen($data);
if ($len >= $this->cache_maxsize) {
$this->dc_log('err', $fname, 'Data too large: '.$len.'/'.$this->cache_maxsize);
Expand All @@ -979,6 +980,7 @@ private function dc_code($file, $arr)
return false;
}

// remove lock
$this->fs()->validate_fatal_error_file($file);

return $stat;
Expand Down Expand Up @@ -1038,29 +1040,23 @@ private function dc_save($cache_key, $data, $group = 'default', $expire = 0, $ke

if ($this->multisite) {
// try to avoid error-prone
// in rare condition, get_current_network_id not exists.
// in rare condition, get_current_network_id dependencies not load properly.
try {
$meta['network_id'] = get_current_network_id();
} catch (\Exception $e) {
} catch (\Throwable $e) {
$meta['network_id'] = 0;
}
}

$final_type = \gettype($data);

$meta['site_id'] = get_current_blog_id();
$meta['group'] = $group;
$meta['key'] = $cache_key;
$meta['type'] = $type;
$meta['type'] = $final_type;
$meta['timeout'] = $timeout;
$meta['data'] = $data;

// array size max to 1M to avoid fatal error in some hosting.
$meta_len = \count($meta, true);
if ($meta_len >= 1000000) {
$this->dc_log('err', $group.':'.$cache_key, 'Object too large: '.$meta_len.'/1000000');

return false;
}

if (true === $this->dc_code($file, $meta)) {
// if 0 let gc handle it by comparing file mtime.
if ($timeout > 0) {
Expand Down
2 changes: 1 addition & 1 deletion includes/object-cache.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* @wordpress-plugin
* Plugin Name: Docket Cache Drop-in
* Plugin URI: https://wordpress.org/plugins/docket-cache/
* Version: 20.10.07
* Version: 20.10.08
* Description: A persistent object cache stored as a plain PHP code, accelerates caching with OPcache backend.
* Author: Nawawi Jamili
* Author URI: https://docketcache.com
Expand Down
10 changes: 7 additions & 3 deletions includes/src/Canopt.php
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ public function keys($key = false)
return array_keys($data);
}

private function read_config($file = '', $force = false)
private function read_config($file = '', $force = false, &$error = '')
{
$file = empty($file) ? $this->file : $file;
$config = [];
Expand All @@ -126,7 +126,11 @@ private function read_config($file = '', $force = false)
$this->opcache_flush($file);
}

$config = @include $file;
try {
$config = @include $file;
} catch (\Throwable $e) {
$error = $e->getMessage();
}
}

return $config;
Expand Down Expand Up @@ -241,7 +245,7 @@ public function clear_lock()
foreach ($files as $file) {
if (@is_file($file) && @is_writable($file)) {
if (\defined('DocketCache_CLI') && DocketCache_CLI) {
fwrite(STDOUT, basename($file).PHP_EOL);
@fwrite(STDOUT, basename($file).PHP_EOL);
}
@unlink($file);
}
Expand Down
2 changes: 1 addition & 1 deletion includes/src/Crawler.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

final class Crawler
{
private static $version = '20.10.07';
private static $version = '20.10.08';
public static $send_cookie = false;

private static function default_args($param = [])
Expand Down
38 changes: 23 additions & 15 deletions includes/src/Filesystem.php
Original file line number Diff line number Diff line change
Expand Up @@ -631,7 +631,7 @@ public function validate_fatal_error_file($file)
return;
}

$fm = time() - 300; // 5m
$fm = time() - 10; // 10s
if ($fm > @filemtime($file_fatal)) {
if ($this->validate_file($file)) {
@unlink($file_fatal);
Expand All @@ -644,11 +644,20 @@ public function validate_fatal_error_file($file)
}
}

private function suspend_cache_file($file, $error)
private function suspend_cache_file($file, $error, $seconds = 0)
{
$seconds = (int) $seconds;
$file_fatal = $this->get_fatal_error_filename($file);

return @file_put_contents($file_fatal, date('Y-m-d H:i:s T').PHP_EOL.$error, LOCK_EX);
if (@file_put_contents($file_fatal, date('Y-m-d H:i:s T').PHP_EOL.$error, LOCK_EX)) {
if ($seconds > 0) {
@touch($file, time() + $seconds);
}

return true;
}

return false;
}

public function capture_fatal_error()
Expand All @@ -663,8 +672,11 @@ function () {
$file_fatal = $this->get_fatal_error_filename($file_error);
$error['file'] = str_replace(ABSPATH, '/', $file_error);

@file_put_contents($file_error, '<?php return false;', LOCK_EX);
if ($this->suspend_cache_file($file_fatal, $this->export_var($error))) {
$this->unlink($file_error, false);

// 300s = 5m delay
if ($this->suspend_cache_file($file_fatal, $this->export_var($error), 300)) {
// refresh page if possible
if ('cli' !== \PHP_SAPI && !wp_doing_ajax()) {
echo '<script>document.body.innerHTML="";window.setTimeout(function() { window.location.assign(window.location.href); }, 750);</script>';
}
Expand Down Expand Up @@ -692,9 +704,10 @@ public function cache_get($file)
return false;
}

// handle error incase not throwable
// capture none throwable
$this->capture_fatal_error();

// cache data
$data = [];

// include when we can read, try to avoid fatal error.
Expand All @@ -705,11 +718,6 @@ public function cache_get($file)
} catch (\Throwable $e) {
$error = $e->getMessage();

// cleanup
if (false !== strpos($error, 'not found') && @preg_match('@Class.*not found@', $error)) {
$this->unlink($file, false);
}

// delay
$this->suspend_cache_file($file, $error);

Expand Down Expand Up @@ -826,9 +834,9 @@ public function internal_group($group)
}

/**
* sanitize_second.
* sanitize_timestamp.
*/
public function sanitize_second($time)
public function sanitize_timestamp($time)
{
$time = (int) $time;
if ($time < 0) {
Expand All @@ -848,7 +856,7 @@ public function sanitize_second($time)
*/
public function sanitize_maxttl($seconds)
{
$seconds = $this->sanitize_second($seconds);
$seconds = $this->sanitize_timestamp($seconds);

// 86400 = 1d
// 345600 = 4d
Expand Down Expand Up @@ -888,7 +896,7 @@ public function sanitize_maxfile($maxfile)
*/
public function valid_timestamp($timestamp)
{
$timestamp = $this->sanitize_second($timestamp);
$timestamp = $this->sanitize_timestamp($timestamp);

return $timestamp > 0;
}
Expand Down
103 changes: 54 additions & 49 deletions includes/src/Plugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -999,55 +999,60 @@ private function register_admin_hooks()
function () {
$cap = is_multisite() ? 'manage_network_options' : 'manage_options';
$order = is_multisite() ? '25.1' : '80.1';
$icon = 'PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJ';
$icon .= 'QyAiLS8vVzNDLy9EVEQgU1ZHIDIwMDEwOTA0Ly9FTiIKICJodHRwOi8vd3d3LnczLm9yZy9UUi8y';
$icon .= 'MDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4wIiB4';
$icon .= 'bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiB3aWR0aD0iMzAwLjAwMDAwMHB0IiBo';
$icon .= 'ZWlnaHQ9IjMwMC4wMDAwMDBwdCIgdmlld0JveD0iMCAwIDMwMC4wMDAwMDAgMzAwLjAwMDAwMCIK';
$icon .= 'IHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiPgoKPGcgdHJhbnNmb3JtPSJ0cmFu';
$icon .= 'c2xhdGUoMC4wMDAwMDAsMzAwLjAwMDAwMCkgc2NhbGUoMC4xMDAwMDAsLTAuMTAwMDAwKSIKZmls';
$icon .= 'bD0iI2JhYmFiYSIgc3Ryb2tlPSJub25lIj4KPHBhdGggZD0iTTEyODUgMjk5NCBjLTcwIC0xMSAt';
$icon .= 'MjUwIC01NyAtMjkwIC03NCAtMTEgLTUgLTQzIC0xOCAtNzEgLTI5IC0yOAotMTEgLTc1IC0zMyAt';
$icon .= 'MTA2IC00OSAtMzEgLTE3IC01OSAtMjggLTYyIC0yNSAtMyA0IC02IDEgLTYgLTUgMCAtNyAtNiAt';
$icon .= 'MTIKLTE0IC0xMiAtOCAwIC0xNiAtMyAtMTggLTcgLTIgLTUgLTMwIC0yNiAtNjMgLTQ4IC04NiAt';
$icon .= 'NTggLTk5IC02OCAtMjE1IC0xODUKLTExNyAtMTE2IC0xMjcgLTEyOSAtMTg1IC0yMTUgLTIyIC0z';
$icon .= 'MyAtNDMgLTYxIC00NyAtNjMgLTUgLTIgLTggLTEwIC04IC0xOCAwCi04IC01IC0xNCAtMTIgLTE0';
$icon .= 'IC02IDAgLTkgLTMgLTUgLTYgMyAtMyAtOCAtMzEgLTI1IC02MiAtMTYgLTMxIC0zOCAtNzggLTQ5';
$icon .= 'Ci0xMDYgLTExIC0yOCAtMjQgLTYwIC0yOSAtNzEgLTEwIC0yMyAtMzEgLTk2IC01NyAtMjAwIC0y';
$icon .= 'NiAtMTAyIC0yNiAtNTA4IDAKLTYxMCAyNSAtMTAxIDQ3IC0xNzcgNTcgLTIwMCA1IC0xMSAyNSAt';
$icon .= 'NTggNDUgLTEwNSAxOSAtNDcgNDcgLTEwMiA2MCAtMTIyIDE0Ci0yMSAyNSAtNDQgMjUgLTUyIDAg';
$icon .= 'LTggMyAtMTYgOCAtMTggMTAgLTUgNjQgLTc4IDU3IC03OCAtNCAwIDAgLTYgNyAtMTQgNyAtNwoz';
$icon .= 'MyAtMzcgNTggLTY3IDYxIC03MyAxMDcgLTEyMCAxNTggLTE2MyAyNCAtMjAgNDAgLTM2IDM1IC0z';
$icon .= 'NiAtNCAwIDIgLTYgMTQKLTEzIDEyIC02IDY2IC00MiAxMjAgLTc4IDU0IC0zNyAxMzAgLTgyIDE2';
$icon .= 'OCAtMTAwIDM5IC0xOCA3MyAtMzcgNzYgLTQyIDMgLTUKMTAgLTggMTUgLTggNSAxIDQzIC0xMCA4';
$icon .= 'NCAtMjMgMTg1IC02MCAyOTIgLTc2IDQ5NSAtNzUgMTk4IDAgMzIxIDIwIDQ4NSA3NQozMjMgMTEw';
$icon .= 'IDU5NCAzMjUgNzg1IDYyMiA3NiAxMTkgMTUwIDI5MCAxODUgNDMyIDI2IDEwMCAzOSAyMjMgMzkg';
$icon .= 'MzY1IDEgMjAzCi0xNyAzMjIgLTc0IDQ5MCAtMTMgMzkgLTI1IDc3IC0yNyA4NSAtMiA4IC02IDE3';
$icon .= 'IC05IDIwIC0zIDMgLTIwIDM3IC0zOCA3NQotMTggMzkgLTYzIDExNCAtMTAwIDE2OCAtMzYgNTQg';
$icon .= 'LTcyIDEwOCAtNzggMTIwIC03IDEyIC0xMyAxOCAtMTMgMTQgMCAtNSAtMTYKMTEgLTM2IDM1IC00';
$icon .= 'MyA1MSAtOTAgOTcgLTE2MyAxNTggLTMwIDI1IC02MCA1MSAtNjcgNTggLTggNyAtMTQgMTEgLTE0';
$icon .= 'IDcgMAotNyAtNzMgNDcgLTc4IDU4IC0yIDQgLTEwIDcgLTE4IDcgLTggMCAtMzEgMTEgLTUyIDI1';
$icon .= 'IC0yMCAxMyAtNzUgNDEgLTEyMiA2MAotNDcgMjAgLTk0IDQwIC0xMDUgNDUgLTExIDUgLTQ1IDE1';
$icon .= 'IC03NSAyNCAtMTY4IDQ3IC0xODIgNDkgLTQwMCA1MiAtMTE4IDEKLTIyOCAwIC0yNDUgLTJ6IG0t';
$icon .= 'MzkwIC01NDMgYzcwIC01NyAxMjIgLTk5IDIxNSAtMTc3IDI4OSAtMjQyIDY5MyAtNjMxIDgwOAot';
$icon .= 'Nzc2IDE0OCAtMTg4IDE4NSAtMjcwIDE4NiAtNDAzIDAgLTc3IC00IC05OCAtMjggLTE0OSAtMzIg';
$icon .= 'LTcwIC0xMTggLTE1OAotMTkyIC0xOTggLTk4IC01MyAtMjgzIC04MSAtMzc5IC01OCAtMzUgOCAt';
$icon .= 'NDYgNCAxMTYgNDAgMTY1IDM2IDMxNCAxMzIgMzczCjIzOSAzNiA2NyAzOSAxNDYgOSAyMDYgLTg3';
$icon .= 'IDE2OCAtNDkwIDM2OSAtMTE2MyA1NzggLTE4MiA1NyAtMjAwIDU4IC0xNDMgMTMKNTggLTQ0IDI3';
$icon .= 'MyAtMjI0IDM4MyAtMzIwIDI0NiAtMjEzIDM5MiAtMzU4IDM3NiAtMzczIC03IC03IC0xMTkgNjYg';
$icon .= 'LTIzMSAxNTEKLTg3IDY2IC0zNjcgMjg3IC0zNzUgMjk2IC0zIDMgLTU0IDQ2IC0xMTUgOTUgLTYw';
$icon .= 'IDQ5IC0xMjEgOTkgLTEzNSAxMTEgLTI0IDIxCi0yOTAgMjQ0IC0yOTkgMjUxIC00OCAzNyA0NDcg';
$icon .= 'LTkyIDc1OCAtMTk4IDYzIC0yMSAxMTYgLTM4IDExNyAtMzYgMSAxIC04NQoxNzUgLTE5MSAzODcg';
$icon .= 'LTEwNyAyMTIgLTE5NCAzODkgLTE5NSAzOTMgMCAxMiAxNSAxIDEwNSAtNzJ6IG0xNTA3IC0xMTgx';
$icon .= 'IGM4OAotMTc4IDE4NSAtMzg1IDE4MiAtMzg5IC0zIC00IC03OSAyNiAtMTgwIDcwIGwtNDIgMTgg';
$icon .= 'LTkzIC00MCBjLTUyIC0yMiAtMTE0Ci00OSAtMTM4IC02MCAtMjQgLTExIC00NSAtMTggLTQ4IC0x';
$icon .= 'NiAtNiA2IDI2MyAxODcgMjc3IDE4NyA2IDAgMjkgLTEwIDUwIC0yMgoyMSAtMTMgNDEgLTIwIDQ1';
$icon .= 'IC0xNiA1IDQgLTEwNCAyNDQgLTEyMSAyNjYgLTEgMiAtNDEgLTExIC05MCAtMjggLTQ4IC0xNyAt';
$icon .= 'OTIKLTI5IC05NyAtMjcgLTUgMSAxOSAyMCA1NCA0MiAzNSAyMSA4MiA1MiAxMDQgNjcgMjIgMTUg';
$icon .= 'NDUgMjYgNTAgMjUgNiAtMiAyNwotMzYgNDcgLTc3eiIvPgo8cGF0aCBkPSJNMTAzMCAyMjI5IGMw';
$icon .= 'IC0yIDYwIC0xMjMgMTM0IC0yNjkgODIgLTE2MSAxNDEgLTI2NyAxNTIgLTI3MiAxOTIKLTc2IDQ0';
$icon .= 'NiAtMTk3IDUwNyAtMjQwIDE1IC0xMSAyNyAtMTcgMjcgLTE0IDAgMTUgLTE3MCAyMDcgLTI5MCAz';
$icon .= 'MjYgLTE2NCAxNjMKLTUzMSA0ODggLTUzMCA0Njl6Ii8+CjwvZz4KPC9zdmc+Cg==';
$icon = 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxz';
$icon .= 'dmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxu';
$icon .= 'czpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6';
$icon .= 'Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0';
$icon .= 'cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAw';
$icon .= 'L3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQv';
$icon .= 'RFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2Fw';
$icon .= 'ZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjEyOCIKICAgaGVpZ2h0PSIxMjgi';
$icon .= 'CiAgIHZpZXdCb3g9IjAgMCAxMjggMTI4IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmcxMSIK';
$icon .= 'ICAgc29kaXBvZGk6ZG9jbmFtZT0iZG9ja2V0LWNhY2hlLWxvZ28tY3V0LnN2ZyIKICAgaW5rc2Nh';
$icon .= 'cGU6dmVyc2lvbj0iMS4wLjEgKDNiYzJlODEzZjUsIDIwMjAtMDktMDcpIj4KICA8bWV0YWRhdGEK';
$icon .= 'ICAgICBpZD0ibWV0YWRhdGExNSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAg';
$icon .= 'ICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9y';
$icon .= 'bWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVy';
$icon .= 'bC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0';
$icon .= 'aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPHNv';
$icon .= 'ZGlwb2RpOm5hbWVkdmlldwogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xv';
$icon .= 'cj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxIgogICAgIG9iamVjdHRvbGVyYW5jZT0i';
$icon .= 'MTAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAg';
$icon .= 'IGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAg';
$icon .= 'ICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWln';
$icon .= 'aHQ9IjEwMDEiCiAgICAgaWQ9Im5hbWVkdmlldzEzIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAg';
$icon .= 'ICBpbmtzY2FwZTp6b29tPSI2LjQ4NDM3NSIKICAgICBpbmtzY2FwZTpjeD0iNDUuMzM5NzU5Igog';
$icon .= 'ICAgIGlua3NjYXBlOmN5PSI1Ny44MzEzMjUiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii05Igog';
$icon .= 'ICAgIGlua3NjYXBlOndpbmRvdy15PSItOSIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVk';
$icon .= 'PSIxIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImRvY2tldC1jYWNoZS1sb2dvIiAvPgog';
$icon .= 'IDxkZWZzCiAgICAgaWQ9ImRlZnM1Ij4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXAtZG9j';
$icon .= 'a2V0LWNhY2hlLWxvZ28iPgogICAgICA8cmVjdAogICAgICAgICB3aWR0aD0iMTI4IgogICAgICAg';
$icon .= 'ICBoZWlnaHQ9IjEyOCIKICAgICAgICAgaWQ9InJlY3QyIiAvPgogICAgPC9jbGlwUGF0aD4KICA8';
$icon .= 'L2RlZnM+CiAgPGcKICAgICBpZD0iZG9ja2V0LWNhY2hlLWxvZ28iCiAgICAgY2xpcC1wYXRoPSJ1';
$icon .= 'cmwoI2NsaXAtZG9ja2V0LWNhY2hlLWxvZ28pIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmls';
$icon .= 'bDojMDAwMGZmO2ZpbGwtcnVsZTpldmVub2RkIgogICAgICAgaWQ9InJlY3Q5NCIKICAgICAgIHdp';
$icon .= 'ZHRoPSIzNC42OTg3OTUiCiAgICAgICBoZWlnaHQ9IjI3LjYwNDgxOCIKICAgICAgIHg9Ii01NS4w';
$icon .= 'NTU0MiIKICAgICAgIHk9Ii0yLjAwNDgxOTQiIC8+CiAgICA8cGF0aAogICAgICAgaWQ9IkVsbGlw';
$icon .= 'c2VfMSIKICAgICAgIHN0eWxlPSJmaWxsOiNiYWJhYmEiCiAgICAgICBkPSJNIDYzLjcwMzEyNSwx';
$icon .= 'LjcyMTM4NDVlLTQgQSA2NCw2NCAwIDAgMCAzLjM1MDYwMjVlLTcsNjQuMDAwMTcyIDY0LDY0IDAg';
$icon .= 'MCAwIDY0LDEyOC4wMDAxOCA2NCw2NCAwIDAgMCAxMjgsNjQuMDAwMTcyIDY0LDY0IDAgMCAwIDY0';
$icon .= 'LDEuNzIxMzg0NWUtNCBhIDY0LDY0IDAgMCAwIC0wLjI5Njg3NSwwIHogTSAzMy44NTc0MjIsMjAu';
$icon .= 'MjczNjEgYyAwLDAgNTEuMTA0MzEyLDM5LjgyOTQ5OCA1NS4xOTUzMDIsNTYuMTg3NSBhIDE2LjQ3';
$icon .= 'OCwxNi40NzggMCAwIDEgMC43NjU2Myw0LjI5ODgyOCBjIDAuNDI2LDUuMjg0IC0zLjQ1MDM3LDE1';
$icon .= 'LjYzNTU5NSAtMTcuMzU5MzcsMTcuNjgzNTk1IC0yLjQ4MSwwLjUzOTAwNCAtOS4zODA4NTksMCAt';
$icon .= 'OS4zODA4NTksMCAwLDAgOC41MTgxMDksLTEuMjg4ODMgMTEuNTM3MTA2LC0yLjc5ODgzIDMuMDE5';
$icon .= 'MDAzLC0xLjUxIDEyLjE3NjE3MywtNS44ODc1OCAxMi4wNzYxNzMsLTE0LjAxNzU3OCAtMC4yMTUs';
$icon .= 'LTMuMjM0IDAuMjE2MTEsLTkuOTIxMzc1IC0zMS44Mzc4ODgsLTIyLjIzNDM3NSAtMTEuMDY1LC00';
$icon .= 'LjI1IC0yOC4zMjgxMjUsLTkuMTQ0NTMxIC0yOC4zMjgxMjUsLTkuMTQ0NTMxIDAsMCAzMy44NTg0';
$icon .= 'MDYsMjcuMzg4ODEyIDM1LjY5MTQwNiwzMi4xMzI4MTIgLTkuMTY2LC00Ljc0IC00OS40OTIxODgs';
$icon .= 'LTM5LjE0MDYyNSAtNDkuNDkyMTg4LC0zOS4xNDA2MjUgYSAzNDYuNywzNDYuNyAwIDAgMSAzOC4y';
$icon .= 'NzM0MzgsMTEuMTExMzI4IHogbSA5LjE2MjEwOSwxMS4zMTgzNTkgMTIuMjEwOTM4LDI0LjMxODM1';
$icon .= 'OSBjIDkuMTUzLDMuNDkyIDE4LjE1NTA5Miw3LjYwMTE3MiAyNS4xMjEwOTUsMTIuMjAxMTcyIC0z';
$icon .= 'LjAzMywtNC4yMTkgLTEzLjE4NDAzMywtMTYuOTc1NTMxIC0zNy4zMzIwMzMsLTM2LjUxOTUzMSB6';
$icon .= 'IG0gNTcuNjg3NDk5LDM4LjkyMTg3NSA5LjYwMTU2LDE5Ljk0OTIxOSAtOS41NDI5NywtMy45OTAy';
$icon .= 'MzUgLTExLjY5OTIyNiw1LjA2NjQwNSAxMS42NDA2MzYsLTcuNzYzNjcgNS4zOTI1OCwyLjgwMDc4';
$icon .= 'MSAtNi40MTQwNjYsLTEzLjA0Njg3NSAtOC40NjY4LDIuOTg0Mzc1IHoiIC8+CiAgPC9nPgo8L3N2';
$icon .= 'Zz4K';

add_menu_page(
'Docket Cache',
Expand Down
Loading

0 comments on commit 6b44aae

Please sign in to comment.