- ```
-
-10. [Open a Pull Request](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests)
- with a clear title and description.
diff --git a/user/plugins/telepathics-yourls-emojis/.github/FUNDING.yml b/user/plugins/telepathics-yourls-emojis/.github/FUNDING.yml
deleted file mode 100644
index 8dea68a..0000000
--- a/user/plugins/telepathics-yourls-emojis/.github/FUNDING.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-# These are supported funding model platforms
-
-github: telepathics
diff --git a/user/plugins/telepathics-yourls-emojis/.github/workflows/php.yml b/user/plugins/telepathics-yourls-emojis/.github/workflows/php.yml
deleted file mode 100644
index 6dcf060..0000000
--- a/user/plugins/telepathics-yourls-emojis/.github/workflows/php.yml
+++ /dev/null
@@ -1,36 +0,0 @@
-name: PHP Composer
-
-on:
- push:
- branches: [ main ]
- pull_request:
- branches: [ main ]
-
-jobs:
- build:
-
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@v2
-
- - name: Validate composer.json and composer.lock
- run: composer validate --strict
-
- - name: Cache Composer packages
- id: composer-cache
- uses: actions/cache@v2
- with:
- path: vendor
- key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
- restore-keys: |
- ${{ runner.os }}-php-
-
- - name: Install dependencies
- run: composer install --prefer-dist --no-progress
-
- # Add a test script to composer.json, for instance: "test": "vendor/bin/phpunit"
- # Docs: https://getcomposer.org/doc/articles/scripts.md
-
- # - name: Run test suite
- # run: composer run-script test
diff --git a/user/plugins/telepathics-yourls-emojis/.gitignore b/user/plugins/telepathics-yourls-emojis/.gitignore
deleted file mode 100644
index 9d5ccfd..0000000
--- a/user/plugins/telepathics-yourls-emojis/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-.DS_Store
-/vendor/
-/build/
\ No newline at end of file
diff --git a/user/plugins/telepathics-yourls-emojis/LICENSE b/user/plugins/telepathics-yourls-emojis/LICENSE
deleted file mode 100644
index ae79dbe..0000000
--- a/user/plugins/telepathics-yourls-emojis/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2021 telepathics
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/user/plugins/telepathics-yourls-emojis/README.md b/user/plugins/telepathics-yourls-emojis/README.md
deleted file mode 100644
index f8a92f4..0000000
--- a/user/plugins/telepathics-yourls-emojis/README.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# YOURLS Emojis
-A YOURLS plugin that allows emojis in the custom short URLs.
-## Description
-Emojis in domain names and URLs are becoming increasingly popular, so I thought it would be fun to be able to include them in your YOURLS short codes.
-
-[![Mentioned in Awesome YOURLS](https://awesome.re/mentioned-badge.svg)](https://github.com/YOURLS/awesome-yourls/)
-[![Github Sponsors](https://img.shields.io/badge/sponsors-4-green.svg)](https://github.com/sponsors/telepathics)
-[![PHP Composer](https://github.com/telepathics/yourls-emojis/actions/workflows/php.yml/badge.svg?branch=main)](https://github.com/telepathics/yourls-emojis/actions/workflows/php.yml)
-
-## Installation
-
-1. Unzip the [latest release](https://github.com/telepathics/yourls-emojis/releases) and move it into your YOURLS `/user/plugins` folder
-2. Visit your plugins page (e.g. https://sho.rt/admin/plugins.php)
-3. Activate the "Emojis" plugin by telepathics
-4. Have fun!
-
-### Upgrading
-1. Delete (or replace) the old folder
-2. Follow aforementioned installation instructions
-
-## Contributing
-
-Feature suggestion? Bug to report?
-
-__Before opening any issue, please search for existing [issues](https://github.com/telepathics/yourls-emojis/issues) (open and closed) and read the [Contributing Guidelines](https://github.com/telepathics/yourls-emojis/blob/main/.github/CONTRIBUTING.md).__
-
-Also visit the living [to do](https://github.com/telepathics/yourls-emojis/projects/1) kanban board and [discussions](https://github.com/telepathics/yourls-emojis/discussions) page.
-
-## License
-Released under the [MIT License](https://opensource.org/licenses/MIT).
-
-See also:
-[YOURLS](https://github.com/YOURLS/YOURLS) ♡
-[SteppingHat/php-emoji-detector](https://github.com/SteppingHat/php-emoji-detector) ♡ [unicode.org](https://unicode.org/Public/emoji/13.1/emoji-test.txt)
diff --git a/user/plugins/telepathics-yourls-emojis/composer.json b/user/plugins/telepathics-yourls-emojis/composer.json
deleted file mode 100644
index 2034c28..0000000
--- a/user/plugins/telepathics-yourls-emojis/composer.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "name": "telepathics/yourls-emojis",
- "description": "A YOURLS plugin that allows emojis in the custom short URLs",
- "license": "MIT",
- "homepage": "https://github.com/telepathics/yourls-emojis",
- "require": {
- "php": ">=7.2",
- "steppinghat/emoji-detector": "^1.1"
- }
-}
diff --git a/user/plugins/telepathics-yourls-emojis/composer.lock b/user/plugins/telepathics-yourls-emojis/composer.lock
deleted file mode 100644
index fcf017e..0000000
--- a/user/plugins/telepathics-yourls-emojis/composer.lock
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "_readme": [
- "This file locks the dependencies of your project to a known state",
- "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
- "This file is @generated automatically"
- ],
- "content-hash": "d8ae5b9fddab58bd68089f83a8564e1e",
- "packages": [
- {
- "name": "steppinghat/emoji-detector",
- "version": "1.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/SteppingHat/php-emoji-detector.git",
- "reference": "d2301e9553795e1ac2f3f2638438b3808654c57f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/SteppingHat/php-emoji-detector/zipball/d2301e9553795e1ac2f3f2638438b3808654c57f",
- "reference": "d2301e9553795e1ac2f3f2638438b3808654c57f",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "ext-mbstring": "*",
- "php": ">=7.1"
- },
- "require-dev": {
- "symfony/phpunit-bridge": "^5.0@dev"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "SteppingHat\\EmojiDetector\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Javan Eskander",
- "homepage": "https://javaneskander.com"
- }
- ],
- "description": "Detect and validate emoji in an input string",
- "homepage": "https://github.com/steppinghat/emoji-detector",
- "time": "2021-03-18T06:03:22+00:00"
- }
- ],
- "packages-dev": [],
- "aliases": [],
- "minimum-stability": "stable",
- "stability-flags": [],
- "prefer-stable": false,
- "prefer-lowest": false,
- "platform": {
- "php": ">=7.2"
- },
- "platform-dev": [],
- "plugin-api-version": "1.1.0"
-}
diff --git a/user/plugins/telepathics-yourls-emojis/plugin.php b/user/plugins/telepathics-yourls-emojis/plugin.php
deleted file mode 100644
index dd5fdea..0000000
--- a/user/plugins/telepathics-yourls-emojis/plugin.php
+++ /dev/null
@@ -1,50 +0,0 @@
-detect(urldecode($unsafe_url));
-
- if( sizeof($detect_emoji) > 0 ) {
- foreach ($detect_emoji as $emoji) {
- $clean_url .= $emoji->getEmoji();
- }
- return $clean_url;
- }
- return $unsafe_url;
-}
-
-/*
- * filter wrong spacing whoopsies
- * see @link https://github.com/YOURLS/YOURLS/issues/1303
- */
-yourls_add_filter( 'sanitize_url', 'fix_long_url' );
-function fix_long_url( $url, $unsafe_url ) {
- $search = array ( '%2520', '%2521', '%2522', '%2523', '%2524', '%2525', '%2526', '%2527', '%2528', '%2529', '%252A', '%252B', '%252C', '%252D', '%252E', '%252F', '%253D', '%253F', '%255C', '%255F' );
- $replace = array ( '%20', '%21', '%22', '%23', '%24', '%25', '%26', '%27', '%28', '%29', '%2A', '%2B', '%2C', '%2D', '%2E', '%2F', '%3D', '%3F', '%5C', '%5F' );
- $url = str_ireplace ( $search, $replace ,$url );
- return yourls_apply_filter( 'after_fix_long_url', $url, $unsafe_url );
-}
diff --git a/user/plugins/telepathics-yourls-emojis/util/emojis.txt b/user/plugins/telepathics-yourls-emojis/util/emojis.txt
deleted file mode 100644
index 9bdcfbc..0000000
--- a/user/plugins/telepathics-yourls-emojis/util/emojis.txt
+++ /dev/null
@@ -1 +0,0 @@
-😀😃😄😁😆😅🤣😂🙂🙃😉😊😇😍🤩😘😗☺️😚😙😋😛😜🤪😝🤑🤗🤭🤫🤔🤐🤨😐😑😶😶🌫️😶😏😒🙄😬😮💨🤥😌😔😪🤤😴😷🤒🤕🤢🤮🤧😵😵💫🤯🤠😎🤓🧐😕😟🙁☹️😮😯😲😳😦😧😨😰😥😢😭😱😖😣😞😓😩😫😤😡😠🤬😈👿💀☠️💩🤡👹👺👻👽👾🤖😺😸😹😻😼😽🙀😿😾🙈🙉🙊💋💌💘💝💖💗💓💞💕💟❣️💔❤️🔥🔥❤️❤️🧡💛💚💙💜🖤💯💢💥💫💦💨🕳️💣💬👁️🗨️🗨️👁️🗨️🗯️💭💤👋👋🏻👋🏼👋🏽👋🏾👋🏿🤚🤚🏻🤚🏼🤚🏽🤚🏾🤚🏿🖐️🏻🏼🏽🏾🏿✋✋🏻✋🏼✋🏽✋🏾✋🏿🖖🖖🏻🖖🏼🖖🏽🖖🏾🖖🏿👌👌🏻👌🏼👌🏽👌🏾👌🏿🏻🏼🏽🏾🏿🏻🏼🏽🏾🏿✌️🏻🏼🏽🏾🏿🤞🤞🏻🤞🏼🤞🏽🤞🏾🤞🏿🤟🤟🏻🤟🏼🤟🏽🤟🏾🤟🏿🤘🤘🏻🤘🏼🤘🏽🤘🏾🤘🏿🤙🤙🏻🤙🏼🤙🏽🤙🏾🤙🏿👈👈🏻👈🏼👈🏽👈🏾👈🏿👉👉🏻👉🏼👉🏽👉🏾👉🏿👆👆🏻👆🏼👆🏽👆🏾👆🏿🖕🖕🏻🖕🏼🖕🏽🖕🏾🖕🏿👇👇🏻👇🏼👇🏽👇🏾👇🏿☝️🏻🏼🏽🏾🏿👍👍🏻👍🏼👍🏽👍🏾👍🏿👎👎🏻👎🏼👎🏽👎🏾👎🏿✊✊🏻✊🏼✊🏽✊🏾✊🏿👊👊🏻👊🏼👊🏽👊🏾👊🏿🤛🤛🏻🤛🏼🤛🏽🤛🏾🤛🏿🤜🤜🏻🤜🏼🤜🏽🤜🏾🤜🏿👏👏🏻👏🏼👏🏽👏🏾👏🏿🙌🙌🏻🙌🏼🙌🏽🙌🏾🙌🏿👐👐🏻👐🏼👐🏽👐🏾👐🏿🤲🤲🏻🤲🏼🤲🏽🤲🏾🤲🏿🤝🙏🙏🏻🙏🏼🙏🏽🙏🏾🙏🏿✍️🏻🏼🏽🏾🏿💅💅🏻💅🏼💅🏽💅🏾💅🏿🤳🤳🏻🤳🏼🤳🏽🤳🏾🤳🏿💪💪🏻💪🏼💪🏽💪🏾💪🏿🏻🏼🏽🏾🏿🏻🏼🏽🏾🏿👂👂🏻👂🏼👂🏽👂🏾👂🏿🏻🏼🏽🏾🏿👃👃🏻👃🏼👃🏽👃🏾👃🏿🧠👀👁️👅👄👶👶🏻👶🏼👶🏽👶🏾👶🏿🧒🧒🏻🧒🏼🧒🏽🧒🏾🧒🏿👦👦🏻👦🏼👦🏽👦🏾👦🏿👧👧🏻👧🏼👧🏽👧🏾👧🏿🧑🧑🏻🧑🏼🧑🏽🧑🏾🧑🏿👱👱🏻👱🏼👱🏽👱🏾👱🏿👨👨🏻👨🏼👨🏽👨🏾👨🏿🧔🧔🏻🧔🏼🧔🏽🧔🏾🧔🏿🧔♂️🧔🧔🏻♂️🧔🏻🧔🏼♂️🧔🏼🧔🏽♂️🧔🏽🧔🏾♂️🧔🏾🧔🏿♂️🧔🏿🧔♀️🧔🧔🏻♀️🧔🏻🧔🏼♀️🧔🏼🧔🏽♀️🧔🏽🧔🏾♀️🧔🏾🧔🏿♀️🧔🏿👨👨🏻👨🏼👨🏽👨🏾👨🏿👨👨🏻👨🏼👨🏽👨🏾👨🏿👨👨🏻👨🏼👨🏽👨🏾👨🏿👨👨🏻👨🏼👨🏽👨🏾👨🏿👩👩🏻👩🏼👩🏽👩🏾👩🏿👩👩🏻👩🏼👩🏽👩🏾👩🏿🧑🧑🏻🧑🏼🧑🏽🧑🏾🧑🏿👩👩🏻👩🏼👩🏽👩🏾👩🏿🧑🧑🏻🧑🏼🧑🏽🧑🏾🧑🏿👩👩🏻👩🏼👩🏽👩🏾👩🏿🧑🧑🏻🧑🏼🧑🏽🧑🏾🧑🏿👩👩🏻👩🏼👩🏽👩🏾👩🏿🧑🧑🏻🧑🏼🧑🏽🧑🏾🧑🏿👱♀️👱👱🏻♀️👱🏻👱🏼♀️👱🏼👱🏽♀️👱🏽👱🏾♀️👱🏾👱🏿♀️👱🏿👱♂️👱👱🏻♂️👱🏻👱🏼♂️👱🏼👱🏽♂️👱🏽👱🏾♂️👱🏾👱🏿♂️👱🏿🧓🧓🏻🧓🏼🧓🏽🧓🏾🧓🏿👴👴🏻👴🏼👴🏽👴🏾👴🏿👵👵🏻👵🏼👵🏽👵🏾👵🏿🙍🙍🏻🙍🏼🙍🏽🙍🏾🙍🏿🙍♂️🙍🙍🏻♂️🙍🏻🙍🏼♂️🙍🏼🙍🏽♂️🙍🏽🙍🏾♂️🙍🏾🙍🏿♂️🙍🏿🙍♀️🙍🙍🏻♀️🙍🏻🙍🏼♀️🙍🏼🙍🏽♀️🙍🏽🙍🏾♀️🙍🏾🙍🏿♀️🙍🏿🙎🙎🏻🙎🏼🙎🏽🙎🏾🙎🏿🙎♂️🙎🙎🏻♂️🙎🏻🙎🏼♂️🙎🏼🙎🏽♂️🙎🏽🙎🏾♂️🙎🏾🙎🏿♂️🙎🏿🙎♀️🙎🙎🏻♀️🙎🏻🙎🏼♀️🙎🏼🙎🏽♀️🙎🏽🙎🏾♀️🙎🏾🙎🏿♀️🙎🏿🙅🙅🏻🙅🏼🙅🏽🙅🏾🙅🏿🙅♂️🙅🙅🏻♂️🙅🏻🙅🏼♂️🙅🏼🙅🏽♂️🙅🏽🙅🏾♂️🙅🏾🙅🏿♂️🙅🏿🙅♀️🙅🙅🏻♀️🙅🏻🙅🏼♀️🙅🏼🙅🏽♀️🙅🏽🙅🏾♀️🙅🏾🙅🏿♀️🙅🏿🙆🙆🏻🙆🏼🙆🏽🙆🏾🙆🏿🙆♂️🙆🙆🏻♂️🙆🏻🙆🏼♂️🙆🏼🙆🏽♂️🙆🏽🙆🏾♂️🙆🏾🙆🏿♂️🙆🏿🙆♀️🙆🙆🏻♀️🙆🏻🙆🏼♀️🙆🏼🙆🏽♀️🙆🏽🙆🏾♀️🙆🏾🙆🏿♀️🙆🏿💁💁🏻💁🏼💁🏽💁🏾💁🏿💁♂️💁💁🏻♂️💁🏻💁🏼♂️💁🏼💁🏽♂️💁🏽💁🏾♂️💁🏾💁🏿♂️💁🏿💁♀️💁💁🏻♀️💁🏻💁🏼♀️💁🏼💁🏽♀️💁🏽💁🏾♀️💁🏾💁🏿♀️💁🏿🙋🙋🏻🙋🏼🙋🏽🙋🏾🙋🏿🙋♂️🙋🙋🏻♂️🙋🏻🙋🏼♂️🙋🏼🙋🏽♂️🙋🏽🙋🏾♂️🙋🏾🙋🏿♂️🙋🏿🙋♀️🙋🙋🏻♀️🙋🏻🙋🏼♀️🙋🏼🙋🏽♀️🙋🏽🙋🏾♀️🙋🏾🙋🏿♀️🙋🏿🏻🏼🏽🏾🏿♂️🏻♂️🏻🏼♂️🏼🏽♂️🏽🏾♂️🏾🏿♂️🏿♀️🏻♀️🏻🏼♀️🏼🏽♀️🏽🏾♀️🏾🏿♀️🏿🙇🙇🏻🙇🏼🙇🏽🙇🏾🙇🏿🙇♂️🙇🙇🏻♂️🙇🏻🙇🏼♂️🙇🏼🙇🏽♂️🙇🏽🙇🏾♂️🙇🏾🙇🏿♂️🙇🏿🙇♀️🙇🙇🏻♀️🙇🏻🙇🏼♀️🙇🏼🙇🏽♀️🙇🏽🙇🏾♀️🙇🏾🙇🏿♀️🙇🏿🤦🤦🏻🤦🏼🤦🏽🤦🏾🤦🏿🤦♂️🤦🤦🏻♂️🤦🏻🤦🏼♂️🤦🏼🤦🏽♂️🤦🏽🤦🏾♂️🤦🏾🤦🏿♂️🤦🏿🤦♀️🤦🤦🏻♀️🤦🏻🤦🏼♀️🤦🏼🤦🏽♀️🤦🏽🤦🏾♀️🤦🏾🤦🏿♀️🤦🏿🤷🤷🏻🤷🏼🤷🏽🤷🏾🤷🏿🤷♂️🤷🤷🏻♂️🤷🏻🤷🏼♂️🤷🏼🤷🏽♂️🤷🏽🤷🏾♂️🤷🏾🤷🏿♂️🤷🏿🤷♀️🤷🤷🏻♀️🤷🏻🤷🏼♀️🤷🏼🤷🏽♀️🤷🏽🤷🏾♀️🤷🏾🤷🏿♀️🤷🏿🧑⚕️🧑🧑🏻⚕️🧑🏻🧑🏼⚕️🧑🏼🧑🏽⚕️🧑🏽🧑🏾⚕️🧑🏾🧑🏿⚕️🧑🏿👨⚕️👨👨🏻⚕️👨🏻👨🏼⚕️👨🏼👨🏽⚕️👨🏽👨🏾⚕️👨🏾👨🏿⚕️👨🏿👩⚕️👩👩🏻⚕️👩🏻👩🏼⚕️👩🏼👩🏽⚕️👩🏽👩🏾⚕️👩🏾👩🏿⚕️👩🏿🧑🎓🧑🏻🎓🧑🏼🎓🧑🏽🎓🧑🏾🎓🧑🏿🎓👨🎓👨🏻🎓👨🏼🎓👨🏽🎓👨🏾🎓👨🏿🎓👩🎓👩🏻🎓👩🏼🎓👩🏽🎓👩🏾🎓👩🏿🎓🧑🏫🧑🏻🏫🧑🏼🏫🧑🏽🏫🧑🏾🏫🧑🏿🏫👨🏫👨🏻🏫👨🏼🏫👨🏽🏫👨🏾🏫👨🏿🏫👩🏫👩🏻🏫👩🏼🏫👩🏽🏫👩🏾🏫👩🏿🏫🧑⚖️🧑🧑🏻⚖️🧑🏻🧑🏼⚖️🧑🏼🧑🏽⚖️🧑🏽🧑🏾⚖️🧑🏾🧑🏿⚖️🧑🏿👨⚖️👨👨🏻⚖️👨🏻👨🏼⚖️👨🏼👨🏽⚖️👨🏽👨🏾⚖️👨🏾👨🏿⚖️👨🏿👩⚖️👩👩🏻⚖️👩🏻👩🏼⚖️👩🏼👩🏽⚖️👩🏽👩🏾⚖️👩🏾👩🏿⚖️👩🏿🧑🌾🧑🏻🌾🧑🏼🌾🧑🏽🌾🧑🏾🌾🧑🏿🌾👨🌾👨🏻🌾👨🏼🌾👨🏽🌾👨🏾🌾👨🏿🌾👩🌾👩🏻🌾👩🏼🌾👩🏽🌾👩🏾🌾👩🏿🌾🧑🍳🧑🏻🍳🧑🏼🍳🧑🏽🍳🧑🏾🍳🧑🏿🍳👨🍳👨🏻🍳👨🏼🍳👨🏽🍳👨🏾🍳👨🏿🍳👩🍳👩🏻🍳👩🏼🍳👩🏽🍳👩🏾🍳👩🏿🍳🧑🔧🧑🏻🔧🧑🏼🔧🧑🏽🔧🧑🏾🔧🧑🏿🔧👨🔧👨🏻🔧👨🏼🔧👨🏽🔧👨🏾🔧👨🏿🔧👩🔧👩🏻🔧👩🏼🔧👩🏽🔧👩🏾🔧👩🏿🔧🧑🏭🧑🏻🏭🧑🏼🏭🧑🏽🏭🧑🏾🏭🧑🏿🏭👨🏭👨🏻🏭👨🏼🏭👨🏽🏭👨🏾🏭👨🏿🏭👩🏭👩🏻🏭👩🏼🏭👩🏽🏭👩🏾🏭👩🏿🏭🧑💼🧑🏻💼🧑🏼💼🧑🏽💼🧑🏾💼🧑🏿💼👨💼👨🏻💼👨🏼💼👨🏽💼👨🏾💼👨🏿💼👩💼👩🏻💼👩🏼💼👩🏽💼👩🏾💼👩🏿💼🧑🔬🧑🏻🔬🧑🏼🔬🧑🏽🔬🧑🏾🔬🧑🏿🔬👨🔬👨🏻🔬👨🏼🔬👨🏽🔬👨🏾🔬👨🏿🔬👩🔬👩🏻🔬👩🏼🔬👩🏽🔬👩🏾🔬👩🏿🔬🧑💻🧑🏻💻🧑🏼💻🧑🏽💻🧑🏾💻🧑🏿💻👨💻👨🏻💻👨🏼💻👨🏽💻👨🏾💻👨🏿💻👩💻👩🏻💻👩🏼💻👩🏽💻👩🏾💻👩🏿💻🧑🎤🧑🏻🎤🧑🏼🎤🧑🏽🎤🧑🏾🎤🧑🏿🎤👨🎤👨🏻🎤👨🏼🎤👨🏽🎤👨🏾🎤👨🏿🎤👩🎤👩🏻🎤👩🏼🎤👩🏽🎤👩🏾🎤👩🏿🎤🧑🎨🧑🏻🎨🧑🏼🎨🧑🏽🎨🧑🏾🎨🧑🏿🎨👨🎨👨🏻🎨👨🏼🎨👨🏽🎨👨🏾🎨👨🏿🎨👩🎨👩🏻🎨👩🏼🎨👩🏽🎨👩🏾🎨👩🏿🎨🧑✈️🧑🧑🏻✈️🧑🏻🧑🏼✈️🧑🏼🧑🏽✈️🧑🏽🧑🏾✈️🧑🏾🧑🏿✈️🧑🏿👨✈️👨👨🏻✈️👨🏻👨🏼✈️👨🏼👨🏽✈️👨🏽👨🏾✈️👨🏾👨🏿✈️👨🏿👩✈️👩👩🏻✈️👩🏻👩🏼✈️👩🏼👩🏽✈️👩🏽👩🏾✈️👩🏾👩🏿✈️👩🏿🧑🚀🧑🏻🚀🧑🏼🚀🧑🏽🚀🧑🏾🚀🧑🏿🚀👨🚀👨🏻🚀👨🏼🚀👨🏽🚀👨🏾🚀👨🏿🚀👩🚀👩🏻🚀👩🏼🚀👩🏽🚀👩🏾🚀👩🏿🚀🧑🚒🧑🏻🚒🧑🏼🚒🧑🏽🚒🧑🏾🚒🧑🏿🚒👨🚒👨🏻🚒👨🏼🚒👨🏽🚒👨🏾🚒👨🏿🚒👩🚒👩🏻🚒👩🏼🚒👩🏽🚒👩🏾🚒👩🏿🚒👮👮🏻👮🏼👮🏽👮🏾👮🏿👮♂️👮👮🏻♂️👮🏻👮🏼♂️👮🏼👮🏽♂️👮🏽👮🏾♂️👮🏾👮🏿♂️👮🏿👮♀️👮👮🏻♀️👮🏻👮🏼♀️👮🏼👮🏽♀️👮🏽👮🏾♀️👮🏾👮🏿♀️👮🏿🕵️🏻🏼🏽🏾🏿🕵️♂️♂️🕵️🕵🏻♂️🏻🕵🏼♂️🏼🕵🏽♂️🏽🕵🏾♂️🏾🕵🏿♂️🏿🕵️♀️♀️🕵️🕵🏻♀️🏻🕵🏼♀️🏼🕵🏽♀️🏽🕵🏾♀️🏾🕵🏿♀️🏿💂💂🏻💂🏼💂🏽💂🏾💂🏿💂♂️💂💂🏻♂️💂🏻💂🏼♂️💂🏼💂🏽♂️💂🏽💂🏾♂️💂🏾💂🏿♂️💂🏿💂♀️💂💂🏻♀️💂🏻💂🏼♀️💂🏼💂🏽♀️💂🏽💂🏾♀️💂🏾💂🏿♀️💂🏿🏻🏼🏽🏾🏿👷👷🏻👷🏼👷🏽👷🏾👷🏿👷♂️👷👷🏻♂️👷🏻👷🏼♂️👷🏼👷🏽♂️👷🏽👷🏾♂️👷🏾👷🏿♂️👷🏿👷♀️👷👷🏻♀️👷🏻👷🏼♀️👷🏼👷🏽♀️👷🏽👷🏾♀️👷🏾👷🏿♀️👷🏿🤴🤴🏻🤴🏼🤴🏽🤴🏾🤴🏿👸👸🏻👸🏼👸🏽👸🏾👸🏿👳👳🏻👳🏼👳🏽👳🏾👳🏿👳♂️👳👳🏻♂️👳🏻👳🏼♂️👳🏼👳🏽♂️👳🏽👳🏾♂️👳🏾👳🏿♂️👳🏿👳♀️👳👳🏻♀️👳🏻👳🏼♀️👳🏼👳🏽♀️👳🏽👳🏾♀️👳🏾👳🏿♀️👳🏿👲👲🏻👲🏼👲🏽👲🏾👲🏿🧕🧕🏻🧕🏼🧕🏽🧕🏾🧕🏿🤵🤵🏻🤵🏼🤵🏽🤵🏾🤵🏿🤵♂️🤵🤵🏻♂️🤵🏻🤵🏼♂️🤵🏼🤵🏽♂️🤵🏽🤵🏾♂️🤵🏾🤵🏿♂️🤵🏿🤵♀️🤵🤵🏻♀️🤵🏻🤵🏼♀️🤵🏼🤵🏽♀️🤵🏽🤵🏾♀️🤵🏾🤵🏿♀️🤵🏿👰👰🏻👰🏼👰🏽👰🏾👰🏿👰♂️👰👰🏻♂️👰🏻👰🏼♂️👰🏼👰🏽♂️👰🏽👰🏾♂️👰🏾👰🏿♂️👰🏿👰♀️👰👰🏻♀️👰🏻👰🏼♀️👰🏼👰🏽♀️👰🏽👰🏾♀️👰🏾👰🏿♀️👰🏿🤰🤰🏻🤰🏼🤰🏽🤰🏾🤰🏿🤱🤱🏻🤱🏼🤱🏽🤱🏾🤱🏿👩🍼👩🏻🍼👩🏼🍼👩🏽🍼👩🏾🍼👩🏿🍼👨🍼👨🏻🍼👨🏼🍼👨🏽🍼👨🏾🍼👨🏿🍼🧑🍼🧑🏻🍼🧑🏼🍼🧑🏽🍼🧑🏾🍼🧑🏿🍼👼👼🏻👼🏼👼🏽👼🏾👼🏿🎅🎅🏻🎅🏼🎅🏽🎅🏾🎅🏿🤶🤶🏻🤶🏼🤶🏽🤶🏾🤶🏿🧑🎄🧑🏻🎄🧑🏼🎄🧑🏽🎄🧑🏾🎄🧑🏿🎄🏻🏼🏽🏾🏿♂️🏻♂️🏻🏼♂️🏼🏽♂️🏽🏾♂️🏾🏿♂️🏿♀️🏻♀️🏻🏼♀️🏼🏽♀️🏽🏾♀️🏾🏿♀️🏿🏻🏼🏽🏾🏿♂️🏻♂️🏻🏼♂️🏼🏽♂️🏽🏾♂️🏾🏿♂️🏿♀️🏻♀️🏻🏼♀️🏼🏽♀️🏽🏾♀️🏾🏿♀️🏿🧙🧙🏻🧙🏼🧙🏽🧙🏾🧙🏿🧙♂️🧙🧙🏻♂️🧙🏻🧙🏼♂️🧙🏼🧙🏽♂️🧙🏽🧙🏾♂️🧙🏾🧙🏿♂️🧙🏿🧙♀️🧙🧙🏻♀️🧙🏻🧙🏼♀️🧙🏼🧙🏽♀️🧙🏽🧙🏾♀️🧙🏾🧙🏿♀️🧙🏿🧚🧚🏻🧚🏼🧚🏽🧚🏾🧚🏿🧚♂️🧚🧚🏻♂️🧚🏻🧚🏼♂️🧚🏼🧚🏽♂️🧚🏽🧚🏾♂️🧚🏾🧚🏿♂️🧚🏿🧚♀️🧚🧚🏻♀️🧚🏻🧚🏼♀️🧚🏼🧚🏽♀️🧚🏽🧚🏾♀️🧚🏾🧚🏿♀️🧚🏿🧛🧛🏻🧛🏼🧛🏽🧛🏾🧛🏿🧛♂️🧛🧛🏻♂️🧛🏻🧛🏼♂️🧛🏼🧛🏽♂️🧛🏽🧛🏾♂️🧛🏾🧛🏿♂️🧛🏿🧛♀️🧛🧛🏻♀️🧛🏻🧛🏼♀️🧛🏼🧛🏽♀️🧛🏽🧛🏾♀️🧛🏾🧛🏿♀️🧛🏿🧜🧜🏻🧜🏼🧜🏽🧜🏾🧜🏿🧜♂️🧜🧜🏻♂️🧜🏻🧜🏼♂️🧜🏼🧜🏽♂️🧜🏽🧜🏾♂️🧜🏾🧜🏿♂️🧜🏿🧜♀️🧜🧜🏻♀️🧜🏻🧜🏼♀️🧜🏼🧜🏽♀️🧜🏽🧜🏾♀️🧜🏾🧜🏿♀️🧜🏿🧝🧝🏻🧝🏼🧝🏽🧝🏾🧝🏿🧝♂️🧝🧝🏻♂️🧝🏻🧝🏼♂️🧝🏼🧝🏽♂️🧝🏽🧝🏾♂️🧝🏾🧝🏿♂️🧝🏿🧝♀️🧝🧝🏻♀️🧝🏻🧝🏼♀️🧝🏼🧝🏽♀️🧝🏽🧝🏾♀️🧝🏾🧝🏿♀️🧝🏿🧞🧞♂️🧞🧞♀️🧞🧟🧟♂️🧟🧟♀️🧟💆💆🏻💆🏼💆🏽💆🏾💆🏿💆♂️💆💆🏻♂️💆🏻💆🏼♂️💆🏼💆🏽♂️💆🏽💆🏾♂️💆🏾💆🏿♂️💆🏿💆♀️💆💆🏻♀️💆🏻💆🏼♀️💆🏼💆🏽♀️💆🏽💆🏾♀️💆🏾💆🏿♀️💆🏿💇💇🏻💇🏼💇🏽💇🏾💇🏿💇♂️💇💇🏻♂️💇🏻💇🏼♂️💇🏼💇🏽♂️💇🏽💇🏾♂️💇🏾💇🏿♂️💇🏿💇♀️💇💇🏻♀️💇🏻💇🏼♀️💇🏼💇🏽♀️💇🏽💇🏾♀️💇🏾💇🏿♀️💇🏿🚶🚶🏻🚶🏼🚶🏽🚶🏾🚶🏿🚶♂️🚶🚶🏻♂️🚶🏻🚶🏼♂️🚶🏼🚶🏽♂️🚶🏽🚶🏾♂️🚶🏾🚶🏿♂️🚶🏿🚶♀️🚶🚶🏻♀️🚶🏻🚶🏼♀️🚶🏼🚶🏽♀️🚶🏽🚶🏾♀️🚶🏾🚶🏿♀️🚶🏿🏻🏼🏽🏾🏿♂️🏻♂️🏻🏼♂️🏼🏽♂️🏽🏾♂️🏾🏿♂️🏿♀️🏻♀️🏻🏼♀️🏼🏽♀️🏽🏾♀️🏾🏿♀️🏿🏻🏼🏽🏾🏿♂️🏻♂️🏻🏼♂️🏼🏽♂️🏽🏾♂️🏾🏿♂️🏿♀️🏻♀️🏻🏼♀️🏼🏽♀️🏽🏾♀️🏾🏿♀️🏿🧑🧑🏻🧑🏼🧑🏽🧑🏾🧑🏿👨👨🏻👨🏼👨🏽👨🏾👨🏿👩👩🏻👩🏼👩🏽👩🏾👩🏿🧑🧑🏻🧑🏼🧑🏽🧑🏾🧑🏿👨👨🏻👨🏼👨🏽👨🏾👨🏿👩👩🏻👩🏼👩🏽👩🏾👩🏿🧑🧑🏻🧑🏼🧑🏽🧑🏾🧑🏿👨👨🏻👨🏼👨🏽👨🏾👨🏿👩👩🏻👩🏼👩🏽👩🏾👩🏿🏃🏃🏻🏃🏼🏃🏽🏃🏾🏃🏿🏃♂️🏃🏃🏻♂️🏃🏻🏃🏼♂️🏃🏼🏃🏽♂️🏃🏽🏃🏾♂️🏃🏾🏃🏿♂️🏃🏿🏃♀️🏃🏃🏻♀️🏃🏻🏃🏼♀️🏃🏼🏃🏽♀️🏃🏽🏃🏾♀️🏃🏾🏃🏿♀️🏃🏿💃💃🏻💃🏼💃🏽💃🏾💃🏿🕺🕺🏻🕺🏼🕺🏽🕺🏾🕺🏿🕴️🏻🏼🏽🏾🏿👯👯♂️👯👯♀️👯🧖🧖🏻🧖🏼🧖🏽🧖🏾🧖🏿🧖♂️🧖🧖🏻♂️🧖🏻🧖🏼♂️🧖🏼🧖🏽♂️🧖🏽🧖🏾♂️🧖🏾🧖🏿♂️🧖🏿🧖♀️🧖🧖🏻♀️🧖🏻🧖🏼♀️🧖🏼🧖🏽♀️🧖🏽🧖🏾♀️🧖🏾🧖🏿♀️🧖🏿🧗🧗🏻🧗🏼🧗🏽🧗🏾🧗🏿🧗♂️🧗🧗🏻♂️🧗🏻🧗🏼♂️🧗🏼🧗🏽♂️🧗🏽🧗🏾♂️🧗🏾🧗🏿♂️🧗🏿🧗♀️🧗🧗🏻♀️🧗🏻🧗🏼♀️🧗🏼🧗🏽♀️🧗🏽🧗🏾♀️🧗🏾🧗🏿♀️🧗🏿🤺🏇🏇🏻🏇🏼🏇🏽🏇🏾🏇🏿⛷️🏂🏂🏻🏂🏼🏂🏽🏂🏾🏂🏿🏌️🏻🏼🏽🏾🏿🏌️♂️♂️🏌️🏌🏻♂️🏻🏌🏼♂️🏼🏌🏽♂️🏽🏌🏾♂️🏾🏌🏿♂️🏿🏌️♀️♀️🏌️🏌🏻♀️🏻🏌🏼♀️🏼🏌🏽♀️🏽🏌🏾♀️🏾🏌🏿♀️🏿🏄🏄🏻🏄🏼🏄🏽🏄🏾🏄🏿🏄♂️🏄🏄🏻♂️🏄🏻🏄🏼♂️🏄🏼🏄🏽♂️🏄🏽🏄🏾♂️🏄🏾🏄🏿♂️🏄🏿🏄♀️🏄🏄🏻♀️🏄🏻🏄🏼♀️🏄🏼🏄🏽♀️🏄🏽🏄🏾♀️🏄🏾🏄🏿♀️🏄🏿🚣🚣🏻🚣🏼🚣🏽🚣🏾🚣🏿🚣♂️🚣🚣🏻♂️🚣🏻🚣🏼♂️🚣🏼🚣🏽♂️🚣🏽🚣🏾♂️🚣🏾🚣🏿♂️🚣🏿🚣♀️🚣🚣🏻♀️🚣🏻🚣🏼♀️🚣🏼🚣🏽♀️🚣🏽🚣🏾♀️🚣🏾🚣🏿♀️🚣🏿🏊🏊🏻🏊🏼🏊🏽🏊🏾🏊🏿🏊♂️🏊🏊🏻♂️🏊🏻🏊🏼♂️🏊🏼🏊🏽♂️🏊🏽🏊🏾♂️🏊🏾🏊🏿♂️🏊🏿🏊♀️🏊🏊🏻♀️🏊🏻🏊🏼♀️🏊🏼🏊🏽♀️🏊🏽🏊🏾♀️🏊🏾🏊🏿♀️🏊🏿⛹️🏻🏼🏽🏾🏿⛹️♂️♂️⛹️⛹🏻♂️🏻⛹🏼♂️🏼⛹🏽♂️🏽⛹🏾♂️🏾⛹🏿♂️🏿⛹️♀️♀️⛹️⛹🏻♀️🏻⛹🏼♀️🏼⛹🏽♀️🏽⛹🏾♀️🏾⛹🏿♀️🏿🏋️🏻🏼🏽🏾🏿🏋️♂️♂️🏋️🏋🏻♂️🏻🏋🏼♂️🏼🏋🏽♂️🏽🏋🏾♂️🏾🏋🏿♂️🏿🏋️♀️♀️🏋️🏋🏻♀️🏻🏋🏼♀️🏼🏋🏽♀️🏽🏋🏾♀️🏾🏋🏿♀️🏿🚴🚴🏻🚴🏼🚴🏽🚴🏾🚴🏿🚴♂️🚴🚴🏻♂️🚴🏻🚴🏼♂️🚴🏼🚴🏽♂️🚴🏽🚴🏾♂️🚴🏾🚴🏿♂️🚴🏿🚴♀️🚴🚴🏻♀️🚴🏻🚴🏼♀️🚴🏼🚴🏽♀️🚴🏽🚴🏾♀️🚴🏾🚴🏿♀️🚴🏿🚵🚵🏻🚵🏼🚵🏽🚵🏾🚵🏿🚵♂️🚵🚵🏻♂️🚵🏻🚵🏼♂️🚵🏼🚵🏽♂️🚵🏽🚵🏾♂️🚵🏾🚵🏿♂️🚵🏿🚵♀️🚵🚵🏻♀️🚵🏻🚵🏼♀️🚵🏼🚵🏽♀️🚵🏽🚵🏾♀️🚵🏾🚵🏿♀️🚵🏿🤸🤸🏻🤸🏼🤸🏽🤸🏾🤸🏿🤸♂️🤸🤸🏻♂️🤸🏻🤸🏼♂️🤸🏼🤸🏽♂️🤸🏽🤸🏾♂️🤸🏾🤸🏿♂️🤸🏿🤸♀️🤸🤸🏻♀️🤸🏻🤸🏼♀️🤸🏼🤸🏽♀️🤸🏽🤸🏾♀️🤸🏾🤸🏿♀️🤸🏿🤼🤼♂️🤼🤼♀️🤼🤽🤽🏻🤽🏼🤽🏽🤽🏾🤽🏿🤽♂️🤽🤽🏻♂️🤽🏻🤽🏼♂️🤽🏼🤽🏽♂️🤽🏽🤽🏾♂️🤽🏾🤽🏿♂️🤽🏿🤽♀️🤽🤽🏻♀️🤽🏻🤽🏼♀️🤽🏼🤽🏽♀️🤽🏽🤽🏾♀️🤽🏾🤽🏿♀️🤽🏿🤾🤾🏻🤾🏼🤾🏽🤾🏾🤾🏿🤾♂️🤾🤾🏻♂️🤾🏻🤾🏼♂️🤾🏼🤾🏽♂️🤾🏽🤾🏾♂️🤾🏾🤾🏿♂️🤾🏿🤾♀️🤾🤾🏻♀️🤾🏻🤾🏼♀️🤾🏼🤾🏽♀️🤾🏽🤾🏾♀️🤾🏾🤾🏿♀️🤾🏿🤹🤹🏻🤹🏼🤹🏽🤹🏾🤹🏿🤹♂️🤹🤹🏻♂️🤹🏻🤹🏼♂️🤹🏼🤹🏽♂️🤹🏽🤹🏾♂️🤹🏾🤹🏿♂️🤹🏿🤹♀️🤹🤹🏻♀️🤹🏻🤹🏼♀️🤹🏼🤹🏽♀️🤹🏽🤹🏾♀️🤹🏾🤹🏿♀️🤹🏿🧘🧘🏻🧘🏼🧘🏽🧘🏾🧘🏿🧘♂️🧘🧘🏻♂️🧘🏻🧘🏼♂️🧘🏼🧘🏽♂️🧘🏽🧘🏾♂️🧘🏾🧘🏿♂️🧘🏿🧘♀️🧘🧘🏻♀️🧘🏻🧘🏼♀️🧘🏼🧘🏽♀️🧘🏽🧘🏾♀️🧘🏾🧘🏿♀️🧘🏿🛀🛀🏻🛀🏼🛀🏽🛀🏾🛀🏿🛌🛌🏻🛌🏼🛌🏽🛌🏾🛌🏿🧑🤝🧑🧑🏻🤝🧑🏻🧑🏻🤝🧑🏼🧑🏻🤝🧑🏽🧑🏻🤝🧑🏾🧑🏻🤝🧑🏿🧑🏼🤝🧑🏻🧑🏼🤝🧑🏼🧑🏼🤝🧑🏽🧑🏼🤝🧑🏾🧑🏼🤝🧑🏿🧑🏽🤝🧑🏻🧑🏽🤝🧑🏼🧑🏽🤝🧑🏽🧑🏽🤝🧑🏾🧑🏽🤝🧑🏿🧑🏾🤝🧑🏻🧑🏾🤝🧑🏼🧑🏾🤝🧑🏽🧑🏾🤝🧑🏾🧑🏾🤝🧑🏿🧑🏿🤝🧑🏻🧑🏿🤝🧑🏼🧑🏿🤝🧑🏽🧑🏿🤝🧑🏾🧑🏿🤝🧑🏿👭👭🏻👩🏻🤝👩🏼👩🏻🤝👩🏽👩🏻🤝👩🏾👩🏻🤝👩🏿👩🏼🤝👩🏻👭🏼👩🏼🤝👩🏽👩🏼🤝👩🏾👩🏼🤝👩🏿👩🏽🤝👩🏻👩🏽🤝👩🏼👭🏽👩🏽🤝👩🏾👩🏽🤝👩🏿👩🏾🤝👩🏻👩🏾🤝👩🏼👩🏾🤝👩🏽👭🏾👩🏾🤝👩🏿👩🏿🤝👩🏻👩🏿🤝👩🏼👩🏿🤝👩🏽👩🏿🤝👩🏾👭🏿👫👫🏻👩🏻🤝👨🏼👩🏻🤝👨🏽👩🏻🤝👨🏾👩🏻🤝👨🏿👩🏼🤝👨🏻👫🏼👩🏼🤝👨🏽👩🏼🤝👨🏾👩🏼🤝👨🏿👩🏽🤝👨🏻👩🏽🤝👨🏼👫🏽👩🏽🤝👨🏾👩🏽🤝👨🏿👩🏾🤝👨🏻👩🏾🤝👨🏼👩🏾🤝👨🏽👫🏾👩🏾🤝👨🏿👩🏿🤝👨🏻👩🏿🤝👨🏼👩🏿🤝👨🏽👩🏿🤝👨🏾👫🏿👬👬🏻👨🏻🤝👨🏼👨🏻🤝👨🏽👨🏻🤝👨🏾👨🏻🤝👨🏿👨🏼🤝👨🏻👬🏼👨🏼🤝👨🏽👨🏼🤝👨🏾👨🏼🤝👨🏿👨🏽🤝👨🏻👨🏽🤝👨🏼👬🏽👨🏽🤝👨🏾👨🏽🤝👨🏿👨🏾🤝👨🏻👨🏾🤝👨🏼👨🏾🤝👨🏽👬🏾👨🏾🤝👨🏿👨🏿🤝👨🏻👨🏿🤝👨🏼👨🏿🤝👨🏽👨🏿🤝👨🏾👬🏿💏💏🏻💏🏼💏🏽💏🏾💏🏿🧑🏻❤️💋🧑🏼🧑🏻💋🧑🏼🧑🏻❤️💋🧑🏽🧑🏻💋🧑🏽🧑🏻❤️💋🧑🏾🧑🏻💋🧑🏾🧑🏻❤️💋🧑🏿🧑🏻💋🧑🏿🧑🏼❤️💋🧑🏻🧑🏼💋🧑🏻🧑🏼❤️💋🧑🏽🧑🏼💋🧑🏽🧑🏼❤️💋🧑🏾🧑🏼💋🧑🏾🧑🏼❤️💋🧑🏿🧑🏼💋🧑🏿🧑🏽❤️💋🧑🏻🧑🏽💋🧑🏻🧑🏽❤️💋🧑🏼🧑🏽💋🧑🏼🧑🏽❤️💋🧑🏾🧑🏽💋🧑🏾🧑🏽❤️💋🧑🏿🧑🏽💋🧑🏿🧑🏾❤️💋🧑🏻🧑🏾💋🧑🏻🧑🏾❤️💋🧑🏼🧑🏾💋🧑🏼🧑🏾❤️💋🧑🏽🧑🏾💋🧑🏽🧑🏾❤️💋🧑🏿🧑🏾💋🧑🏿🧑🏿❤️💋🧑🏻🧑🏿💋🧑🏻🧑🏿❤️💋🧑🏼🧑🏿💋🧑🏼🧑🏿❤️💋🧑🏽🧑🏿💋🧑🏽🧑🏿❤️💋🧑🏾🧑🏿💋🧑🏾👩❤️💋👨👩💋👨👩🏻❤️💋👨🏻👩🏻💋👨🏻👩🏻❤️💋👨🏼👩🏻💋👨🏼👩🏻❤️💋👨🏽👩🏻💋👨🏽👩🏻❤️💋👨🏾👩🏻💋👨🏾👩🏻❤️💋👨🏿👩🏻💋👨🏿👩🏼❤️💋👨🏻👩🏼💋👨🏻👩🏼❤️💋👨🏼👩🏼💋👨🏼👩🏼❤️💋👨🏽👩🏼💋👨🏽👩🏼❤️💋👨🏾👩🏼💋👨🏾👩🏼❤️💋👨🏿👩🏼💋👨🏿👩🏽❤️💋👨🏻👩🏽💋👨🏻👩🏽❤️💋👨🏼👩🏽💋👨🏼👩🏽❤️💋👨🏽👩🏽💋👨🏽👩🏽❤️💋👨🏾👩🏽💋👨🏾👩🏽❤️💋👨🏿👩🏽💋👨🏿👩🏾❤️💋👨🏻👩🏾💋👨🏻👩🏾❤️💋👨🏼👩🏾💋👨🏼👩🏾❤️💋👨🏽👩🏾💋👨🏽👩🏾❤️💋👨🏾👩🏾💋👨🏾👩🏾❤️💋👨🏿👩🏾💋👨🏿👩🏿❤️💋👨🏻👩🏿💋👨🏻👩🏿❤️💋👨🏼👩🏿💋👨🏼👩🏿❤️💋👨🏽👩🏿💋👨🏽👩🏿❤️💋👨🏾👩🏿💋👨🏾👩🏿❤️💋👨🏿👩🏿💋👨🏿👨❤️💋👨👨💋👨👨🏻❤️💋👨🏻👨🏻💋👨🏻👨🏻❤️💋👨🏼👨🏻💋👨🏼👨🏻❤️💋👨🏽👨🏻💋👨🏽👨🏻❤️💋👨🏾👨🏻💋👨🏾👨🏻❤️💋👨🏿👨🏻💋👨🏿👨🏼❤️💋👨🏻👨🏼💋👨🏻👨🏼❤️💋👨🏼👨🏼💋👨🏼👨🏼❤️💋👨🏽👨🏼💋👨🏽👨🏼❤️💋👨🏾👨🏼💋👨🏾👨🏼❤️💋👨🏿👨🏼💋👨🏿👨🏽❤️💋👨🏻👨🏽💋👨🏻👨🏽❤️💋👨🏼👨🏽💋👨🏼👨🏽❤️💋👨🏽👨🏽💋👨🏽👨🏽❤️💋👨🏾👨🏽💋👨🏾👨🏽❤️💋👨🏿👨🏽💋👨🏿👨🏾❤️💋👨🏻👨🏾💋👨🏻👨🏾❤️💋👨🏼👨🏾💋👨🏼👨🏾❤️💋👨🏽👨🏾💋👨🏽👨🏾❤️💋👨🏾👨🏾💋👨🏾👨🏾❤️💋👨🏿👨🏾💋👨🏿👨🏿❤️💋👨🏻👨🏿💋👨🏻👨🏿❤️💋👨🏼👨🏿💋👨🏼👨🏿❤️💋👨🏽👨🏿💋👨🏽👨🏿❤️💋👨🏾👨🏿💋👨🏾👨🏿❤️💋👨🏿👨🏿💋👨🏿👩❤️💋👩👩💋👩👩🏻❤️💋👩🏻👩🏻💋👩🏻👩🏻❤️💋👩🏼👩🏻💋👩🏼👩🏻❤️💋👩🏽👩🏻💋👩🏽👩🏻❤️💋👩🏾👩🏻💋👩🏾👩🏻❤️💋👩🏿👩🏻💋👩🏿👩🏼❤️💋👩🏻👩🏼💋👩🏻👩🏼❤️💋👩🏼👩🏼💋👩🏼👩🏼❤️💋👩🏽👩🏼💋👩🏽👩🏼❤️💋👩🏾👩🏼💋👩🏾👩🏼❤️💋👩🏿👩🏼💋👩🏿👩🏽❤️💋👩🏻👩🏽💋👩🏻👩🏽❤️💋👩🏼👩🏽💋👩🏼👩🏽❤️💋👩🏽👩🏽💋👩🏽👩🏽❤️💋👩🏾👩🏽💋👩🏾👩🏽❤️💋👩🏿👩🏽💋👩🏿👩🏾❤️💋👩🏻👩🏾💋👩🏻👩🏾❤️💋👩🏼👩🏾💋👩🏼👩🏾❤️💋👩🏽👩🏾💋👩🏽👩🏾❤️💋👩🏾👩🏾💋👩🏾👩🏾❤️💋👩🏿👩🏾💋👩🏿👩🏿❤️💋👩🏻👩🏿💋👩🏻👩🏿❤️💋👩🏼👩🏿💋👩🏼👩🏿❤️💋👩🏽👩🏿💋👩🏽👩🏿❤️💋👩🏾👩🏿💋👩🏾👩🏿❤️💋👩🏿👩🏿💋👩🏿💑💑🏻💑🏼💑🏽💑🏾💑🏿🧑🏻❤️🧑🏼🧑🏻🧑🏼🧑🏻❤️🧑🏽🧑🏻🧑🏽🧑🏻❤️🧑🏾🧑🏻🧑🏾🧑🏻❤️🧑🏿🧑🏻🧑🏿🧑🏼❤️🧑🏻🧑🏼🧑🏻🧑🏼❤️🧑🏽🧑🏼🧑🏽🧑🏼❤️🧑🏾🧑🏼🧑🏾🧑🏼❤️🧑🏿🧑🏼🧑🏿🧑🏽❤️🧑🏻🧑🏽🧑🏻🧑🏽❤️🧑🏼🧑🏽🧑🏼🧑🏽❤️🧑🏾🧑🏽🧑🏾🧑🏽❤️🧑🏿🧑🏽🧑🏿🧑🏾❤️🧑🏻🧑🏾🧑🏻🧑🏾❤️🧑🏼🧑🏾🧑🏼🧑🏾❤️🧑🏽🧑🏾🧑🏽🧑🏾❤️🧑🏿🧑🏾🧑🏿🧑🏿❤️🧑🏻🧑🏿🧑🏻🧑🏿❤️🧑🏼🧑🏿🧑🏼🧑🏿❤️🧑🏽🧑🏿🧑🏽🧑🏿❤️🧑🏾🧑🏿🧑🏾👩❤️👨👩👨👩🏻❤️👨🏻👩🏻👨🏻👩🏻❤️👨🏼👩🏻👨🏼👩🏻❤️👨🏽👩🏻👨🏽👩🏻❤️👨🏾👩🏻👨🏾👩🏻❤️👨🏿👩🏻👨🏿👩🏼❤️👨🏻👩🏼👨🏻👩🏼❤️👨🏼👩🏼👨🏼👩🏼❤️👨🏽👩🏼👨🏽👩🏼❤️👨🏾👩🏼👨🏾👩🏼❤️👨🏿👩🏼👨🏿👩🏽❤️👨🏻👩🏽👨🏻👩🏽❤️👨🏼👩🏽👨🏼👩🏽❤️👨🏽👩🏽👨🏽👩🏽❤️👨🏾👩🏽👨🏾👩🏽❤️👨🏿👩🏽👨🏿👩🏾❤️👨🏻👩🏾👨🏻👩🏾❤️👨🏼👩🏾👨🏼👩🏾❤️👨🏽👩🏾👨🏽👩🏾❤️👨🏾👩🏾👨🏾👩🏾❤️👨🏿👩🏾👨🏿👩🏿❤️👨🏻👩🏿👨🏻👩🏿❤️👨🏼👩🏿👨🏼👩🏿❤️👨🏽👩🏿👨🏽👩🏿❤️👨🏾👩🏿👨🏾👩🏿❤️👨🏿👩🏿👨🏿👨❤️👨👨👨👨🏻❤️👨🏻👨🏻👨🏻👨🏻❤️👨🏼👨🏻👨🏼👨🏻❤️👨🏽👨🏻👨🏽👨🏻❤️👨🏾👨🏻👨🏾👨🏻❤️👨🏿👨🏻👨🏿👨🏼❤️👨🏻👨🏼👨🏻👨🏼❤️👨🏼👨🏼👨🏼👨🏼❤️👨🏽👨🏼👨🏽👨🏼❤️👨🏾👨🏼👨🏾👨🏼❤️👨🏿👨🏼👨🏿👨🏽❤️👨🏻👨🏽👨🏻👨🏽❤️👨🏼👨🏽👨🏼👨🏽❤️👨🏽👨🏽👨🏽👨🏽❤️👨🏾👨🏽👨🏾👨🏽❤️👨🏿👨🏽👨🏿👨🏾❤️👨🏻👨🏾👨🏻👨🏾❤️👨🏼👨🏾👨🏼👨🏾❤️👨🏽👨🏾👨🏽👨🏾❤️👨🏾👨🏾👨🏾👨🏾❤️👨🏿👨🏾👨🏿👨🏿❤️👨🏻👨🏿👨🏻👨🏿❤️👨🏼👨🏿👨🏼👨🏿❤️👨🏽👨🏿👨🏽👨🏿❤️👨🏾👨🏿👨🏾👨🏿❤️👨🏿👨🏿👨🏿👩❤️👩👩👩👩🏻❤️👩🏻👩🏻👩🏻👩🏻❤️👩🏼👩🏻👩🏼👩🏻❤️👩🏽👩🏻👩🏽👩🏻❤️👩🏾👩🏻👩🏾👩🏻❤️👩🏿👩🏻👩🏿👩🏼❤️👩🏻👩🏼👩🏻👩🏼❤️👩🏼👩🏼👩🏼👩🏼❤️👩🏽👩🏼👩🏽👩🏼❤️👩🏾👩🏼👩🏾👩🏼❤️👩🏿👩🏼👩🏿👩🏽❤️👩🏻👩🏽👩🏻👩🏽❤️👩🏼👩🏽👩🏼👩🏽❤️👩🏽👩🏽👩🏽👩🏽❤️👩🏾👩🏽👩🏾👩🏽❤️👩🏿👩🏽👩🏿👩🏾❤️👩🏻👩🏾👩🏻👩🏾❤️👩🏼👩🏾👩🏼👩🏾❤️👩🏽👩🏾👩🏽👩🏾❤️👩🏾👩🏾👩🏾👩🏾❤️👩🏿👩🏾👩🏿👩🏿❤️👩🏻👩🏿👩🏻👩🏿❤️👩🏼👩🏿👩🏼👩🏿❤️👩🏽👩🏿👩🏽👩🏿❤️👩🏾👩🏿👩🏾👩🏿❤️👩🏿👩🏿👩🏿👪👨👩👦👨👩👧👨👩👧👦👨👩👦👦👨👩👧👧👨👨👦👨👨👧👨👨👧👦👨👨👦👦👨👨👧👧👩👩👦👩👩👧👩👩👧👦👩👩👦👦👩👩👧👧👨👦👨👦👦👨👧👨👧👦👨👧👧👩👦👩👦👦👩👧👩👧👦👩👧👧🗣️👤👥👣🏻🏼🏽🏾🏿🐵🐒🦍🐶🐕🐕🐩🐺🦊🐱🐈🐈⬛🦁🐯🐅🐆🐴🐎🦄🦓🦌🐮🐂🐃🐄🐷🐖🐗🐽🐏🐑🐐🐪🐫🦒🐘🦏🐭🐁🐀🐹🐰🐇🐿️🦔🦇🐻🐻❄️🐻🐨🐼🐾🦃🐔🐓🐣🐤🐥🐦🐧🕊️🦅🦆🦉🐸🐊🐢🦎🐍🐲🐉🦕🦖🐳🐋🐬🐟🐠🐡🦈🐙🐚🐌🦋🐛🐜🐝🐞🦗🕷️🕸️🦂💐🌸💮🏵️🌹🥀🌺🌻🌼🌷🌱🌲🌳🌴🌵🌾🌿☘️🍀🍁🍂🍃🍇🍈🍉🍊🍋🍌🍍🍎🍏🍐🍑🍒🍓🥝🍅🥥🥑🍆🥔🥕🌽🌶️🥒🥦🍄🥜🌰🍞🥐🥖🥨🥞🧀🍖🍗🥩🥓🍔🍟🍕🌭🥪🌮🌯🥙🥚🍳🥘🍲🥣🥗🍿🥫🍱🍘🍙🍚🍛🍜🍝🍠🍢🍣🍤🍥🍡🥟🥠🥡🦀🦐🦑🍦🍧🍨🍩🍪🎂🍰🥧🍫🍬🍭🍮🍯🍼🥛☕🍵🍶🍾🍷🍸🍹🍺🍻🥂🥃🥤🥢🍽️🍴🥄🔪🏺🌍🌎🌏🌐🗺️🗾🏔️⛰️🌋🗻🏕️🏖️🏜️🏝️🏞️🏟️🏛️🏗️🏘️🏚️🏠🏡🏢🏣🏤🏥🏦🏨🏩🏪🏫🏬🏭🏯🏰💒🗼🗽⛪🕌🕍⛩️🕋⛲⛺🌁🌃🏙️🌄🌅🌆🌇🌉♨️🎠🎡🎢💈🎪🚂🚃🚄🚅🚆🚇🚈🚉🚊🚝🚞🚋🚌🚍🚎🚐🚑🚒🚓🚔🚕🚖🚗🚘🚙🚚🚛🚜🏎️🏍️🛵🚲🛴🚏🛣️🛤️🛢️⛽🚨🚥🚦🛑🚧⚓⛵🛶🚤🛳️⛴️🛥️🚢✈️🛩️🛫🛬💺🚁🚟🚠🚡🛰️🚀🛸🛎️⌛⏳⌚⏰⏱️⏲️🕰️🕛🕧🕐🕜🕑🕝🕒🕞🕓🕟🕔🕠🕕🕡🕖🕢🕗🕣🕘🕤🕙🕥🕚🕦🌑🌒🌓🌔🌕🌖🌗🌘🌙🌚🌛🌜🌡️☀️🌝🌞⭐🌟🌠🌌☁️⛅⛈️🌤️🌥️🌦️🌧️🌨️🌩️🌪️🌫️🌬️🌀🌈🌂☂️☔⛱️⚡❄️☃️⛄☄️🔥💧🌊🎃🎄🎆🎇✨🎈🎉🎊🎋🎍🎎🎏🎐🎑🎀🎁🎗️🎟️🎫🎖️🏆🏅🥇🥈🥉⚽⚾🏀🏐🏈🏉🎾🎳🏏🏑🏒🏓🏸🥊🥋🥅⛳⛸️🎣🎽🎿🛷🥌🎯🎱🔮🎮🕹️🎰🎲♠️♥️♦️♣️🃏🀄🎴🎭🖼️🎨👓🕶️👔👕👖🧣🧤🧥🧦👗👘👙👚👛👜👝🛍️🎒👞👟👠👡👢👑👒🎩🎓🧢⛑️📿💄💍💎🔇🔈🔉🔊📢📣📯🔔🔕🎼🎵🎶🎙️🎚️🎛️🎤🎧📻🎷🎸🎹🎺🎻🥁📱📲☎️📞📟📠🔋🔌💻🖥️🖨️⌨️🖱️🖲️💽💾💿📀🎥🎞️📽️🎬📺📷📸📹📼🔍🔎🕯️💡🔦🏮📔📕📖📗📘📙📚📓📒📃📜📄📰🗞️📑🔖🏷️💰💴💵💶💷💸💳💹✉️📧📨📩📤📥📦📫📪📬📭📮🗳️✏️✒️🖋️🖊️🖌️🖍️📝💼📁📂🗂️📅📆🗒️🗓️📇📈📉📊📋📌📍📎🖇️📏📐✂️🗃️🗄️🗑️🔒🔓🔏🔐🔑🗝️🔨⛏️⚒️🛠️🗡️⚔️🔫🏹🛡️🔧🔩⚙️🗜️⚖️🔗⛓️⚗️🔬🔭📡💉💊🚪🛏️🛋️🚽🚿🛁🛒🚬⚰️⚱️🗿🏧🚮🚰♿🚹🚺🚻🚼🚾🛂🛃🛄🛅⚠️🚸⛔🚫🚳🚭🚯🚱🚷📵🔞☢️☣️⬆️↗️➡️↘️⬇️↙️⬅️↖️↕️↔️↩️↪️⤴️⤵️🔃🔄🔙🔚🔛🔜🔝🛐⚛️🕉️✡️☸️☯️✝️☦️☪️☮️🕎🔯♈♉♊♋♌♍♎♏♐♑♒♓⛎🔀🔁🔂▶️⏩⏭️⏯️◀️⏪⏮️🔼⏫🔽⏬⏸️⏹️⏺️⏏️🎦🔅🔆📶📳📴♀️♂️✖️➕➖➗‼️⁉️❓❔❕❗〰️💱💲⚕️♻️⚜️🔱📛🔰⭕✅☑️✔️❌❎➰➿〽️✳️✴️❇️©️®️™️#️⃣*️⃣0️⃣1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣8️⃣9️⃣🔟🔠🔡🔢🔣🔤🅰️🆎🅱️🆑🆒🆓ℹ️🆔Ⓜ️🆕🆖🅾️🆗🅿️🆘🆙🆚🈁🈂️🈷️🈶🈯🉐🈹🈚🈲🉑🈸🈴🈳㊗️㊙️🈺🈵🔴🔵⚫⚪⬛⬜◼️◻️◾◽▪️▫️🔶🔷🔸🔹🔺🔻💠🔘🔳🔲🏁🚩🎌🏴🏳️🏳️🌈🌈🏳️🏳️🏴☠️🏴🇦🇨🇦🇩🇦🇪🇦🇫🇦🇬🇦🇮🇦🇱🇦🇲🇦🇴🇦🇶🇦🇷🇦🇸🇦🇹🇦🇺🇦🇼🇦🇽🇦🇿🇧🇦🇧🇧🇧🇩🇧🇪🇧🇫🇧🇬🇧🇭🇧🇮🇧🇯🇧🇱🇧🇲🇧🇳🇧🇴🇧🇶🇧🇷🇧🇸🇧🇹🇧🇻🇧🇼🇧🇾🇧🇿🇨🇦🇨🇨🇨🇩🇨🇫🇨🇬🇨🇭🇨🇮🇨🇰🇨🇱🇨🇲🇨🇳🇨🇴🇨🇵🇨🇷🇨🇺🇨🇻🇨🇼🇨🇽🇨🇾🇨🇿🇩🇪🇩🇬🇩🇯🇩🇰🇩🇲🇩🇴🇩🇿🇪🇦🇪🇨🇪🇪🇪🇬🇪🇭🇪🇷🇪🇸🇪🇹🇪🇺🇫🇮🇫🇯🇫🇰🇫🇲🇫🇴🇫🇷🇬🇦🇬🇧🇬🇩🇬🇪🇬🇫🇬🇬🇬🇭🇬🇮🇬🇱🇬🇲🇬🇳🇬🇵🇬🇶🇬🇷🇬🇸🇬🇹🇬🇺🇬🇼🇬🇾🇭🇰🇭🇲🇭🇳🇭🇷🇭🇹🇭🇺🇮🇨🇮🇩🇮🇪🇮🇱🇮🇲🇮🇳🇮🇴🇮🇶🇮🇷🇮🇸🇮🇹🇯🇪🇯🇲🇯🇴🇯🇵🇰🇪🇰🇬🇰🇭🇰🇮🇰🇲🇰🇳🇰🇵🇰🇷🇰🇼🇰🇾🇰🇿🇱🇦🇱🇧🇱🇨🇱🇮🇱🇰🇱🇷🇱🇸🇱🇹🇱🇺🇱🇻🇱🇾🇲🇦🇲🇨🇲🇩🇲🇪🇲🇫🇲🇬🇲🇭🇲🇰🇲🇱🇲🇲🇲🇳🇲🇴🇲🇵🇲🇶🇲🇷🇲🇸🇲🇹🇲🇺🇲🇻🇲🇼🇲🇽🇲🇾🇲🇿🇳🇦🇳🇨🇳🇪🇳🇫🇳🇬🇳🇮🇳🇱🇳🇴🇳🇵🇳🇷🇳🇺🇳🇿🇴🇲🇵🇦🇵🇪🇵🇫🇵🇬🇵🇭🇵🇰🇵🇱🇵🇲🇵🇳🇵🇷🇵🇸🇵🇹🇵🇼🇵🇾🇶🇦🇷🇪🇷🇴🇷🇸🇷🇺🇷🇼🇸🇦🇸🇧🇸🇨🇸🇩🇸🇪🇸🇬🇸🇭🇸🇮🇸🇯🇸🇰🇸🇱🇸🇲🇸🇳🇸🇴🇸🇷🇸🇸🇸🇹🇸🇻🇸🇽🇸🇾🇸🇿🇹🇦🇹🇨🇹🇩🇹🇫🇹🇬🇹🇭🇹🇯🇹🇰🇹🇱🇹🇲🇹🇳🇹🇴🇹🇷🇹🇹🇹🇻🇹🇼🇹🇿🇺🇦🇺🇬🇺🇲🇺🇳🇺🇸🇺🇾🇺🇿🇻🇦🇻🇨🇻🇪🇻🇬🇻🇮🇻🇳🇻🇺🇼🇫🇼🇸🇽🇰🇾🇪🇾🇹🇿🇦🇿🇲🇿🇼🏴🏴🏴
\ No newline at end of file
diff --git a/user/plugins/telepathics-yourls-emojis/util/get_emojis.php b/user/plugins/telepathics-yourls-emojis/util/get_emojis.php
deleted file mode 100644
index 49afb5d..0000000
--- a/user/plugins/telepathics-yourls-emojis/util/get_emojis.php
+++ /dev/null
@@ -1,24 +0,0 @@
- 0 ) {
- foreach ( $detect_emoji as $emoji ) {
- fwrite($file, $emoji['emoji']);
- }
- }
-}
-get_emojis();
diff --git a/user/plugins/timezones/README.md b/user/plugins/timezones/README.md
new file mode 100644
index 0000000..9b313cb
--- /dev/null
+++ b/user/plugins/timezones/README.md
@@ -0,0 +1,22 @@
+# Timezones [![Listed in Awesome YOURLS!](https://img.shields.io/badge/Awesome-YOURLS-C5A3BE)](https://github.com/YOURLS/awesome-yourls/)
+
+A plugin to tell YOURLS your time zone and how you'd like times and dates displayed
+
+Require [YOURLS](https://yourls.org) `1.7.10` and above.
+
+## Usage
+
+
+
+
+
+## Installation
+
+1. In `/user/plugins`, create a new folder named `timezones`.
+2. Drop these files in that directory.
+3. Go to the Plugins administration page (eg. `http://sho.rt/admin/plugins.php`) and activate the plugin.
+4. Have fun!
+
+## License
+
+Do whatever the hell you want with it
diff --git a/user/plugins/timezones/admin.php b/user/plugins/timezones/admin.php
new file mode 100644
index 0000000..454a9e9
--- /dev/null
+++ b/user/plugins/timezones/admin.php
@@ -0,0 +1,273 @@
+Time Zone Configuration
+ This plugin allows to specify a time zone and to format time/date display
';
+
+ if( defined('YOURLS_HOURS_OFFSET') ) {
+ print 'Note: you have YOURLS_HOURS_OFFSET
defined in your config.php. This plugin will override this setting.
';
+ }
+
+ print '
+ Note: custom formats need a PHP date()
string.';
+
+}
+
+/**
+ * Output CSS & JS
+ */
+function yourls_tzp_js_css() {
+ $plugin_url = yourls_plugin_url( __DIR__ );
+ print <<
+
+
+
+
+JSCSS;
+
+}
+
+/**
+ * Draw the time zone drop down
+ *
+ * @param string $user_time_zone Timezone to be marked as "selected" in the dropdown
+ */
+function yourls_tzp_tz_dropdown( $user_time_zone ) {
+ // Continent list
+ $continent = array(
+ 'Africa' => DateTimeZone::AFRICA,
+ 'America' => DateTimeZone::AMERICA,
+ 'Antarctica' => DateTimeZone::ANTARCTICA,
+ 'Asia' => DateTimeZone::ASIA,
+ 'Atlantic' => DateTimeZone::ATLANTIC,
+ 'Australia' => DateTimeZone::AUSTRALIA,
+ 'Europe' => DateTimeZone::EUROPE,
+ 'Indian' => DateTimeZone::INDIAN,
+ 'Pacific' => DateTimeZone::PACIFIC,
+ );
+
+ // Timezones per continents
+ $timezones = array();
+ foreach ($continent as $name => $mask) {
+ $zones = DateTimeZone::listIdentifiers($mask);
+ foreach($zones as $timezone) {
+ // Remove region name
+ $timezones[$name][$timezone] = substr($timezone, strlen($name) +1);
+ }
+ }
+
+ // Manual UTC offset
+ $offset_range = array(
+ '-12', '-11:30', '-11', '-10:30', '-10', '-9.5', '-9',
+ '-8:30', '-8', '-7:30', '-7', '-6:30', '-6', '-5:30',
+ '-5', '-4:30', '-4', '-3:30', '-3', '-2:30', '-2',
+ '-1:30', '-1', '-0:30', 'UTC', '+0:30', '+1', '+1:30',
+ '+2', '+2:30', '+3', '+3:30', '+4', '+4:30', '+5',
+ '+5:30', '+5:45', '+6', '+6:30', '+7', '+7:30', '+8',
+ '+8:30', '+8:45', '+9', '+9:30', '+10', '+10:30', '+11',
+ '+11:30', '+12', '+12:45', '+13', '+13:45', '+14'
+ );
+
+ foreach( $offset_range as $offset_name ) {
+ $offset_value = $offset_name;
+ $offset_name = str_replace( array( '.25', '.5', '.75' ), array( ':15', ':30', ':45' ), $offset_name );
+ if ($offset_name != 'UTC') {
+ $offset_name = 'UTC' . $offset_name;
+ }
+ // $offset_value = 'UTC' . $offset_value;
+ $timezones['UTC'][$offset_value] = $offset_name;
+ }
+
+ print '';
+}
+
+
+/**
+ * Output radio button list
+ *
+ * @param string $title Dropdown title
+ * @param string $input_name Dropdown 'radio' name
+ * @param array $formats List of available choices, to which 'custom' will be appended
+ * @param string $tz Time zone
+ * @param string $selected Checked radio value
+ * @param string $custom Custom format value
+ */
+function yourls_tzp_format_radio( $title, $input_name, $formats, $tz, $selected, $custom ) {
+ print "
$title:
+ ';
+
+}
+
+/**
+ * Update time zone in database
+ */
+function yourls_tzp_config_update_settings() {
+
+ $settings = array(
+ 'time_zone' => yourls_tzp_get_value($_POST, 'time_zone', 'UTC'),
+ 'date_format' => yourls_tzp_get_value($_POST, 'date_format', 'Y/m/d'),
+ 'date_format_custom' => yourls_tzp_get_value($_POST, 'date_format_custom_value', 'Y/m/d'),
+ 'time_format' => yourls_tzp_get_value($_POST, 'time_format', 'H:i'),
+ 'time_format_custom' => yourls_tzp_get_value($_POST, 'time_format_custom_value', 'H:i'),
+ );
+
+ yourls_update_option( 'timezone', $settings );
+
+ return $settings;
+}
diff --git a/user/plugins/timezones/assets/php-date-formatter.min.js b/user/plugins/timezones/assets/php-date-formatter.min.js
new file mode 100644
index 0000000..b0fcdc9
--- /dev/null
+++ b/user/plugins/timezones/assets/php-date-formatter.min.js
@@ -0,0 +1,13 @@
+/*!
+ * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2014 - 2020
+ * @version 1.3.6
+ *
+ * Date formatter utility library that allows formatting date/time variables or Date objects using PHP DateTime format.
+ * This library is a standalone javascript library and does not depend on other libraries or plugins like jQuery. The
+ * library also adds support for Universal Module Definition (UMD).
+ *
+ * @see http://php.net/manual/en/function.date.php
+ *
+ * For more JQuery plugins visit http://plugins.krajee.com
+ * For more Yii related demos visit http://demos.krajee.com
+ */!function(t,e){"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():t.DateFormatter=e()}("undefined"!=typeof self?self:this,function(){var t,e;return e={DAY:864e5,HOUR:3600,defaults:{dateSettings:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],meridiem:["AM","PM"],ordinal:function(t){var e=t%10,n={1:"st",2:"nd",3:"rd"};return 1!==Math.floor(t%100/10)&&n[e]?n[e]:"th"}},separators:/[ \-+\/.:@]/g,validParts:/[dDjlNSwzWFmMntLoYyaABgGhHisueTIOPZcrU]/g,intParts:/[djwNzmnyYhHgGis]/g,tzParts:/\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,tzClip:/[^-+\dA-Z]/g},getInt:function(t,e){return parseInt(t,e?e:10)},compare:function(t,e){return"string"==typeof t&&"string"==typeof e&&t.toLowerCase()===e.toLowerCase()},lpad:function(t,n,r){var a=t.toString();return r=r||"0",a.length=0;u--)"S"===r[u]&&r.splice(u,1);for(a=t.replace(g.separators,"\x00").split("\x00"),u=0;uo?"20":"19")+i):o,h=!0;break;case"m":case"n":case"M":case"F":if(isNaN(o)){if(s=g.getMonth(i),!(s>0))return null;y.month=s}else{if(!(o>=1&&12>=o))return null;y.month=o}h=!0;break;case"d":case"j":if(!(o>=1&&31>=o))return null;y.day=o,h=!0;break;case"g":case"h":if(c=r.indexOf("a")>-1?r.indexOf("a"):r.indexOf("A")>-1?r.indexOf("A"):-1,d=a[c],-1!==c)f=e.compare(d,p.meridiem[0])?0:e.compare(d,p.meridiem[1])?12:-1,o>=1&&12>=o&&-1!==f?y.hour=o%12===0?f:o+f:o>=0&&23>=o&&(y.hour=o);else{if(!(o>=0&&23>=o))return null;y.hour=o}m=!0;break;case"G":case"H":if(!(o>=0&&23>=o))return null;y.hour=o,m=!0;break;case"i":if(!(o>=0&&59>=o))return null;y.min=o,m=!0;break;case"s":if(!(o>=0&&59>=o))return null;y.sec=o,m=!0}if(h===!0){var D=y.year||0,v=y.month?y.month-1:0,S=y.day||1;y.date=new Date(D,v,S,y.hour,y.min,y.sec,0)}else{if(m!==!0)return null;y.date=new Date(0,0,0,y.hour,y.min,y.sec,0)}return y.date},guessDate:function(t,n){if("string"!=typeof t)return t;var r,a,u,i,o,s,c=this,f=t.replace(c.separators,"\x00").split("\x00"),l=/^[djmn]/g,d=n.match(c.validParts),g=new Date,h=0;if(!l.test(d[0]))return t;for(u=0;ur?r:4,a=e.getInt(4>r?a.toString().substr(0,4-r)+o:o.substr(0,4)),!a)return null;g.setFullYear(a);break;case 3:g.setHours(s);break;case 4:g.setMinutes(s);break;case 5:g.setSeconds(s)}i=o.substr(h),i.length>0&&f.splice(u+1,0,i)}return g},parseFormat:function(t,n){var r,a=this,u=a.dateSettings,i=/\\?(.?)/gi,o=function(t,e){return r[t]?r[t]():e};return r={d:function(){return e.lpad(r.j(),2)},D:function(){return u.daysShort[r.w()]},j:function(){return n.getDate()},l:function(){return u.days[r.w()]},N:function(){return r.w()||7},w:function(){return n.getDay()},z:function(){var t=new Date(r.Y(),r.n()-1,r.j()),n=new Date(r.Y(),0,1);return Math.round((t-n)/e.DAY)},W:function(){var t=new Date(r.Y(),r.n()-1,r.j()-r.N()+3),n=new Date(t.getFullYear(),0,4);return e.lpad(1+Math.round((t-n)/e.DAY/7),2)},F:function(){return u.months[n.getMonth()]},m:function(){return e.lpad(r.n(),2)},M:function(){return u.monthsShort[n.getMonth()]},n:function(){return n.getMonth()+1},t:function(){return new Date(r.Y(),r.n(),0).getDate()},L:function(){var t=r.Y();return t%4===0&&t%100!==0||t%400===0?1:0},o:function(){var t=r.n(),e=r.W(),n=r.Y();return n+(12===t&&9>e?1:1===t&&e>9?-1:0)},Y:function(){return n.getFullYear()},y:function(){return r.Y().toString().slice(-2)},a:function(){return r.A().toLowerCase()},A:function(){var t=r.G()<12?0:1;return u.meridiem[t]},B:function(){var t=n.getUTCHours()*e.HOUR,r=60*n.getUTCMinutes(),a=n.getUTCSeconds();return e.lpad(Math.floor((t+r+a+e.HOUR)/86.4)%1e3,3)},g:function(){return r.G()%12||12},G:function(){return n.getHours()},h:function(){return e.lpad(r.g(),2)},H:function(){return e.lpad(r.G(),2)},i:function(){return e.lpad(n.getMinutes(),2)},s:function(){return e.lpad(n.getSeconds(),2)},u:function(){return e.lpad(1e3*n.getMilliseconds(),6)},e:function(){var t=/\((.*)\)/.exec(String(n))[1];return t||"Coordinated Universal Time"},I:function(){var t=new Date(r.Y(),0),e=Date.UTC(r.Y(),0),n=new Date(r.Y(),6),a=Date.UTC(r.Y(),6);return t-e!==n-a?1:0},O:function(){var t=n.getTimezoneOffset(),r=Math.abs(t);return(t>0?"-":"+")+e.lpad(100*Math.floor(r/60)+r%60,4)},P:function(){var t=r.O();return t.substr(0,3)+":"+t.substr(3,2)},T:function(){var t=(String(n).match(a.tzParts)||[""]).pop().replace(a.tzClip,"");return t||"UTC"},Z:function(){return 60*-n.getTimezoneOffset()},c:function(){return"Y-m-d\\TH:i:sP".replace(i,o)},r:function(){return"D, d M Y H:i:s O".replace(i,o)},U:function(){return n.getTime()/1e3||0}},o(t,t)},formatDate:function(t,n){var r,a,u,i,o,s=this,c="",f="\\";if("string"==typeof t&&(t=s.parseDate(t,n),!t))return null;if(t instanceof Date){for(u=n.length,r=0;u>r;r++)o=n.charAt(r),"S"!==o&&o!==f&&(r>0&&n.charAt(r-1)===f?c+=o:(i=s.parseFormat(o,t),r!==u-1&&s.intParts.test(o)&&"S"===n.charAt(r+1)&&(a=e.getInt(i)||0,i+=s.dateSettings.ordinal(a)),c+=i));return c}return""}},t});
\ No newline at end of file
diff --git a/user/plugins/timezones/assets/select2.min.css b/user/plugins/timezones/assets/select2.min.css
new file mode 100644
index 0000000..7c18ad5
--- /dev/null
+++ b/user/plugins/timezones/assets/select2.min.css
@@ -0,0 +1 @@
+.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px;padding:1px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}
diff --git a/user/plugins/timezones/assets/select2.min.js b/user/plugins/timezones/assets/select2.min.js
new file mode 100644
index 0000000..091d4b5
--- /dev/null
+++ b/user/plugins/timezones/assets/select2.min.js
@@ -0,0 +1,2 @@
+/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
+!function(n){"function"==typeof define&&define.amd?define(["jquery"],n):"object"==typeof module&&module.exports?module.exports=function(e,t){return void 0===t&&(t="undefined"!=typeof window?require("jquery"):require("jquery")(e)),n(t),t}:n(jQuery)}(function(u){var e=function(){if(u&&u.fn&&u.fn.select2&&u.fn.select2.amd)var e=u.fn.select2.amd;var t,n,r,h,o,s,f,g,m,v,y,_,i,a,b;function w(e,t){return i.call(e,t)}function l(e,t){var n,r,i,o,s,a,l,c,u,d,p,h=t&&t.split("/"),f=y.map,g=f&&f["*"]||{};if(e){for(s=(e=e.split("/")).length-1,y.nodeIdCompat&&b.test(e[s])&&(e[s]=e[s].replace(b,"")),"."===e[0].charAt(0)&&h&&(e=h.slice(0,h.length-1).concat(e)),u=0;u":">",'"':""","'":"'","/":"/"};return"string"!=typeof e?e:String(e).replace(/[&<>"'\/\\]/g,function(e){return t[e]})},i.appendMany=function(e,t){if("1.7"===o.fn.jquery.substr(0,3)){var n=o();o.map(t,function(e){n=n.add(e)}),t=n}e.append(t)},i.__cache={};var n=0;return i.GetUniqueElementId=function(e){var t=e.getAttribute("data-select2-id");return null==t&&(e.id?(t=e.id,e.setAttribute("data-select2-id",t)):(e.setAttribute("data-select2-id",++n),t=n.toString())),t},i.StoreData=function(e,t,n){var r=i.GetUniqueElementId(e);i.__cache[r]||(i.__cache[r]={}),i.__cache[r][t]=n},i.GetData=function(e,t){var n=i.GetUniqueElementId(e);return t?i.__cache[n]&&null!=i.__cache[n][t]?i.__cache[n][t]:o(e).data(t):i.__cache[n]},i.RemoveData=function(e){var t=i.GetUniqueElementId(e);null!=i.__cache[t]&&delete i.__cache[t],e.removeAttribute("data-select2-id")},i}),e.define("select2/results",["jquery","./utils"],function(h,f){function r(e,t,n){this.$element=e,this.data=n,this.options=t,r.__super__.constructor.call(this)}return f.Extend(r,f.Observable),r.prototype.render=function(){var e=h('');return this.options.get("multiple")&&e.attr("aria-multiselectable","true"),this.$results=e},r.prototype.clear=function(){this.$results.empty()},r.prototype.displayMessage=function(e){var t=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var n=h(''),r=this.options.get("translations").get(e.message);n.append(t(r(e.args))),n[0].className+=" select2-results__message",this.$results.append(n)},r.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},r.prototype.append=function(e){this.hideLoading();var t=[];if(null!=e.results&&0!==e.results.length){e.results=this.sort(e.results);for(var n=0;n",{class:"select2-results__options select2-results__options--nested"});p.append(l),s.append(a),s.append(p)}else this.template(e,t);return f.StoreData(t,"data",e),t},r.prototype.bind=function(t,e){var l=this,n=t.id+"-results";this.$results.attr("id",n),t.on("results:all",function(e){l.clear(),l.append(e.data),t.isOpen()&&(l.setClasses(),l.highlightFirstItem())}),t.on("results:append",function(e){l.append(e.data),t.isOpen()&&l.setClasses()}),t.on("query",function(e){l.hideMessages(),l.showLoading(e)}),t.on("select",function(){t.isOpen()&&(l.setClasses(),l.options.get("scrollAfterSelect")&&l.highlightFirstItem())}),t.on("unselect",function(){t.isOpen()&&(l.setClasses(),l.options.get("scrollAfterSelect")&&l.highlightFirstItem())}),t.on("open",function(){l.$results.attr("aria-expanded","true"),l.$results.attr("aria-hidden","false"),l.setClasses(),l.ensureHighlightVisible()}),t.on("close",function(){l.$results.attr("aria-expanded","false"),l.$results.attr("aria-hidden","true"),l.$results.removeAttr("aria-activedescendant")}),t.on("results:toggle",function(){var e=l.getHighlightedResults();0!==e.length&&e.trigger("mouseup")}),t.on("results:select",function(){var e=l.getHighlightedResults();if(0!==e.length){var t=f.GetData(e[0],"data");"true"==e.attr("aria-selected")?l.trigger("close",{}):l.trigger("select",{data:t})}}),t.on("results:previous",function(){var e=l.getHighlightedResults(),t=l.$results.find("[aria-selected]"),n=t.index(e);if(!(n<=0)){var r=n-1;0===e.length&&(r=0);var i=t.eq(r);i.trigger("mouseenter");var o=l.$results.offset().top,s=i.offset().top,a=l.$results.scrollTop()+(s-o);0===r?l.$results.scrollTop(0):s-o<0&&l.$results.scrollTop(a)}}),t.on("results:next",function(){var e=l.getHighlightedResults(),t=l.$results.find("[aria-selected]"),n=t.index(e)+1;if(!(n>=t.length)){var r=t.eq(n);r.trigger("mouseenter");var i=l.$results.offset().top+l.$results.outerHeight(!1),o=r.offset().top+r.outerHeight(!1),s=l.$results.scrollTop()+o-i;0===n?l.$results.scrollTop(0):ithis.$results.outerHeight()||o<0)&&this.$results.scrollTop(i)}},r.prototype.template=function(e,t){var n=this.options.get("templateResult"),r=this.options.get("escapeMarkup"),i=n(e,t);null==i?t.style.display="none":"string"==typeof i?t.innerHTML=r(i):h(t).append(i)},r}),e.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),e.define("select2/selection/base",["jquery","../utils","../keys"],function(n,r,i){function o(e,t){this.$element=e,this.options=t,o.__super__.constructor.call(this)}return r.Extend(o,r.Observable),o.prototype.render=function(){var e=n('');return this._tabindex=0,null!=r.GetData(this.$element[0],"old-tabindex")?this._tabindex=r.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),e.attr("title",this.$element.attr("title")),e.attr("tabindex",this._tabindex),e.attr("aria-disabled","false"),this.$selection=e},o.prototype.bind=function(e,t){var n=this,r=e.id+"-results";this.container=e,this.$selection.on("focus",function(e){n.trigger("focus",e)}),this.$selection.on("blur",function(e){n._handleBlur(e)}),this.$selection.on("keydown",function(e){n.trigger("keypress",e),e.which===i.SPACE&&e.preventDefault()}),e.on("results:focus",function(e){n.$selection.attr("aria-activedescendant",e.data._resultId)}),e.on("selection:update",function(e){n.update(e.data)}),e.on("open",function(){n.$selection.attr("aria-expanded","true"),n.$selection.attr("aria-owns",r),n._attachCloseHandler(e)}),e.on("close",function(){n.$selection.attr("aria-expanded","false"),n.$selection.removeAttr("aria-activedescendant"),n.$selection.removeAttr("aria-owns"),n.$selection.trigger("focus"),n._detachCloseHandler(e)}),e.on("enable",function(){n.$selection.attr("tabindex",n._tabindex),n.$selection.attr("aria-disabled","false")}),e.on("disable",function(){n.$selection.attr("tabindex","-1"),n.$selection.attr("aria-disabled","true")})},o.prototype._handleBlur=function(e){var t=this;window.setTimeout(function(){document.activeElement==t.$selection[0]||n.contains(t.$selection[0],document.activeElement)||t.trigger("blur",e)},1)},o.prototype._attachCloseHandler=function(e){n(document.body).on("mousedown.select2."+e.id,function(e){var t=n(e.target).closest(".select2");n(".select2.select2-container--open").each(function(){this!=t[0]&&r.GetData(this,"element").select2("close")})})},o.prototype._detachCloseHandler=function(e){n(document.body).off("mousedown.select2."+e.id)},o.prototype.position=function(e,t){t.find(".selection").append(e)},o.prototype.destroy=function(){this._detachCloseHandler(this.container)},o.prototype.update=function(e){throw new Error("The `update` method must be defined in child classes.")},o.prototype.isEnabled=function(){return!this.isDisabled()},o.prototype.isDisabled=function(){return this.options.get("disabled")},o}),e.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(e,t,n,r){function i(){i.__super__.constructor.apply(this,arguments)}return n.Extend(i,t),i.prototype.render=function(){var e=i.__super__.render.call(this);return e.addClass("select2-selection--single"),e.html(''),e},i.prototype.bind=function(t,e){var n=this;i.__super__.bind.apply(this,arguments);var r=t.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",r).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",r),this.$selection.on("mousedown",function(e){1===e.which&&n.trigger("toggle",{originalEvent:e})}),this.$selection.on("focus",function(e){}),this.$selection.on("blur",function(e){}),t.on("focus",function(e){t.isOpen()||n.$selection.trigger("focus")})},i.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},i.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},i.prototype.selectionContainer=function(){return e("")},i.prototype.update=function(e){if(0!==e.length){var t=e[0],n=this.$selection.find(".select2-selection__rendered"),r=this.display(t,n);n.empty().append(r);var i=t.title||t.text;i?n.attr("title",i):n.removeAttr("title")}else this.clear()},i}),e.define("select2/selection/multiple",["jquery","./base","../utils"],function(i,e,l){function n(e,t){n.__super__.constructor.apply(this,arguments)}return l.Extend(n,e),n.prototype.render=function(){var e=n.__super__.render.call(this);return e.addClass("select2-selection--multiple"),e.html(''),e},n.prototype.bind=function(e,t){var r=this;n.__super__.bind.apply(this,arguments),this.$selection.on("click",function(e){r.trigger("toggle",{originalEvent:e})}),this.$selection.on("click",".select2-selection__choice__remove",function(e){if(!r.isDisabled()){var t=i(this).parent(),n=l.GetData(t[0],"data");r.trigger("unselect",{originalEvent:e,data:n})}})},n.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},n.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},n.prototype.selectionContainer=function(){return i('×')},n.prototype.update=function(e){if(this.clear(),0!==e.length){for(var t=[],n=0;n×');a.StoreData(r[0],"data",t),this.$selection.find(".select2-selection__rendered").prepend(r)}},e}),e.define("select2/selection/search",["jquery","../utils","../keys"],function(r,a,l){function e(e,t,n){e.call(this,t,n)}return e.prototype.render=function(e){var t=r('');this.$searchContainer=t,this.$search=t.find("input");var n=e.call(this);return this._transferTabIndex(),n},e.prototype.bind=function(e,t,n){var r=this,i=t.id+"-results";e.call(this,t,n),t.on("open",function(){r.$search.attr("aria-controls",i),r.$search.trigger("focus")}),t.on("close",function(){r.$search.val(""),r.$search.removeAttr("aria-controls"),r.$search.removeAttr("aria-activedescendant"),r.$search.trigger("focus")}),t.on("enable",function(){r.$search.prop("disabled",!1),r._transferTabIndex()}),t.on("disable",function(){r.$search.prop("disabled",!0)}),t.on("focus",function(e){r.$search.trigger("focus")}),t.on("results:focus",function(e){e.data._resultId?r.$search.attr("aria-activedescendant",e.data._resultId):r.$search.removeAttr("aria-activedescendant")}),this.$selection.on("focusin",".select2-search--inline",function(e){r.trigger("focus",e)}),this.$selection.on("focusout",".select2-search--inline",function(e){r._handleBlur(e)}),this.$selection.on("keydown",".select2-search--inline",function(e){if(e.stopPropagation(),r.trigger("keypress",e),r._keyUpPrevented=e.isDefaultPrevented(),e.which===l.BACKSPACE&&""===r.$search.val()){var t=r.$searchContainer.prev(".select2-selection__choice");if(0this.maximumInputLength?this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),e.define("select2/data/maximumSelectionLength",[],function(){function e(e,t,n){this.maximumSelectionLength=n.get("maximumSelectionLength"),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on("select",function(){r._checkIfMaximumSelected()})},e.prototype.query=function(e,t,n){var r=this;this._checkIfMaximumSelected(function(){e.call(r,t,n)})},e.prototype._checkIfMaximumSelected=function(e,n){var r=this;this.current(function(e){var t=null!=e?e.length:0;0=r.maximumSelectionLength?r.trigger("results:message",{message:"maximumSelected",args:{maximum:r.maximumSelectionLength}}):n&&n()})},e}),e.define("select2/dropdown",["jquery","./utils"],function(t,e){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('');return e.attr("dir",this.options.get("dir")),this.$dropdown=e},n.prototype.bind=function(){},n.prototype.position=function(e,t){},n.prototype.destroy=function(){this.$dropdown.remove()},n}),e.define("select2/dropdown/search",["jquery","../utils"],function(o,e){function t(){}return t.prototype.render=function(e){var t=e.call(this),n=o('');return this.$searchContainer=n,this.$search=n.find("input"),t.prepend(n),t},t.prototype.bind=function(e,t,n){var r=this,i=t.id+"-results";e.call(this,t,n),this.$search.on("keydown",function(e){r.trigger("keypress",e),r._keyUpPrevented=e.isDefaultPrevented()}),this.$search.on("input",function(e){o(this).off("keyup")}),this.$search.on("keyup input",function(e){r.handleSearch(e)}),t.on("open",function(){r.$search.attr("tabindex",0),r.$search.attr("aria-controls",i),r.$search.trigger("focus"),window.setTimeout(function(){r.$search.trigger("focus")},0)}),t.on("close",function(){r.$search.attr("tabindex",-1),r.$search.removeAttr("aria-controls"),r.$search.removeAttr("aria-activedescendant"),r.$search.val(""),r.$search.trigger("blur")}),t.on("focus",function(){t.isOpen()||r.$search.trigger("focus")}),t.on("results:all",function(e){null!=e.query.term&&""!==e.query.term||(r.showSearch(e)?r.$searchContainer.removeClass("select2-search--hide"):r.$searchContainer.addClass("select2-search--hide"))}),t.on("results:focus",function(e){e.data._resultId?r.$search.attr("aria-activedescendant",e.data._resultId):r.$search.removeAttr("aria-activedescendant")})},t.prototype.handleSearch=function(e){if(!this._keyUpPrevented){var t=this.$search.val();this.trigger("query",{term:t})}this._keyUpPrevented=!1},t.prototype.showSearch=function(e,t){return!0},t}),e.define("select2/dropdown/hidePlaceholder",[],function(){function e(e,t,n,r){this.placeholder=this.normalizePlaceholder(n.get("placeholder")),e.call(this,t,n,r)}return e.prototype.append=function(e,t){t.results=this.removePlaceholder(t.results),e.call(this,t)},e.prototype.normalizePlaceholder=function(e,t){return"string"==typeof t&&(t={id:"",text:t}),t},e.prototype.removePlaceholder=function(e,t){for(var n=t.slice(0),r=t.length-1;0<=r;r--){var i=t[r];this.placeholder.id===i.id&&n.splice(r,1)}return n},e}),e.define("select2/dropdown/infiniteScroll",["jquery"],function(n){function e(e,t,n,r){this.lastParams={},e.call(this,t,n,r),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return e.prototype.append=function(e,t){this.$loadingMore.remove(),this.loading=!1,e.call(this,t),this.showLoadingMore(t)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on("query",function(e){r.lastParams=e,r.loading=!0}),t.on("query:append",function(e){r.lastParams=e,r.loading=!0}),this.$results.on("scroll",this.loadMoreIfNeeded.bind(this))},e.prototype.loadMoreIfNeeded=function(){var e=n.contains(document.documentElement,this.$loadingMore[0]);if(!this.loading&&e){var t=this.$results.offset().top+this.$results.outerHeight(!1);this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)<=t+50&&this.loadMore()}},e.prototype.loadMore=function(){this.loading=!0;var e=n.extend({},{page:1},this.lastParams);e.page++,this.trigger("query:append",e)},e.prototype.showLoadingMore=function(e,t){return t.pagination&&t.pagination.more},e.prototype.createLoadingMore=function(){var e=n(''),t=this.options.get("translations").get("loadingMore");return e.html(t(this.lastParams)),e},e}),e.define("select2/dropdown/attachBody",["jquery","../utils"],function(f,a){function e(e,t,n){this.$dropdownParent=f(n.get("dropdownParent")||document.body),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on("open",function(){r._showDropdown(),r._attachPositioningHandler(t),r._bindContainerResultHandlers(t)}),t.on("close",function(){r._hideDropdown(),r._detachPositioningHandler(t)}),this.$dropdownContainer.on("mousedown",function(e){e.stopPropagation()})},e.prototype.destroy=function(e){e.call(this),this.$dropdownContainer.remove()},e.prototype.position=function(e,t,n){t.attr("class",n.attr("class")),t.removeClass("select2"),t.addClass("select2-container--open"),t.css({position:"absolute",top:-999999}),this.$container=n},e.prototype.render=function(e){var t=f(""),n=e.call(this);return t.append(n),this.$dropdownContainer=t},e.prototype._hideDropdown=function(e){this.$dropdownContainer.detach()},e.prototype._bindContainerResultHandlers=function(e,t){if(!this._containerResultsHandlersBound){var n=this;t.on("results:all",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:append",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:message",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("select",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("unselect",function(){n._positionDropdown(),n._resizeDropdown()}),this._containerResultsHandlersBound=!0}},e.prototype._attachPositioningHandler=function(e,t){var n=this,r="scroll.select2."+t.id,i="resize.select2."+t.id,o="orientationchange.select2."+t.id,s=this.$container.parents().filter(a.hasScroll);s.each(function(){a.StoreData(this,"select2-scroll-position",{x:f(this).scrollLeft(),y:f(this).scrollTop()})}),s.on(r,function(e){var t=a.GetData(this,"select2-scroll-position");f(this).scrollTop(t.y)}),f(window).on(r+" "+i+" "+o,function(e){n._positionDropdown(),n._resizeDropdown()})},e.prototype._detachPositioningHandler=function(e,t){var n="scroll.select2."+t.id,r="resize.select2."+t.id,i="orientationchange.select2."+t.id;this.$container.parents().filter(a.hasScroll).off(n),f(window).off(n+" "+r+" "+i)},e.prototype._positionDropdown=function(){var e=f(window),t=this.$dropdown.hasClass("select2-dropdown--above"),n=this.$dropdown.hasClass("select2-dropdown--below"),r=null,i=this.$container.offset();i.bottom=i.top+this.$container.outerHeight(!1);var o={height:this.$container.outerHeight(!1)};o.top=i.top,o.bottom=i.top+o.height;var s=this.$dropdown.outerHeight(!1),a=e.scrollTop(),l=e.scrollTop()+e.height(),c=ai.bottom+s,d={left:i.left,top:o.bottom},p=this.$dropdownParent;"static"===p.css("position")&&(p=p.offsetParent());var h={top:0,left:0};(f.contains(document.body,p[0])||p[0].isConnected)&&(h=p.offset()),d.top-=h.top,d.left-=h.left,t||n||(r="below"),u||!c||t?!c&&u&&t&&(r="below"):r="above",("above"==r||t&&"below"!==r)&&(d.top=o.top-h.top-s),null!=r&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+r),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+r)),this.$dropdownContainer.css(d)},e.prototype._resizeDropdown=function(){var e={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(e.minWidth=e.width,e.position="relative",e.width="auto"),this.$dropdown.css(e)},e.prototype._showDropdown=function(e){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},e}),e.define("select2/dropdown/minimumResultsForSearch",[],function(){function e(e,t,n,r){this.minimumResultsForSearch=n.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),e.call(this,t,n,r)}return e.prototype.showSearch=function(e,t){return!(function e(t){for(var n=0,r=0;r');return e.attr("dir",this.options.get("dir")),this.$container=e,this.$container.addClass("select2-container--"+this.options.get("theme")),u.StoreData(e[0],"element",this.$element),e},d}),e.define("jquery-mousewheel",["jquery"],function(e){return e}),e.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults","./select2/utils"],function(i,e,o,t,s){if(null==i.fn.select2){var a=["open","close","destroy"];i.fn.select2=function(t){if("object"==typeof(t=t||{}))return this.each(function(){var e=i.extend(!0,{},t);new o(i(this),e)}),this;if("string"!=typeof t)throw new Error("Invalid arguments for Select2: "+t);var n,r=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=s.GetData(this,"select2");null==e&&window.console&&console.error&&console.error("The select2('"+t+"') method was called on an element that is not using Select2."),n=e[t].apply(e,r)}),-1getOffset()/3600;
+}
+
+/**
+ * Return timezoned and formatted time
+ *
+ * @param int $timestamp Optional timestamp. If omitted, function will use time()
+ * @param string $timezone Optional timezone (eg "Europe/Paris"). Default is UTC
+ * @param string $format Optional format as what PHP's date() needs. Default it 'U' (epoch)
+ * @return string Timezoned and formatted time
+ */
+function yourls_tzp_timezoned_timestamp($timestamp = false, $timezone = 'UTC') {
+ $timestamp = $timestamp ? $timestamp : time();
+ $offset = yourls_tzp_timezoned_offset($timezone);
+ return $timestamp + $offset * 3600;
+}
+
+/**
+ * Get (string)key from array, or return false if not defined
+ *
+ * @param array $array Array
+ * @param string $key Key
+ * @return string Value of (string)$array[$key], or false
+ */
+function yourls_tzp_get_value( $array, $key, $default ) {
+ return isset ( $array[$key] ) ? (string)($array[$key]) : $default ;
+}
+
+/**
+ * Read timezone options from the DB, and return all keys or specified key
+ *
+ * @param string $key Key of timezone option array
+ * @return array|mixed Array of options, or value for specified key if exists (false otherwise)
+ */
+function yourls_tzp_read_options( $key = false, $default = false ) {
+ $options = (array)yourls_get_option( 'timezone' );
+
+ if( $key !== false ) {
+ $options = array_key_exists($key, $options) ? $options[$key] : $default ;
+ }
+
+ return $options;
+}
diff --git a/user/plugins/yourls-preview-url-with-qrcode-master/plugin.php b/user/plugins/yourls-preview-url-with-qrcode-master/plugin.php
index 6addd9d..742b6e2 100644
--- a/user/plugins/yourls-preview-url-with-qrcode-master/plugin.php
+++ b/user/plugins/yourls-preview-url-with-qrcode-master/plugin.php
@@ -42,12 +42,17 @@ function dd_preview_show( $keyword ) {
$qrcode = 'https://api.qrserver.com/v1/create-qr-code/?size=256x256&format=svg&bgcolor=1D1D1D&color=fff&charset-source=UTF-8&ecc=H&data='.YOURLS_SITE.'/'.$keyword;
echo <<Link Preview
+
+ Link Preview
You requested the short URL $base/$keyword
This short URL points to:
- - Long URL: $url
- - Page title: $title
+ - Long URL: $url
+ - Page title: $title
- QR Code:
If you still want to visit this link, please click here.