diff --git a/.github/workflows/php_documentor.yml b/.github/workflows/php_documentor.yml
index 0e0a55d02e..68cca8c718 100644
--- a/.github/workflows/php_documentor.yml
+++ b/.github/workflows/php_documentor.yml
@@ -31,7 +31,7 @@ jobs:
cp docker-compose.yml.default docker-compose.yml
sed -i -e "s/basercms:php8.1/basercms:php${{ matrix.php-version }}/g" docker-compose.yml
sed -i -e "s/XDEBUG_MODE: \"debug\"/XDEBUG_MODE: \"off\"/g" docker-compose.yml
- docker-compose up -d
+ docker compose up -d
- name: PhpDocumentor
run: |
diff --git a/README.md b/README.md
index 9628941bf9..f72d019657 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
-
+
@@ -30,7 +30,7 @@ Some Handy Links
- See [baserCMS Users Community](https://basercms.net/community/)
- See [CakePHP - the rapid development PHP framework](https://cakephp.org)
-Get Support!
+Get Support
-------------
- See [baserCMS Users Forum](https://forum.basercms.net/)
diff --git a/composer.json b/composer.json
index 39b3be0227..92dbb3dc6e 100644
--- a/composer.json
+++ b/composer.json
@@ -2,8 +2,8 @@
"name": "baserproject/basercms",
"description": "baserCMS plugin for CakePHP",
"homepage": "https://basercms.net",
- "type": "project",
"license": "MIT",
+ "type": "project",
"require": {
"php": ">=8.1",
"ext-gd": "*",
@@ -26,24 +26,18 @@
"cakephp/cakephp-codesniffer": "^5.0",
"cakephp/debug_kit": "^5.0.0",
"josegonzalez/dotenv": "^4.0",
- "phpunit/phpunit": "^10.1.0",
+ "phpunit/phpunit": "10.5.31",
"symplify/monorepo-builder": "^11.2",
"vierge-noire/cakephp-fixture-factories": "^3.0",
"vierge-noire/cakephp-test-suite-light": "^3.0"
},
- "suggest": {
- "markstory/asset_compress": "An asset compression plugin which provides file concatenation and a flexible filter system for preprocessing and minification.",
- "dereuromark/cakephp-ide-helper": "After baking your code, this keeps your annotations in sync with the code evolving from there on for maximum IDE and PHPStan/Psalm compatibility.",
- "phpstan/phpstan": "PHPStan focuses on finding errors in your code without actually running it. It catches whole classes of bugs even before you write tests for the code.",
- "cakephp/repl": "Console tools for a REPL interface for CakePHP applications."
- },
"autoload": {
"psr-4": {
"App\\": "src/",
"BaserCore\\": "plugins/baser-core/src",
"BcAdminThird\\": "plugins/bc-admin-third/src",
- "BcColumn\\": "plugins/BcColumn/src/",
"BcBlog\\": "plugins/bc-blog/src/",
+ "BcColumn\\": "plugins/BcColumn/src/",
"BcContentLink\\": "plugins/bc-content-link/src/",
"BcCustomContent\\": "plugins/bc-custom-content/src/",
"BcEditorTemplate\\": "plugins/bc-editor-template/src/",
@@ -78,26 +72,6 @@
"BcWidgetArea\\Test\\": "plugins/bc-widget-area/tests/"
}
},
- "replace": {
- "baserproject/baser-core": "5.1.0",
- "baserproject/bc-admin-third": "5.1.0",
- "baserproject/bc-blog": "5.1.0",
- "baserproject/bc-column": "5.1.0",
- "baserproject/bc-content-link": "5.1.0",
- "baserproject/bc-custom-content": "5.1.0",
- "baserproject/bc-editor-template": "5.1.0",
- "baserproject/bc-favorite": "5.1.0",
- "baserproject/bc-front": "5.1.0",
- "baserproject/bc-installer": "5.1.0",
- "baserproject/bc-mail": "5.1.0",
- "baserproject/bc-plugin-sample": "5.1.0",
- "baserproject/bc-search-index": "5.1.0",
- "baserproject/bc-theme-config": "5.1.0",
- "baserproject/bc-theme-file": "5.1.0",
- "baserproject/bc-theme-sample": "5.1.0",
- "baserproject/bc-uploader": "5.1.0",
- "baserproject/bc-widget-area": "5.1.0"
- },
"scripts": {
"post-install-cmd": "App\\Console\\Installer::postInstall",
"post-update-cmd": "App\\Console\\Installer::postInstall",
@@ -120,11 +94,37 @@
"vendor/bin/phpunit --colors=always"
]
},
+ "suggest": {
+ "markstory/asset_compress": "An asset compression plugin which provides file concatenation and a flexible filter system for preprocessing and minification.",
+ "dereuromark/cakephp-ide-helper": "After baking your code, this keeps your annotations in sync with the code evolving from there on for maximum IDE and PHPStan/Psalm compatibility.",
+ "phpstan/phpstan": "PHPStan focuses on finding errors in your code without actually running it. It catches whole classes of bugs even before you write tests for the code.",
+ "cakephp/repl": "Console tools for a REPL interface for CakePHP applications."
+ },
"config": {
"sort-packages": true,
"allow-plugins": {
"cakephp/plugin-installer": true,
"dealerdirect/phpcodesniffer-composer-installer": true
}
+ },
+ "replace": {
+ "baserproject/baser-core": "5.1.1",
+ "baserproject/bc-admin-third": "5.1.1",
+ "baserproject/bc-blog": "5.1.1",
+ "baserproject/bc-column": "5.1.1",
+ "baserproject/bc-content-link": "5.1.1",
+ "baserproject/bc-custom-content": "5.1.1",
+ "baserproject/bc-editor-template": "5.1.1",
+ "baserproject/bc-favorite": "5.1.1",
+ "baserproject/bc-front": "5.1.1",
+ "baserproject/bc-installer": "5.1.1",
+ "baserproject/bc-mail": "5.1.1",
+ "baserproject/bc-plugin-sample": "5.1.1",
+ "baserproject/bc-search-index": "5.1.1",
+ "baserproject/bc-theme-config": "5.1.1",
+ "baserproject/bc-theme-file": "5.1.1",
+ "baserproject/bc-theme-sample": "5.1.1",
+ "baserproject/bc-uploader": "5.1.1",
+ "baserproject/bc-widget-area": "5.1.1"
}
}
diff --git a/composer.lock b/composer.lock
index ddb52d2c54..af06821817 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "a45283d9748e1f55514e4c9377f4947f",
+ "content-hash": "334c429953fa4a60336caedf9c401d74",
"packages": [
{
"name": "cakephp/authentication",
@@ -254,16 +254,16 @@
},
{
"name": "cakephp/migrations",
- "version": "4.3.2",
+ "version": "4.4.0",
"source": {
"type": "git",
"url": "https://github.com/cakephp/migrations.git",
- "reference": "ff26043d1b01321d59f44143167c898f19bcd536"
+ "reference": "6047ee0033bb0f4c5f7a3afceb2e8d85d319c9f0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cakephp/migrations/zipball/ff26043d1b01321d59f44143167c898f19bcd536",
- "reference": "ff26043d1b01321d59f44143167c898f19bcd536",
+ "url": "https://api.github.com/repos/cakephp/migrations/zipball/6047ee0033bb0f4c5f7a3afceb2e8d85d319c9f0",
+ "reference": "6047ee0033bb0f4c5f7a3afceb2e8d85d319c9f0",
"shasum": ""
},
"require": {
@@ -273,10 +273,10 @@
"robmorgan/phinx": "^0.16.0"
},
"require-dev": {
- "cakephp/bake": "^3.0",
- "cakephp/cakephp": "^5.0.3",
+ "cakephp/bake": "dev-3.next",
+ "cakephp/cakephp": "dev-5.next as 5.1.0",
"cakephp/cakephp-codesniffer": "^5.0",
- "phpunit/phpunit": "^10.1.0"
+ "phpunit/phpunit": "^10.5.5 || ^11.1.3"
},
"suggest": {
"cakephp/bake": "If you want to generate migrations.",
@@ -310,7 +310,7 @@
"issues": "https://github.com/cakephp/migrations/issues",
"source": "https://github.com/cakephp/migrations"
},
- "time": "2024-07-30T14:41:32+00:00"
+ "time": "2024-08-21T20:03:33+00:00"
},
{
"name": "cakephp/plugin-installer",
@@ -1418,16 +1418,16 @@
},
{
"name": "psr/log",
- "version": "3.0.0",
+ "version": "3.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
- "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001"
+ "reference": "79dff0b268932c640297f5208d6298f71855c03e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001",
- "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/79dff0b268932c640297f5208d6298f71855c03e",
+ "reference": "79dff0b268932c640297f5208d6298f71855c03e",
"shasum": ""
},
"require": {
@@ -1462,9 +1462,9 @@
"psr-3"
],
"support": {
- "source": "https://github.com/php-fig/log/tree/3.0.0"
+ "source": "https://github.com/php-fig/log/tree/3.0.1"
},
- "time": "2021-07-14T16:46:02+00:00"
+ "time": "2024-08-21T13:31:24+00:00"
},
{
"name": "psr/simple-cache",
@@ -1681,16 +1681,16 @@
},
{
"name": "symfony/console",
- "version": "v6.4.10",
+ "version": "v6.4.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "504974cbe43d05f83b201d6498c206f16fc0cdbc"
+ "reference": "42686880adaacdad1835ee8fc2a9ec5b7bd63998"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/504974cbe43d05f83b201d6498c206f16fc0cdbc",
- "reference": "504974cbe43d05f83b201d6498c206f16fc0cdbc",
+ "url": "https://api.github.com/repos/symfony/console/zipball/42686880adaacdad1835ee8fc2a9ec5b7bd63998",
+ "reference": "42686880adaacdad1835ee8fc2a9ec5b7bd63998",
"shasum": ""
},
"require": {
@@ -1755,7 +1755,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v6.4.10"
+ "source": "https://github.com/symfony/console/tree/v6.4.11"
},
"funding": [
{
@@ -1771,7 +1771,7 @@
"type": "tidelift"
}
],
- "time": "2024-07-26T12:30:32+00:00"
+ "time": "2024-08-15T22:48:29+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -2309,16 +2309,16 @@
},
{
"name": "symfony/string",
- "version": "v6.4.10",
+ "version": "v6.4.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "ccf9b30251719567bfd46494138327522b9a9446"
+ "reference": "5bc3eb632cf9c8dbfd6529d89be9950d1518883b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/ccf9b30251719567bfd46494138327522b9a9446",
- "reference": "ccf9b30251719567bfd46494138327522b9a9446",
+ "url": "https://api.github.com/repos/symfony/string/zipball/5bc3eb632cf9c8dbfd6529d89be9950d1518883b",
+ "reference": "5bc3eb632cf9c8dbfd6529d89be9950d1518883b",
"shasum": ""
},
"require": {
@@ -2375,7 +2375,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v6.4.10"
+ "source": "https://github.com/symfony/string/tree/v6.4.11"
},
"funding": [
{
@@ -2391,7 +2391,7 @@
"type": "tidelift"
}
],
- "time": "2024-07-22T10:21:14+00:00"
+ "time": "2024-08-12T09:55:28+00:00"
}
],
"packages-dev": [
@@ -2501,26 +2501,26 @@
},
{
"name": "cakephp/cakephp-codesniffer",
- "version": "5.1.1",
+ "version": "5.1.3",
"source": {
"type": "git",
"url": "https://github.com/cakephp/cakephp-codesniffer.git",
- "reference": "3227936e698774025a16fb808c28f92688672306"
+ "reference": "04860c9746810d22d02d014deeb57bc80bf57804"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cakephp/cakephp-codesniffer/zipball/3227936e698774025a16fb808c28f92688672306",
- "reference": "3227936e698774025a16fb808c28f92688672306",
+ "url": "https://api.github.com/repos/cakephp/cakephp-codesniffer/zipball/04860c9746810d22d02d014deeb57bc80bf57804",
+ "reference": "04860c9746810d22d02d014deeb57bc80bf57804",
"shasum": ""
},
"require": {
"php": ">=8.1.0",
"phpstan/phpdoc-parser": "^1.4.5",
- "slevomat/coding-standard": "^8.4",
- "squizlabs/php_codesniffer": "^3.7.1"
+ "slevomat/coding-standard": "^8.15",
+ "squizlabs/php_codesniffer": "^3.9"
},
"require-dev": {
- "phpunit/phpunit": "^7.1"
+ "phpunit/phpunit": "^9.3.4"
},
"type": "phpcodesniffer-standard",
"autoload": {
@@ -2550,7 +2550,7 @@
"issues": "https://github.com/cakephp/cakephp-codesniffer/issues",
"source": "https://github.com/cakephp/cakephp-codesniffer"
},
- "time": "2023-04-09T13:00:25+00:00"
+ "time": "2024-08-13T10:21:08+00:00"
},
{
"name": "cakephp/debug_kit",
@@ -2754,48 +2754,48 @@
},
{
"name": "composer/composer",
- "version": "2.7.7",
+ "version": "2.7.9",
"source": {
"type": "git",
"url": "https://github.com/composer/composer.git",
- "reference": "291942978f39435cf904d33739f98d7d4eca7b23"
+ "reference": "e30ccdd665828ae66eb1be78f056e39e1d5f55ab"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/composer/zipball/291942978f39435cf904d33739f98d7d4eca7b23",
- "reference": "291942978f39435cf904d33739f98d7d4eca7b23",
+ "url": "https://api.github.com/repos/composer/composer/zipball/e30ccdd665828ae66eb1be78f056e39e1d5f55ab",
+ "reference": "e30ccdd665828ae66eb1be78f056e39e1d5f55ab",
"shasum": ""
},
"require": {
- "composer/ca-bundle": "^1.0",
+ "composer/ca-bundle": "^1.5",
"composer/class-map-generator": "^1.3.3",
"composer/metadata-minifier": "^1.0",
- "composer/pcre": "^2.1 || ^3.1",
+ "composer/pcre": "^2.2 || ^3.2",
"composer/semver": "^3.3",
"composer/spdx-licenses": "^1.5.7",
"composer/xdebug-handler": "^2.0.2 || ^3.0.3",
- "justinrainbow/json-schema": "^5.2.11",
+ "justinrainbow/json-schema": "^5.3",
"php": "^7.2.5 || ^8.0",
"psr/log": "^1.0 || ^2.0 || ^3.0",
- "react/promise": "^2.8 || ^3",
+ "react/promise": "^3.2",
"seld/jsonlint": "^1.4",
"seld/phar-utils": "^1.2",
"seld/signal-handler": "^2.0",
- "symfony/console": "^5.4.11 || ^6.0.11 || ^7",
- "symfony/filesystem": "^5.4 || ^6.0 || ^7",
- "symfony/finder": "^5.4 || ^6.0 || ^7",
+ "symfony/console": "^5.4.35 || ^6.3.12 || ^7.0.3",
+ "symfony/filesystem": "^5.4.35 || ^6.3.12 || ^7.0.3",
+ "symfony/finder": "^5.4.35 || ^6.3.12 || ^7.0.3",
"symfony/polyfill-php73": "^1.24",
"symfony/polyfill-php80": "^1.24",
"symfony/polyfill-php81": "^1.24",
- "symfony/process": "^5.4 || ^6.0 || ^7"
+ "symfony/process": "^5.4.35 || ^6.3.12 || ^7.0.3"
},
"require-dev": {
- "phpstan/phpstan": "^1.11.0",
+ "phpstan/phpstan": "^1.11.8",
"phpstan/phpstan-deprecation-rules": "^1.2.0",
"phpstan/phpstan-phpunit": "^1.4.0",
"phpstan/phpstan-strict-rules": "^1.6.0",
"phpstan/phpstan-symfony": "^1.4.0",
- "symfony/phpunit-bridge": "^6.4.1 || ^7.0.1"
+ "symfony/phpunit-bridge": "^6.4.3 || ^7.0.1"
},
"suggest": {
"ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
@@ -2848,7 +2848,7 @@
"irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/composer/issues",
"security": "https://github.com/composer/composer/security/policy",
- "source": "https://github.com/composer/composer/tree/2.7.7"
+ "source": "https://github.com/composer/composer/tree/2.7.9"
},
"funding": [
{
@@ -2864,7 +2864,7 @@
"type": "tidelift"
}
],
- "time": "2024-06-10T20:11:12+00:00"
+ "time": "2024-09-04T12:43:28+00:00"
},
{
"name": "composer/metadata-minifier",
@@ -2937,26 +2937,26 @@
},
{
"name": "composer/pcre",
- "version": "3.2.0",
+ "version": "3.3.1",
"source": {
"type": "git",
"url": "https://github.com/composer/pcre.git",
- "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90"
+ "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/pcre/zipball/ea4ab6f9580a4fd221e0418f2c357cdd39102a90",
- "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90",
+ "url": "https://api.github.com/repos/composer/pcre/zipball/63aaeac21d7e775ff9bc9d45021e1745c97521c4",
+ "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4",
"shasum": ""
},
"require": {
"php": "^7.4 || ^8.0"
},
"conflict": {
- "phpstan/phpstan": "<1.11.8"
+ "phpstan/phpstan": "<1.11.10"
},
"require-dev": {
- "phpstan/phpstan": "^1.11.8",
+ "phpstan/phpstan": "^1.11.10",
"phpstan/phpstan-strict-rules": "^1.1",
"phpunit/phpunit": "^8 || ^9"
},
@@ -2996,7 +2996,7 @@
],
"support": {
"issues": "https://github.com/composer/pcre/issues",
- "source": "https://github.com/composer/pcre/tree/3.2.0"
+ "source": "https://github.com/composer/pcre/tree/3.3.1"
},
"funding": [
{
@@ -3012,7 +3012,7 @@
"type": "tidelift"
}
],
- "time": "2024-07-25T09:36:02+00:00"
+ "time": "2024-08-27T18:44:43+00:00"
},
{
"name": "composer/semver",
@@ -3321,16 +3321,16 @@
},
{
"name": "doctrine/sql-formatter",
- "version": "1.4.0",
+ "version": "1.4.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/sql-formatter.git",
- "reference": "d1ac84aef745c69ea034929eb6d65a6908b675cc"
+ "reference": "7f83911cc5eba870de7ebb11283972483f7e2891"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/d1ac84aef745c69ea034929eb6d65a6908b675cc",
- "reference": "d1ac84aef745c69ea034929eb6d65a6908b675cc",
+ "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/7f83911cc5eba870de7ebb11283972483f7e2891",
+ "reference": "7f83911cc5eba870de7ebb11283972483f7e2891",
"shasum": ""
},
"require": {
@@ -3370,9 +3370,9 @@
],
"support": {
"issues": "https://github.com/doctrine/sql-formatter/issues",
- "source": "https://github.com/doctrine/sql-formatter/tree/1.4.0"
+ "source": "https://github.com/doctrine/sql-formatter/tree/1.4.1"
},
- "time": "2024-05-08T08:12:09+00:00"
+ "time": "2024-08-05T20:32:22+00:00"
},
{
"name": "fakerphp/faker",
@@ -3439,27 +3439,29 @@
},
{
"name": "jasny/twig-extensions",
- "version": "v1.3.0",
+ "version": "v1.3.1",
"source": {
"type": "git",
"url": "https://github.com/jasny/twig-extensions.git",
- "reference": "a694eb02f6fc14ff8e2fceb8b80882c0c926102b"
+ "reference": "8a5ca5f49317bf421a519556ad2e876820d41e01"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/jasny/twig-extensions/zipball/a694eb02f6fc14ff8e2fceb8b80882c0c926102b",
- "reference": "a694eb02f6fc14ff8e2fceb8b80882c0c926102b",
+ "url": "https://api.github.com/repos/jasny/twig-extensions/zipball/8a5ca5f49317bf421a519556ad2e876820d41e01",
+ "reference": "8a5ca5f49317bf421a519556ad2e876820d41e01",
"shasum": ""
},
"require": {
- "php": ">=7.0.0",
- "twig/twig": "^2.0 | ^3.0"
+ "php": ">=7.4.0",
+ "twig/twig": "^2.7 | ^3.0"
},
"require-dev": {
"ext-intl": "*",
+ "ext-json": "*",
"ext-pcre": "*",
- "jasny/php-code-quality": "^2.5",
- "php": ">=7.2.0"
+ "phpstan/phpstan": "^1.12.0",
+ "phpunit/phpunit": "^9.6",
+ "squizlabs/php_codesniffer": "^3.10"
},
"suggest": {
"ext-intl": "Required for the use of the LocalDate Twig extension",
@@ -3499,7 +3501,7 @@
"issues": "https://github.com/jasny/twig-extensions/issues",
"source": "https://github.com/jasny/twig-extensions"
},
- "time": "2019-12-10T16:04:23+00:00"
+ "time": "2024-09-03T09:04:53+00:00"
},
{
"name": "josegonzalez/dotenv",
@@ -3921,16 +3923,16 @@
},
{
"name": "phpstan/phpdoc-parser",
- "version": "1.29.1",
+ "version": "1.30.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4"
+ "reference": "5ceb0e384997db59f38774bf79c2a6134252c08f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fcaefacf2d5c417e928405b71b400d4ce10daaf4",
- "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/5ceb0e384997db59f38774bf79c2a6134252c08f",
+ "reference": "5ceb0e384997db59f38774bf79c2a6134252c08f",
"shasum": ""
},
"require": {
@@ -3962,38 +3964,38 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.1"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.30.0"
},
- "time": "2024-05-31T08:52:43+00:00"
+ "time": "2024-08-29T09:54:52+00:00"
},
{
"name": "phpunit/php-code-coverage",
- "version": "10.1.15",
+ "version": "10.1.16",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae"
+ "reference": "7e308268858ed6baedc8704a304727d20bc07c77"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae",
- "reference": "5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77",
+ "reference": "7e308268858ed6baedc8704a304727d20bc07c77",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-libxml": "*",
"ext-xmlwriter": "*",
- "nikic/php-parser": "^4.18 || ^5.0",
+ "nikic/php-parser": "^4.19.1 || ^5.1.0",
"php": ">=8.1",
- "phpunit/php-file-iterator": "^4.0",
- "phpunit/php-text-template": "^3.0",
- "sebastian/code-unit-reverse-lookup": "^3.0",
- "sebastian/complexity": "^3.0",
- "sebastian/environment": "^6.0",
- "sebastian/lines-of-code": "^2.0",
- "sebastian/version": "^4.0",
- "theseer/tokenizer": "^1.2.0"
+ "phpunit/php-file-iterator": "^4.1.0",
+ "phpunit/php-text-template": "^3.0.1",
+ "sebastian/code-unit-reverse-lookup": "^3.0.0",
+ "sebastian/complexity": "^3.2.0",
+ "sebastian/environment": "^6.1.0",
+ "sebastian/lines-of-code": "^2.0.2",
+ "sebastian/version": "^4.0.1",
+ "theseer/tokenizer": "^1.2.3"
},
"require-dev": {
"phpunit/phpunit": "^10.1"
@@ -4005,7 +4007,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "10.1-dev"
+ "dev-main": "10.1.x-dev"
}
},
"autoload": {
@@ -4034,7 +4036,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.15"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16"
},
"funding": [
{
@@ -4042,7 +4044,7 @@
"type": "github"
}
],
- "time": "2024-06-29T08:25:15+00:00"
+ "time": "2024-08-22T04:31:57+00:00"
},
{
"name": "phpunit/php-file-iterator",
@@ -4289,16 +4291,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "10.5.29",
+ "version": "10.5.31",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "8e9e80872b4e8064401788ee8a32d40b4455318f"
+ "reference": "43e7c3e6a484e538453f89dfa6a6f308c32792da"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e9e80872b4e8064401788ee8a32d40b4455318f",
- "reference": "8e9e80872b4e8064401788ee8a32d40b4455318f",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/43e7c3e6a484e538453f89dfa6a6f308c32792da",
+ "reference": "43e7c3e6a484e538453f89dfa6a6f308c32792da",
"shasum": ""
},
"require": {
@@ -4312,14 +4314,14 @@
"phar-io/manifest": "^2.0.4",
"phar-io/version": "^3.2.1",
"php": ">=8.1",
- "phpunit/php-code-coverage": "^10.1.15",
+ "phpunit/php-code-coverage": "^10.1.16",
"phpunit/php-file-iterator": "^4.1.0",
"phpunit/php-invoker": "^4.0.0",
"phpunit/php-text-template": "^3.0.1",
"phpunit/php-timer": "^6.0.0",
"sebastian/cli-parser": "^2.0.1",
"sebastian/code-unit": "^2.0.0",
- "sebastian/comparator": "^5.0.1",
+ "sebastian/comparator": "^5.0.2",
"sebastian/diff": "^5.1.1",
"sebastian/environment": "^6.1.0",
"sebastian/exporter": "^5.1.2",
@@ -4370,7 +4372,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.29"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.31"
},
"funding": [
{
@@ -4386,7 +4388,7 @@
"type": "tidelift"
}
],
- "time": "2024-07-30T11:08:00+00:00"
+ "time": "2024-09-03T11:57:55+00:00"
},
{
"name": "react/promise",
@@ -4631,16 +4633,16 @@
},
{
"name": "sebastian/comparator",
- "version": "5.0.1",
+ "version": "5.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "2db5010a484d53ebf536087a70b4a5423c102372"
+ "reference": "2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372",
- "reference": "2db5010a484d53ebf536087a70b4a5423c102372",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53",
+ "reference": "2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53",
"shasum": ""
},
"require": {
@@ -4651,7 +4653,7 @@
"sebastian/exporter": "^5.0"
},
"require-dev": {
- "phpunit/phpunit": "^10.3"
+ "phpunit/phpunit": "^10.4"
},
"type": "library",
"extra": {
@@ -4696,7 +4698,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
"security": "https://github.com/sebastianbergmann/comparator/security/policy",
- "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1"
+ "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.2"
},
"funding": [
{
@@ -4704,7 +4706,7 @@
"type": "github"
}
],
- "time": "2023-08-14T13:18:12+00:00"
+ "time": "2024-08-12T06:03:08+00:00"
},
{
"name": "sebastian/complexity",
@@ -5697,16 +5699,16 @@
},
{
"name": "symfony/finder",
- "version": "v6.4.10",
+ "version": "v6.4.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "af29198d87112bebdd397bd7735fbd115997824c"
+ "reference": "d7eb6daf8cd7e9ac4976e9576b32042ef7253453"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/af29198d87112bebdd397bd7735fbd115997824c",
- "reference": "af29198d87112bebdd397bd7735fbd115997824c",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/d7eb6daf8cd7e9ac4976e9576b32042ef7253453",
+ "reference": "d7eb6daf8cd7e9ac4976e9576b32042ef7253453",
"shasum": ""
},
"require": {
@@ -5741,7 +5743,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/finder/tree/v6.4.10"
+ "source": "https://github.com/symfony/finder/tree/v6.4.11"
},
"funding": [
{
@@ -5757,7 +5759,7 @@
"type": "tidelift"
}
],
- "time": "2024-07-24T07:06:38+00:00"
+ "time": "2024-08-13T14:27:37+00:00"
},
{
"name": "symfony/polyfill-php73",
@@ -6054,16 +6056,16 @@
},
{
"name": "symplify/monorepo-builder",
- "version": "11.2.20",
+ "version": "11.2.22",
"source": {
"type": "git",
"url": "https://github.com/symplify/monorepo-builder.git",
- "reference": "444efe08701776cb1a03b9f3600e715697519aa6"
+ "reference": "c913a8524ee276c8c21a09012c137f6913b5dcad"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symplify/monorepo-builder/zipball/444efe08701776cb1a03b9f3600e715697519aa6",
- "reference": "444efe08701776cb1a03b9f3600e715697519aa6",
+ "url": "https://api.github.com/repos/symplify/monorepo-builder/zipball/c913a8524ee276c8c21a09012c137f6913b5dcad",
+ "reference": "c913a8524ee276c8c21a09012c137f6913b5dcad",
"shasum": ""
},
"require": {
@@ -6090,7 +6092,7 @@
"description": "Prefixed version of Not only Composer tools to build a Monorepo.",
"support": {
"issues": "https://github.com/symplify/monorepo-builder/issues",
- "source": "https://github.com/symplify/monorepo-builder/tree/11.2.20"
+ "source": "https://github.com/symplify/monorepo-builder/tree/11.2.22"
},
"funding": [
{
@@ -6102,7 +6104,7 @@
"type": "github"
}
],
- "time": "2023-11-17T08:30:16+00:00"
+ "time": "2024-08-23T03:19:18+00:00"
},
{
"name": "theseer/tokenizer",
@@ -6156,20 +6158,20 @@
},
{
"name": "twig/markdown-extra",
- "version": "v3.10.0",
+ "version": "v3.12.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/markdown-extra.git",
- "reference": "e4bf2419df819dcf9dc7a0b25dd8cd1092cbd86d"
+ "reference": "2a94d7902a58147474840c89cbfcd16e68c70499"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/e4bf2419df819dcf9dc7a0b25dd8cd1092cbd86d",
- "reference": "e4bf2419df819dcf9dc7a0b25dd8cd1092cbd86d",
+ "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/2a94d7902a58147474840c89cbfcd16e68c70499",
+ "reference": "2a94d7902a58147474840c89cbfcd16e68c70499",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
+ "php": ">=8.0.2",
"symfony/deprecation-contracts": "^2.5|^3",
"twig/twig": "^3.0"
},
@@ -6212,7 +6214,7 @@
"twig"
],
"support": {
- "source": "https://github.com/twigphp/markdown-extra/tree/v3.10.0"
+ "source": "https://github.com/twigphp/markdown-extra/tree/v3.12.0"
},
"funding": [
{
@@ -6224,28 +6226,28 @@
"type": "tidelift"
}
],
- "time": "2024-05-11T07:35:57+00:00"
+ "time": "2024-08-10T10:32:24+00:00"
},
{
"name": "twig/twig",
- "version": "v3.10.3",
+ "version": "v3.12.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
- "reference": "67f29781ffafa520b0bbfbd8384674b42db04572"
+ "reference": "4d19472d4ac1838e0b1f0e029ce1fa4040eb34ea"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/Twig/zipball/67f29781ffafa520b0bbfbd8384674b42db04572",
- "reference": "67f29781ffafa520b0bbfbd8384674b42db04572",
+ "url": "https://api.github.com/repos/twigphp/Twig/zipball/4d19472d4ac1838e0b1f0e029ce1fa4040eb34ea",
+ "reference": "4d19472d4ac1838e0b1f0e029ce1fa4040eb34ea",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
+ "php": ">=8.0.2",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-mbstring": "^1.3",
- "symfony/polyfill-php80": "^1.22"
+ "symfony/polyfill-php81": "^1.29"
},
"require-dev": {
"psr/container": "^1.0|^2.0",
@@ -6291,7 +6293,7 @@
],
"support": {
"issues": "https://github.com/twigphp/Twig/issues",
- "source": "https://github.com/twigphp/Twig/tree/v3.10.3"
+ "source": "https://github.com/twigphp/Twig/tree/v3.12.0"
},
"funding": [
{
@@ -6303,7 +6305,7 @@
"type": "tidelift"
}
],
- "time": "2024-05-16T10:04:27+00:00"
+ "time": "2024-08-29T09:51:12+00:00"
},
{
"name": "vierge-noire/cakephp-fixture-factories",
diff --git a/composer_installer.php b/composer_installer.php
index 60a11b468d..af9cd02d35 100644
--- a/composer_installer.php
+++ b/composer_installer.php
@@ -81,7 +81,7 @@ function command($phpPath)
exec($command, $out, $code);
if ($code !== 0) throw new Exception('composer のアップデートに失敗しました。(' . $command . ')');
- $command = "cd " . ROOT_DIR . "; export HOME={$composerDir} ; yes | {$phpPath} {$composerDir}composer.phar update --ignore-platform-req=ext-xdebug";
+ $command = "cd " . ROOT_DIR . "; export HOME={$composerDir} ; yes | {$phpPath} {$composerDir}composer.phar install --ignore-platform-req=ext-xdebug";
exec($command, $out, $code);
if ($code !== 0) throw new Exception('ライブラリのインストールに失敗しました。
コマンド実行をお試しください
' . $command);
diff --git a/docker/docker-compose.yml.default b/docker/docker-compose.yml.default
index 6ee8877153..2dca4ffdc6 100644
--- a/docker/docker-compose.yml.default
+++ b/docker/docker-compose.yml.default
@@ -1,5 +1,3 @@
-version: '3'
-
# volumes:
# db-volume: # windowsの場合はコメントを外す
diff --git a/monorepo-builder.php b/monorepo-builder.php
index 130f0b2df4..48e954d21d 100644
--- a/monorepo-builder.php
+++ b/monorepo-builder.php
@@ -27,8 +27,7 @@
*/
$mbConfig->defaultBranch('master');
$mbConfig->workers([
- UpdateReplaceReleaseWorker::class,
- SetCurrentMutualDependenciesReleaseWorker::class,
+ UpdateReplaceReleaseWorker::class
]);
} elseif(preg_match('/^[0-9]+\.[0-9]+\.[0-9]+-(alpha|beta|rc)/', $version)) {
/**
diff --git a/plugins/BcThemeSample/webroot/css/bge_style.css b/plugins/BcThemeSample/webroot/css/bge_style.css
new file mode 100755
index 0000000000..8579969a24
--- /dev/null
+++ b/plugins/BcThemeSample/webroot/css/bge_style.css
@@ -0,0 +1,1027 @@
+@charset "UTF-8";
+/**
+ * baserCMS : Based Website Development Project
+ * Copyright (c) NPO baser foundation
+ *
+ * @copyright Copyright (c) NPO baser foundation
+ * @link https://basercms.net baserCMS Project
+ * @since 5.0.0
+ * @license https://basercms.net/license/index.html MIT License
+ */
+/**
+ * バーガーエディタースタイル
+ * 管理画面でも呼び出される
+ */
+/**
+ * エディター用CSS
+ */
+.cke_editable {
+ padding: 15px;
+}
+/* Editor Parts
+----------------------------------------------- */
+.bs-main-contents,
+.bge-contents,
+.cke_editable {
+ font-family: Arial, Verdana, "游ゴシック", YuGothic, "Hiragino Kaku Gothic ProN", Meiryo, sans-serif;
+ color: #000;
+}
+.bs-main-contents h1,
+.bge-contents h1,
+.cke_editable h1 {
+ font-size: 40px;
+ margin-bottom: 40px;
+ font-weight: bold;
+}
+.bs-main-contents h2,
+.bge-contents h2,
+.cke_editable h2 {
+ font-family: "SF Pro JP", "SF Pro Text", "SF Pro Icons", "Hiragino Kaku Gothic Pro", "ヒラギノ角ゴ Pro W3", "メイリオ", "Meiryo", "MS Pゴシック", "Helvetica Neue", "Helvetica", "Arial", "sans-serif";
+ letter-spacing: 0;
+ overflow: hidden;
+ font-size: 2.2em;
+ font-weight: bold;
+ line-height: 1.2;
+ margin: 0.6em 0;
+ padding: 0.3em 0;
+ text-align: left;
+ background: none;
+}
+.bs-main-contents h2:first-child,
+.bge-contents h2:first-child,
+.cke_editable h2:first-child {
+ margin-top: 0;
+}
+.bs-main-contents h3,
+.bge-contents h3,
+.cke_editable h3 {
+ margin: 56px 0 20px 0;
+ padding: 13px 28px 12px;
+ font-size: 21px;
+ font-weight: 700;
+ background: #f0f0f0;
+ border-radius: 10px;
+ line-height: 48.3px;
+ overflow: hidden;
+}
+.bs-main-contents h3:first-child,
+.bge-contents h3:first-child,
+.cke_editable h3:first-child {
+ margin-top: 0;
+}
+.bs-main-contents h4,
+.bge-contents h4,
+.cke_editable h4 {
+ border-bottom: 1px #CCC dotted;
+ font-size: 22px;
+ padding-bottom: 12px;
+ font-weight: bold;
+ padding-left: 0;
+ margin: 50px 0 17px 0;
+ overflow: hidden;
+ position: relative;
+}
+.bs-main-contents h4:first-child,
+.bge-contents h4:first-child,
+.cke_editable h4:first-child {
+ margin-top: 0;
+}
+.bs-main-contents h5,
+.bge-contents h5,
+.cke_editable h5 {
+ font-size: 1.2em;
+ font-weight: bold;
+ line-height: 1.2;
+ margin: 1em 0;
+ padding: 0.3em 0;
+ overflow: hidden;
+}
+.bs-main-contents h5:first-child,
+.bge-contents h5:first-child,
+.cke_editable h5:first-child {
+ margin-top: 0;
+}
+.bs-main-contents h6,
+.bge-contents h6,
+.cke_editable h6 {
+ font-size: 1em;
+ font-weight: bold;
+ line-height: 1.2;
+ margin: 1em 0;
+ border: none;
+ padding: 0.3em 0;
+ overflow: hidden;
+}
+.bs-main-contents h6:first-child,
+.bge-contents h6:first-child,
+.cke_editable h6:first-child {
+ margin-top: 0;
+}
+.bs-main-contents strong,
+.bge-contents strong,
+.cke_editable strong {
+ font-weight: bold;
+ font-style: normal;
+ text-decoration: none;
+}
+.bs-main-contents u,
+.bge-contents u,
+.cke_editable u {
+ font-weight: normal;
+ font-style: normal;
+ text-decoration: underline;
+}
+.bs-main-contents s,
+.bge-contents s,
+.cke_editable s {
+ font-weight: normal;
+ font-style: normal;
+ text-decoration: line-through;
+}
+.bs-main-contents em,
+.bge-contents em,
+.cke_editable em {
+ font-style: italic;
+}
+.bs-main-contents hr,
+.bge-contents hr,
+.cke_editable hr {
+ width: 100%;
+ height: 1px;
+ color: #ddd;
+ background: currentColor;
+ border-style: none;
+ margin: 50px auto;
+}
+.bs-main-contents hr:first-child,
+.bge-contents hr:first-child,
+.cke_editable hr:first-child {
+ margin-top: 0;
+}
+.bs-main-contents ul,
+.bge-contents ul,
+.cke_editable ul {
+ margin: 20px 0 36px 0;
+ line-height: 1.6;
+ letter-spacing: 0.05rem;
+}
+.bs-main-contents ul:first-child,
+.bge-contents ul:first-child,
+.cke_editable ul:first-child {
+ margin-top: 0;
+}
+.bs-main-contents ul li,
+.bge-contents ul li,
+.cke_editable ul li {
+ list-style-position: inside;
+ position: relative;
+ padding: 0 0 0 25px;
+ margin: 0.5em 0 0.5em 0;
+ list-style-type: none;
+ overflow: hidden;
+ word-break: break-word;
+}
+.bs-main-contents ul li a,
+.bge-contents ul li a,
+.cke_editable ul li a {
+ zoom: 1;
+}
+.bs-main-contents ul li:before,
+.bge-contents ul li:before,
+.cke_editable ul li:before {
+ display: block;
+ content: "";
+ position: absolute;
+ top: 9px;
+ left: 1px;
+ width: 6px;
+ height: 6px;
+ background: #181818;
+ border-radius: 50%;
+}
+.bs-main-contents ul ul,
+.bge-contents ul ul,
+.cke_editable ul ul {
+ margin: 0 0 0 1.8em;
+}
+.bs-main-contents ul ul:first-child,
+.bge-contents ul ul:first-child,
+.cke_editable ul ul:first-child {
+ margin-top: 0;
+}
+.bs-main-contents ol,
+.bge-contents ol,
+.cke_editable ol {
+ margin: 20px 0 36px 1.8em;
+ line-height: 1.6;
+ letter-spacing: 0.05rem;
+}
+.bs-main-contents ol ol,
+.bge-contents ol ol,
+.cke_editable ol ol {
+ margin: 20px;
+}
+.bs-main-contents ol li,
+.bge-contents ol li,
+.cke_editable ol li {
+ list-style-type: decimal-leading-zero;
+ position: relative;
+ padding: 0 0 0 0;
+ margin: 0.5em 0 0.5em 0;
+ line-height: 1.6;
+}
+.bs-main-contents p,
+.bge-contents p,
+.cke_editable p {
+ margin: 1em 0;
+ letter-spacing: 0.05rem;
+ margin-bottom: 20px;
+ line-height: 2.3;
+}
+.bs-main-contents table,
+.bge-contents table,
+.cke_editable table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ table-layout: fixed;
+ width: 100%;
+ border-left: 1px solid #e1e1e1;
+ border-right: 1px solid #e1e1e1;
+ border-bottom: 1px solid #e1e1e1;
+ margin: 20px 0 20px 0;
+}
+@media screen and (max-width: 768px) {
+ .bs-main-contents table,
+ .bge-contents table,
+ .cke_editable table {
+ width: 100%;
+ display: block;
+ }
+}
+.bs-main-contents table:first-child,
+.bge-contents table:first-child,
+.cke_editable table:first-child {
+ margin-top: 0;
+}
+.bs-main-contents table caption,
+.bge-contents table caption,
+.cke_editable table caption {
+ font-weight: bold;
+ text-align: left;
+}
+@media screen and (max-width: 768px) {
+ .bs-main-contents table caption,
+ .bge-contents table caption,
+ .cke_editable table caption {
+ display: block;
+ }
+}
+@media screen and (max-width: 768px) {
+ .bs-main-contents table tbody,
+ .bs-main-contents table tfoot,
+ .bge-contents table tbody,
+ .bge-contents table tfoot,
+ .cke_editable table tbody,
+ .cke_editable table tfoot {
+ display: block;
+ }
+}
+.bs-main-contents table tr,
+.bge-contents table tr,
+.cke_editable table tr {
+ border-top: 1px solid #e1e1e1;
+}
+@media screen and (max-width: 768px) {
+ .bs-main-contents table tr,
+ .bge-contents table tr,
+ .cke_editable table tr {
+ display: block;
+ margin-top: -1px;
+ }
+}
+.bs-main-contents table tr:nth-child(odd) td,
+.bge-contents table tr:nth-child(odd) td,
+.cke_editable table tr:nth-child(odd) td {
+ background: #fff;
+}
+.bs-main-contents table tr th,
+.bs-main-contents table tr td,
+.bge-contents table tr th,
+.bge-contents table tr td,
+.cke_editable table tr th,
+.cke_editable table tr td {
+ text-align: left;
+ padding: 26px 24px;
+ border-left: 1px solid #e1e1e1;
+}
+@media screen and (max-width: 768px) {
+ .bs-main-contents table tr th,
+ .bs-main-contents table tr td,
+ .bge-contents table tr th,
+ .bge-contents table tr td,
+ .cke_editable table tr th,
+ .cke_editable table tr td {
+ width: auto;
+ display: block;
+ }
+}
+.bs-main-contents table tr th,
+.bge-contents table tr th,
+.cke_editable table tr th {
+ font-weight: bold;
+ font-family: "SF Pro JP", "SF Pro Text", "SF Pro Icons", "Hiragino Kaku Gothic Pro", "ヒラギノ角ゴ Pro W3", "メイリオ", "Meiryo", "MS Pゴシック", "Helvetica Neue", "Helvetica", "Arial", "sans-serif";
+ background: #f3f3f3;
+}
+@media screen and (max-width: 768px) {
+ .bs-main-contents table tr th,
+ .bge-contents table tr th,
+ .cke_editable table tr th {
+ border-bottom: none;
+ }
+}
+.bs-main-contents table tr td,
+.bge-contents table tr td,
+.cke_editable table tr td {
+ font-weight: normal;
+}
+.bs-main-contents table tr td ul,
+.bge-contents table tr td ul,
+.cke_editable table tr td ul {
+ margin: 0;
+ padding: 0;
+}
+.bs-main-contents fieldset,
+.bge-contents fieldset,
+.cke_editable fieldset {
+ border: 0;
+}
+.bs-main-contents img,
+.bge-contents img,
+.cke_editable img {
+ border: 0;
+ margin: auto;
+}
+.bs-main-contents address, .bs-main-contents button, .bs-main-contents caption, .bs-main-contents cite, .bs-main-contents code, .bs-main-contents dfn, .bs-main-contents em, .bs-main-contents input, .bs-main-contents optgroup, .bs-main-contents option, .bs-main-contents select, .bs-main-contents strong, .bs-main-contents textarea, .bs-main-contents th, .bs-main-contents var,
+.bge-contents address,
+.bge-contents button,
+.bge-contents caption,
+.bge-contents cite,
+.bge-contents code,
+.bge-contents dfn,
+.bge-contents em,
+.bge-contents input,
+.bge-contents optgroup,
+.bge-contents option,
+.bge-contents select,
+.bge-contents strong,
+.bge-contents textarea,
+.bge-contents th,
+.bge-contents var,
+.cke_editable address,
+.cke_editable button,
+.cke_editable caption,
+.cke_editable cite,
+.cke_editable code,
+.cke_editable dfn,
+.cke_editable em,
+.cke_editable input,
+.cke_editable optgroup,
+.cke_editable option,
+.cke_editable select,
+.cke_editable strong,
+.cke_editable textarea,
+.cke_editable th,
+.cke_editable var {
+ font: inherit;
+}
+.bs-main-contents small,
+.bge-contents small,
+.cke_editable small {
+ color: #666;
+}
+.bs-main-contents del, .bs-main-contents ins,
+.bge-contents del,
+.bge-contents ins,
+.cke_editable del,
+.cke_editable ins {
+ text-decoration: none;
+}
+.bs-main-contents a:link, .bs-main-contents a:visited,
+.bge-contents a:link,
+.bge-contents a:visited,
+.cke_editable a:link,
+.cke_editable a:visited {
+ color: #2b7bb9;
+}
+.bs-main-contents a:hover,
+.bge-contents a:hover,
+.cke_editable a:hover {
+ text-decoration: none;
+}
+.bs-main-contents caption, .bs-main-contents th,
+.bge-contents caption,
+.bge-contents th,
+.cke_editable caption,
+.cke_editable th {
+ text-align: left;
+}
+.bs-main-contents q:before, .bs-main-contents q:after,
+.bge-contents q:before,
+.bge-contents q:after,
+.cke_editable q:before,
+.cke_editable q:after {
+ content: "";
+}
+.bs-main-contents abbr, .bs-main-contents acronym,
+.bge-contents abbr,
+.bge-contents acronym,
+.cke_editable abbr,
+.cke_editable acronym {
+ border: 0;
+ font-variant: normal;
+}
+.bs-main-contents sub,
+.bge-contents sub,
+.cke_editable sub {
+ font-size: 0.8em;
+ font-weight: normal;
+ font-style: normal;
+ text-decoration: none;
+ vertical-align: sub;
+}
+.bs-main-contents sup,
+.bge-contents sup,
+.cke_editable sup {
+ font-size: 0.8em;
+ font-weight: normal;
+ font-style: normal;
+ text-decoration: none;
+ vertical-align: super;
+}
+.bs-main-contents legend,
+.bge-contents legend,
+.cke_editable legend {
+ color: #000;
+}
+.bs-main-contents pre,
+.bge-contents pre,
+.cke_editable pre {
+ background-color: #F3F3F3;
+ text-align: left;
+ padding: 10px 20px;
+ margin-bottom: 20px;
+ overflow: auto;
+ border: 1px solid #E2E2E2;
+}
+.bs-main-contents blockquote,
+.bge-contents blockquote,
+.cke_editable blockquote {
+ position: relative;
+ margin: 1em 0;
+ padding: 1px 2.5em;
+ border-radius: 5px;
+ background: none;
+ border: 2px solid #ccc;
+ overflow: hidden;
+ color: #888;
+ font-size: 0.9em;
+}
+.bs-main-contents blockquote:first-child,
+.bge-contents blockquote:first-child,
+.cke_editable blockquote:first-child {
+ margin-top: 0;
+}
+.bs-main-contents blockquote::before,
+.bge-contents blockquote::before,
+.cke_editable blockquote::before {
+ content: "“";
+ display: block;
+ font-family: serif;
+ position: absolute;
+ top: 0.3em;
+ left: 0.25em;
+ z-index: 0;
+ color: #ccc;
+ font-size: 3em;
+}
+.bs-main-contents blockquote::after,
+.bge-contents blockquote::after,
+.cke_editable blockquote::after {
+ content: "”";
+ display: block;
+ font-family: serif;
+ position: absolute;
+ bottom: -0.3em;
+ right: 0.25em;
+ z-index: 0;
+ color: #ccc;
+ font-size: 3em;
+}
+/* Form Parts
+----------------------------------------------- */
+.bs-main-contents form,
+.bge-contents form,
+.cke_editable form,
+.bs-sub-contents form {
+ display: inline;
+}
+.bs-main-contents input, .bs-main-contents textarea, .bs-main-contents select, .bs-main-contents option,
+.bge-contents input,
+.bge-contents textarea,
+.bge-contents select,
+.bge-contents option,
+.cke_editable input,
+.cke_editable textarea,
+.cke_editable select,
+.cke_editable option,
+.bs-sub-contents input,
+.bs-sub-contents textarea,
+.bs-sub-contents select,
+.bs-sub-contents option {
+ font-family: "SF Pro JP", "SF Pro Text", "SF Pro Icons", "Hiragino Kaku Gothic Pro", "ヒラギノ角ゴ Pro W3", "メイリオ", "Meiryo", "MS Pゴシック", "Helvetica Neue", "Helvetica", "Arial", "sans-serif";
+}
+.bs-main-contents input[type=password],
+.bs-main-contents input[type=text],
+.bs-main-contents input[type=email],
+.bs-main-contents input[type=tel],
+.bs-main-contents input[type=number],
+.bs-main-contents textarea,
+.bs-main-contents select,
+.bge-contents input[type=password],
+.bge-contents input[type=text],
+.bge-contents input[type=email],
+.bge-contents input[type=tel],
+.bge-contents input[type=number],
+.bge-contents textarea,
+.bge-contents select,
+.cke_editable input[type=password],
+.cke_editable input[type=text],
+.cke_editable input[type=email],
+.cke_editable input[type=tel],
+.cke_editable input[type=number],
+.cke_editable textarea,
+.cke_editable select,
+.bs-sub-contents input[type=password],
+.bs-sub-contents input[type=text],
+.bs-sub-contents input[type=email],
+.bs-sub-contents input[type=tel],
+.bs-sub-contents input[type=number],
+.bs-sub-contents textarea,
+.bs-sub-contents select {
+ margin: 3px 2px;
+ padding: 8px 10px;
+ border: 1px solid #ccc;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+.bs-main-contents input[type=checkbox],
+.bge-contents input[type=checkbox],
+.cke_editable input[type=checkbox],
+.bs-sub-contents input[type=checkbox] {
+ vertical-align: middle;
+}
+.bs-main-contents input[type=radio], .bs-main-contents input[type=checkbox],
+.bge-contents input[type=radio],
+.bge-contents input[type=checkbox],
+.cke_editable input[type=radio],
+.cke_editable input[type=checkbox],
+.bs-sub-contents input[type=radio],
+.bs-sub-contents input[type=checkbox] {
+ margin-left: 5px;
+ margin-right: 5px;
+}
+.bs-main-contents input[type=submit], .bs-main-contents input[type=reset], .bs-main-contents input[type=button],
+.bge-contents input[type=submit],
+.bge-contents input[type=reset],
+.bge-contents input[type=button],
+.cke_editable input[type=submit],
+.cke_editable input[type=reset],
+.cke_editable input[type=button],
+.bs-sub-contents input[type=submit],
+.bs-sub-contents input[type=reset],
+.bs-sub-contents input[type=button] {
+ margin: 3px 2px;
+ font-family: "SF Pro JP", "SF Pro Text", "SF Pro Icons", "Hiragino Kaku Gothic Pro", "ヒラギノ角ゴ Pro W3", "メイリオ", "Meiryo", "MS Pゴシック", "Helvetica Neue", "Helvetica", "Arial", "sans-serif";
+}
+.bs-main-contents input[type=password], .bs-main-contents input[type=text], .bs-main-contents input[type=email], .bs-main-contents input[type=tel], .bs-main-contents input[type=number],
+.bge-contents input[type=password],
+.bge-contents input[type=text],
+.bge-contents input[type=email],
+.bge-contents input[type=tel],
+.bge-contents input[type=number],
+.cke_editable input[type=password],
+.cke_editable input[type=text],
+.cke_editable input[type=email],
+.cke_editable input[type=tel],
+.cke_editable input[type=number],
+.bs-sub-contents input[type=password],
+.bs-sub-contents input[type=text],
+.bs-sub-contents input[type=email],
+.bs-sub-contents input[type=tel],
+.bs-sub-contents input[type=number] {
+ font-size: 1em;
+}
+.bs-main-contents input[type=password]::placeholder, .bs-main-contents input[type=text]::placeholder, .bs-main-contents input[type=email]::placeholder, .bs-main-contents input[type=tel]::placeholder, .bs-main-contents input[type=number]::placeholder,
+.bge-contents input[type=password]::placeholder,
+.bge-contents input[type=text]::placeholder,
+.bge-contents input[type=email]::placeholder,
+.bge-contents input[type=tel]::placeholder,
+.bge-contents input[type=number]::placeholder,
+.cke_editable input[type=password]::placeholder,
+.cke_editable input[type=text]::placeholder,
+.cke_editable input[type=email]::placeholder,
+.cke_editable input[type=tel]::placeholder,
+.cke_editable input[type=number]::placeholder,
+.bs-sub-contents input[type=password]::placeholder,
+.bs-sub-contents input[type=text]::placeholder,
+.bs-sub-contents input[type=email]::placeholder,
+.bs-sub-contents input[type=tel]::placeholder,
+.bs-sub-contents input[type=number]::placeholder {
+ color: #ccc;
+}
+.bs-main-contents input:active, .bs-main-contents input:focus,
+.bge-contents input:active,
+.bge-contents input:focus,
+.cke_editable input:active,
+.cke_editable input:focus,
+.bs-sub-contents input:active,
+.bs-sub-contents input:focus {
+ box-shadow: 0 0 5px 1px #fa9696;
+ outline: none;
+}
+.bs-main-contents textarea,
+.bge-contents textarea,
+.cke_editable textarea,
+.bs-sub-contents textarea {
+ width: 95%;
+ font-size: 1em;
+ padding: 3px 3px;
+}
+.bs-main-contents textarea:active, .bs-main-contents textarea:focus,
+.bge-contents textarea:active,
+.bge-contents textarea:focus,
+.cke_editable textarea:active,
+.cke_editable textarea:focus,
+.bs-sub-contents textarea:active,
+.bs-sub-contents textarea:focus {
+ box-shadow: 0 0 5px 1px #fa9696;
+ outline: none;
+}
+.bs-main-contents input[type=password], .bs-main-contents input[type=text], .bs-main-contents input[type=email], .bs-main-contents input[type=tel], .bs-main-contents input[type=number],
+.bge-contents input[type=password],
+.bge-contents input[type=text],
+.bge-contents input[type=email],
+.bge-contents input[type=tel],
+.bge-contents input[type=number],
+.cke_editable input[type=password],
+.cke_editable input[type=text],
+.cke_editable input[type=email],
+.cke_editable input[type=tel],
+.cke_editable input[type=number],
+.bs-sub-contents input[type=password],
+.bs-sub-contents input[type=text],
+.bs-sub-contents input[type=email],
+.bs-sub-contents input[type=tel],
+.bs-sub-contents input[type=number] {
+ line-height: 1em;
+}
+.bs-main-contents select,
+.bge-contents select,
+.cke_editable select,
+.bs-sub-contents select {
+ font-size: 1em;
+ height: 2.6em;
+ padding: 10px 8px;
+}
+.bs-main-contents select:active, .bs-main-contents select:focus,
+.bge-contents select:active,
+.bge-contents select:focus,
+.cke_editable select:active,
+.cke_editable select:focus,
+.bs-sub-contents select:active,
+.bs-sub-contents select:focus {
+ box-shadow: 0 0 5px 1px #fa9696;
+ outline: none;
+}
+.bs-main-contents optgroup option,
+.bge-contents optgroup option,
+.cke_editable optgroup option,
+.bs-sub-contents optgroup option {
+ padding-left: 20px;
+}
+/**
+ * 変数
+ */
+/** ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- *
+ *
+ * フォントの定義
+ * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ *
+ * ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- **/
+@font-face {
+ font-family: FontAwesome;
+ src: url("../fonts/fontawesome-webfont.eot?v=4.6.3");
+ src: url("../fonts/fontawesome-webfont.eot?#iefix&v=4.6.3") format("embedded-opentype"), url("../fonts/fontawesome-webfont.woff2?v=4.6.3") format("woff2"), url("../fonts/fontawesome-webfont.woff?v=4.6.3") format("woff"), url("../fonts/fontawesome-webfont.ttf?v=4.6.3") format("truetype"), url("../fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular") format("svg");
+ font-weight: normal;
+ font-style: normal;
+}
+/** ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- *
+ *
+ * マルチカラムブロックのレイアウト
+ *
+ * ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- **/
+/**
+ * BurgerEditor StyleSheet Style
+ *
+ * bc-front テーマ側でコンパイルした際は、bge_style.css を
+ * BcThemeSample テーマ側にコピーする必要がある
+ */
+.bgt-box__caption {
+ text-align: left;
+ font-weight: normal;
+ padding: 3px;
+ background: none;
+ font-size: 0.8em;
+}
+.bgt-btn {
+ appearance: none;
+ display: inline-block;
+ vertical-align: middle;
+ padding: 12px 10px;
+ border-width: 1px;
+ border-style: solid;
+ background: #fff;
+ text-decoration: none;
+ min-width: 280px;
+ border-radius: 2px;
+}
+.bgt-btn:active, .bgt-btn:focus {
+ box-shadow: 0 0 10px 0 #0570c7, 0 0 10px 0 #fff;
+}
+.bgt-btn--link,
+[data-bgt-button-kind=link] .bgt-btn {
+ color: #333;
+ border-color: #ccc;
+ background: #fff;
+}
+.bgt-btn--link:hover, .bgt-btn--link:active, .bgt-btn--link:focus,
+[data-bgt-button-kind=link] .bgt-btn:hover,
+[data-bgt-button-kind=link] .bgt-btn:active,
+[data-bgt-button-kind=link] .bgt-btn:focus {
+ background: #e9e9e9;
+}
+.bgt-btn--em,
+[data-bgt-button-kind=em] .bgt-btn {
+ font-weight: bold;
+ color: #fff;
+ border-color: #333;
+ background: #333;
+}
+.bgt-btn--em:hover, .bgt-btn--em:active, .bgt-btn--em:focus,
+[data-bgt-button-kind=em] .bgt-btn:hover,
+[data-bgt-button-kind=em] .bgt-btn:active,
+[data-bgt-button-kind=em] .bgt-btn:focus {
+ background: #555;
+}
+.bgt-btn--external,
+[data-bgt-button-kind=external] .bgt-btn {
+ color: #333;
+ border-color: #ccc;
+ background: #fff;
+}
+.bgt-btn--external:hover, .bgt-btn--external:active, .bgt-btn--external:focus,
+[data-bgt-button-kind=external] .bgt-btn:hover,
+[data-bgt-button-kind=external] .bgt-btn:active,
+[data-bgt-button-kind=external] .bgt-btn:focus {
+ background: #e9e9e9;
+}
+.bgt-btn--external::after,
+[data-bgt-button-kind=external] .bgt-btn::after {
+ font-family: FontAwesome, serif;
+ speak: none;
+ font-style: normal;
+ font-weight: normal;
+ font-variant: normal;
+ text-transform: none;
+ text-rendering: auto;
+ line-height: 1;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ content: "\f08e";
+ font-size: 1em;
+ color: #999;
+ vertical-align: middle;
+}
+.bgt-btn--back,
+[data-bgt-button-kind=back] .bgt-btn {
+ color: #333;
+ border-color: #ddd;
+ background: #ddd;
+}
+.bgt-btn--back:hover, .bgt-btn--back:active, .bgt-btn--back:focus,
+[data-bgt-button-kind=back] .bgt-btn:hover,
+[data-bgt-button-kind=back] .bgt-btn:active,
+[data-bgt-button-kind=back] .bgt-btn:focus {
+ background: #e9e9e9;
+}
+.bgt-btn--back span,
+[data-bgt-button-kind=back] .bgt-btn span {
+ display: inline-block;
+ vertical-align: middle;
+}
+.bgt-btn--back::before,
+[data-bgt-button-kind=back] .bgt-btn::before {
+ font-family: FontAwesome, serif;
+ speak: none;
+ font-style: normal;
+ font-weight: normal;
+ font-variant: normal;
+ text-transform: none;
+ text-rendering: auto;
+ line-height: 1;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ content: "\f053";
+ font-size: 1em;
+ margin-top: -2px;
+ display: inline-block;
+ vertical-align: middle;
+}
+.bgt-hr {
+ margin: 0 auto;
+}
+[data-bgt-hr-kind=dashed] .bgt-hr {
+ height: 0;
+ border: none;
+ background: none;
+ border-bottom: 2px dashed currentColor;
+}
+.bgt-hr--bold,
+[data-bgt-hr-kind=bold] .bgt-hr {
+ height: 5px;
+}
+.bgt-hr--narrow,
+[data-bgt-hr-kind=narrow] .bgt-hr {
+ height: 1px;
+}
+.bgt-hr--short,
+[data-bgt-hr-kind=short] .bgt-hr {
+ width: 60%;
+ height: 1px;
+}
+.bgt-download-file__link {
+ color: #333;
+ text-align: left;
+ font-size: 1.08em;
+ font-weight: bold;
+ display: inline-block;
+ padding: 0.7em 1em;
+ box-sizing: border-box;
+ border: 1px solid #ccc;
+ border-radius: 3px;
+ background-color: #fff;
+ line-height: 1;
+ text-decoration: none;
+}
+.bgt-download-file__link:hover {
+ background-color: #eee;
+}
+.bgt-download-file__link:active, .bgt-download-file__link:focus {
+ box-shadow: 0 0 5px 1px #0570c7;
+ outline: none;
+}
+.bgt-link__size {
+ color: #808080;
+ font-size: 0.8em;
+ font-weight: normal;
+}
+@media screen and (max-width: 768px) {
+ .bgt-google-maps-link {
+ margin-top: 10px;
+ padding: 1em;
+ text-decoration: none;
+ color: #333;
+ border: solid 1px #999;
+ border-radius: 3px;
+ text-align: center;
+ }
+ .bgt-google-maps-link span {
+ display: inline-block;
+ vertical-align: middle;
+ }
+ .bgt-google-maps-link::after {
+ font-family: FontAwesome, serif;
+ speak: none;
+ font-style: normal;
+ font-weight: normal;
+ font-variant: normal;
+ text-transform: none;
+ text-rendering: auto;
+ line-height: 1;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ content: "\f08e";
+ font-size: 1em;
+ vertical-align: middle;
+ }
+}
+[data-bgt=gallery] .bgt-gallery {
+ padding-top: 54%;
+}
+[data-bgt=gallery] .bgt-gallery:hover [data-bgt=gallery] .bgt-gallery-ctrl {
+ opacity: 1;
+}
+[data-bgt=gallery] .bgt-gallery__img img {
+ object-fit: cover;
+}
+[data-bgt=gallery] .bgt-gallery__caption {
+ color: #fff;
+ background: rgba(0, 0, 0, 0.6);
+ padding: 0.7em 1em;
+ text-align: center;
+}
+[data-bgt=gallery] .bgt-gallery-ctrl {
+ top: 50%;
+ transition: opacity 200ms ease-in;
+}
+[data-bgt=gallery] .bgt-gallery-ctrl__prev, [data-bgt=gallery] .bgt-gallery-ctrl__next {
+ display: block;
+ appearance: none;
+ margin: -20px 0 0;
+ padding: 0;
+ background: none;
+ border: none;
+ transform-origin: center center;
+}
+[data-bgt=gallery] .bgt-gallery-ctrl__prev:hover, [data-bgt=gallery] .bgt-gallery-ctrl__next:hover {
+ opacity: 0.5;
+}
+[data-bgt=gallery] .bgt-gallery-ctrl__prev:focus, [data-bgt=gallery] .bgt-gallery-ctrl__next:focus {
+ outline: none;
+}
+[data-bgt=gallery] .bgt-gallery-ctrl__prev span, [data-bgt=gallery] .bgt-gallery-ctrl__next span {
+ display: block;
+ overflow: hidden;
+ width: 0;
+ height: 0;
+}
+[data-bgt=gallery] .bgt-gallery-ctrl__prev::after, [data-bgt=gallery] .bgt-gallery-ctrl__next::after {
+ content: "";
+ display: block;
+ width: 40px;
+ height: 40px;
+ border: solid #fff;
+ border-width: 5px 5px 0 0;
+}
+[data-bgt=gallery] .bgt-gallery-ctrl__prev {
+ left: 20px;
+ transform: rotate(-135deg);
+}
+[data-bgt=gallery] .bgt-gallery-ctrl__next {
+ right: 20px;
+ transform: rotate(45deg);
+}
+[data-bgt=gallery] [data-gallery-marker=thumbs] + .bgt-gallery-marker {
+ margin-top: 10px;
+}
+[data-bgt=gallery] [data-gallery-marker=thumbs] + .bgt-gallery-marker li {
+ margin: 0 5px;
+ width: 60px;
+ height: 60px;
+}
+[data-bgt=gallery] [data-gallery-marker=thumbs] + .bgt-gallery-marker li::before {
+ display: none;
+}
+[data-bgt=gallery] [data-gallery-marker=dot] + .bgt-gallery-marker {
+ margin-top: 10px;
+}
+[data-bgt=gallery] [data-gallery-marker=dot] + .bgt-gallery-marker li {
+ margin: 0 2px;
+ width: 10px;
+ height: 10px;
+ background-color: #999;
+ border-radius: 100%;
+}
+[data-bgt=gallery] [data-gallery-marker=dot] + .bgt-gallery-marker li.current {
+ background-color: #000;
+}
+/* デバイス依存汎用クラス */
+.pc-only {
+ display: block;
+}
+@media screen and (max-width: 768px) {
+ .pc-only {
+ display: none;
+ }
+}
+.sp-only {
+ display: none;
+}
+@media screen and (max-width: 768px) {
+ .sp-only {
+ display: block;
+ }
+}
+/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNzcy9iZ2Vfc3R5bGUuY3NzIiwiY3NzL2JnZV9zdHlsZS5zY3NzIiwiY3NzL2NvbW1vbi9fZWRpdG9yLnNjc3MiLCJjc3MvY29tbW9uL19iZ2Vfc2V0dGluZy5zY3NzIiwiY3NzL2NvbW1vbi9fYmdlLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCO0FDQ2hCOzs7Ozs7OztFQUFBO0FBVUE7OztFQUFBO0FDWEE7O0VBQUE7QUFNQTtFQUNFLGFBQUE7QUZZRjtBRVRBO2lEQUFBO0FBR0E7OztFQUdFLCtGQUFBO0VBQ0EsV0FBQTtBRldGO0FFVEU7OztFQUNFLGVBQUE7RUFDQSxtQkFBQTtFQUNBLGlCQUFBO0FGYUo7QUVWRTs7O0VBQ0Usd0xBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBQ0EsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxnQkFBQTtBRmNKO0FFYkk7OztFQUNFLGFBQUE7QUZpQk47QUViRTs7O0VBQ0UscUJBQUE7RUFDQSx1QkFBQTtFQUNBLGVBQUE7RUFDQSxnQkFBQTtFQUNBLG1CQUFBO0VBQ0EsbUJBQUE7RUFDQSxtQkFBQTtFQUNBLGdCQUFBO0FGaUJKO0FFZkk7OztFQUNFLGFBQUE7QUZtQk47QUVmRTs7O0VBQ0UsOEJBQUE7RUFDQSxlQUFBO0VBQ0Esb0JBQUE7RUFDQSxpQkFBQTtFQUNBLGVBQUE7RUFDQSxxQkFBQTtFQUNBLGdCQUFBO0VBQ0Esa0JBQUE7QUZtQko7QUVqQkk7OztFQUNFLGFBQUE7QUZxQk47QUVqQkU7OztFQUNFLGdCQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtFQUNBLGFBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0FGcUJKO0FFbkJJOzs7RUFDRSxhQUFBO0FGdUJOO0FFbkJFOzs7RUFDRSxjQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtFQUNBLGFBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxn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QUpnc0JSO0FJOXJCUTtFQUNFLHNCQUFBO0FKZ3NCVjtBSXhyQkEsZ0JBQUE7QUFDQTtFQUNFLGNBQUE7QUoyckJGO0FJenJCRTtFQUhGO0lBSUksYUFBQTtFSjRyQkY7QUFDRjtBSXpyQkE7RUFDRSxhQUFBO0FKNHJCRjtBSTFyQkU7RUFIRjtJQUlJLGNBQUE7RUo2ckJGO0FBQ0YiLCJmaWxlIjoiY3NzL2JnZV9zdHlsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIGJhc2VyQ01TIDogIEJhc2VkIFdlYnNpdGUgRGV2ZWxvcG1lbnQgUHJvamVjdCA8aHR0cHM6Ly9iYXNlcmNtcy5uZXQ+XG4gKiBDb3B5cmlnaHQgKGMpIE5QTyBiYXNlciBmb3VuZGF0aW9uIDxodHRwczovL2Jhc2VyZm91bmRhdGlvbi5vcmcvPlxuICpcbiAqIEBjb3B5cmlnaHQgICAgIENvcHlyaWdodCAoYykgTlBPIGJhc2VyIGZvdW5kYXRpb25cbiAqIEBsaW5rICAgICAgICAgIGh0dHBzOi8vYmFzZXJjbXMubmV0IGJhc2VyQ01TIFByb2plY3RcbiAqIEBzaW5jZSAgICAgICAgIDUuMC4wXG4gKiBAbGljZW5zZSAgICAgICBodHRwczovL2Jhc2VyY21zLm5ldC9saWNlbnNlL2luZGV4Lmh0bWwgTUlUIExpY2Vuc2VcbiAqL1xuLyoqXG4gKiDjg5Djg7zjgqzjg7zjgqjjg4fjgqPjgr/jg7zjgrnjgr/jgqTjg6tcbiAqIOeuoeeQhueUu+mdouOBp+OCguWRvOOBs+WHuuOBleOCjOOCi1xuICovXG4vKipcbiAqIOOCqOODh+OCo+OCv+ODvOeUqENTU1xuICovXG4uY2tlX2VkaXRhYmxlIHtcbiAgcGFkZGluZzogMTVweDtcbn1cblxuLyogRWRpdG9yIFBhcnRzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLmJzLW1haW4tY29udGVudHMsXG4uYmdlLWNvbnRlbnRzLFxuLmNrZV9lZGl0YWJsZSB7XG4gIGZvbnQtZmFtaWx5OiBBcmlhbCwgVmVyZGFuYSwgXCLmuLjjgrTjgrfjg4Pjgq9cIiwgWXVHb3RoaWMsIFwiSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvTlwiLCBNZWlyeW8sIHNhbnMtc2VyaWY7XG4gIGNvbG9yOiAjMDAwO1xufVxuLmJzLW1haW4tY29udGVudHMgaDEsXG4uYmdlLWNvbnRlbnRzIGgxLFxuLmNrZV9lZGl0YWJsZSBoMSB7XG4gIGZvbnQtc2l6ZTogNDBweDtcbiAgbWFyZ2luLWJvdHRvbTogNDBweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4uYnMtbWFpbi1jb250ZW50cyBoMixcbi5iZ2UtY29udGVudHMgaDIsXG4uY2tlX2VkaXRhYmxlIGgyIHtcbiAgZm9udC1mYW1pbHk6IFwiU0YgUHJvIEpQXCIsIFwiU0YgUHJvIFRleHRcIiwgXCJTRiBQcm8gSWNvbnNcIiwgXCJIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm9cIiwgXCLjg5Ljg6njgq7jg47op5LjgrQgUHJvIFczXCIsIFwi44Oh44Kk44Oq44KqXCIsIFwiTWVpcnlvXCIsIFwi77yt77yzIO+8sOOCtOOCt+ODg+OCr1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIFwiSGVsdmV0aWNhXCIsIFwiQXJpYWxcIiwgXCJzYW5zLXNlcmlmXCI7XG4gIGxldHRlci1zcGFjaW5nOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBmb250LXNpemU6IDIuMmVtO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgbWFyZ2luOiAwLjZlbSAwO1xuICBwYWRkaW5nOiAwLjNlbSAwO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBiYWNrZ3JvdW5kOiBub25lO1xufVxuLmJzLW1haW4tY29udGVudHMgaDI6Zmlyc3QtY2hpbGQsXG4uYmdlLWNvbnRlbnRzIGgyOmZpcnN0LWNoaWxkLFxuLmNrZV9lZGl0YWJsZSBoMjpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4uYnMtbWFpbi1jb250ZW50cyBoMyxcbi5iZ2UtY29udGVudHMgaDMsXG4uY2tlX2VkaXRhYmxlIGgzIHtcbiAgbWFyZ2luOiA1NnB4IDAgMjBweCAwO1xuICBwYWRkaW5nOiAxM3B4IDI4cHggMTJweDtcbiAgZm9udC1zaXplOiAyMXB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICBsaW5lLWhlaWdodDogNDguM3B4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmJzLW1haW4tY29udGVudHMgaDM6Zmlyc3QtY2hpbGQsXG4uYmdlLWNvbnRlbnRzIGgzOmZpcnN0LWNoaWxkLFxuLmNrZV9lZGl0YWJsZSBoMzpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4uYnMtbWFpbi1jb250ZW50cyBoNCxcbi5iZ2UtY29udGVudHMgaDQsXG4uY2tlX2VkaXRhYmxlIGg0IHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4ICNDQ0MgZG90dGVkO1xuICBmb250LXNpemU6IDIycHg7XG4gIHBhZGRpbmctYm90dG9tOiAxMnB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBtYXJnaW46IDUwcHggMCAxN3B4IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGg0OmZpcnN0LWNoaWxkLFxuLmJnZS1jb250ZW50cyBoNDpmaXJzdC1jaGlsZCxcbi5ja2VfZWRpdGFibGUgaDQ6Zmlyc3QtY2hpbGQge1xuICBtYXJnaW4tdG9wOiAwO1xufVxuLmJzLW1haW4tY29udGVudHMgaDUsXG4uYmdlLWNvbnRlbnRzIGg1LFxuLmNrZV9lZGl0YWJsZSBoNSB7XG4gIGZvbnQtc2l6ZTogMS4yZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBsaW5lLWhlaWdodDogMS4yO1xuICBtYXJnaW46IDFlbSAwO1xuICBwYWRkaW5nOiAwLjNlbSAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmJzLW1haW4tY29udGVudHMgaDU6Zmlyc3QtY2hpbGQsXG4uYmdlLWNvbnRlbnRzIGg1OmZpcnN0LWNoaWxkLFxuLmNrZV9lZGl0YWJsZSBoNTpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4uYnMtbWFpbi1jb250ZW50cyBoNixcbi5iZ2UtY29udGVudHMgaDYsXG4uY2tlX2VkaXRhYmxlIGg2IHtcbiAgZm9udC1zaXplOiAxZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBsaW5lLWhlaWdodDogMS4yO1xuICBtYXJnaW46IDFlbSAwO1xuICBib3JkZXI6IG5vbmU7XG4gIHBhZGRpbmc6IDAuM2VtIDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uYnMtbWFpbi1jb250ZW50cyBoNjpmaXJzdC1jaGlsZCxcbi5iZ2UtY29udGVudHMgaDY6Zmlyc3QtY2hpbGQsXG4uY2tlX2VkaXRhYmxlIGg2OmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHN0cm9uZyxcbi5iZ2UtY29udGVudHMgc3Ryb25nLFxuLmNrZV9lZGl0YWJsZSBzdHJvbmcge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4uYnMtbWFpbi1jb250ZW50cyB1LFxuLmJnZS1jb250ZW50cyB1LFxuLmNrZV9lZGl0YWJsZSB1IHtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHMsXG4uYmdlLWNvbnRlbnRzIHMsXG4uY2tlX2VkaXRhYmxlIHMge1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO1xufVxuLmJzLW1haW4tY29udGVudHMgZW0sXG4uYmdlLWNvbnRlbnRzIGVtLFxuLmNrZV9lZGl0YWJsZSBlbSB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cbi5icy1tYWluLWNvbnRlbnRzIGhyLFxuLmJnZS1jb250ZW50cyBocixcbi5ja2VfZWRpdGFibGUgaHIge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxcHg7XG4gIGNvbG9yOiAjZGRkO1xuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgbWFyZ2luOiA1MHB4IGF1dG87XG59XG4uYnMtbWFpbi1jb250ZW50cyBocjpmaXJzdC1jaGlsZCxcbi5iZ2UtY29udGVudHMgaHI6Zmlyc3QtY2hpbGQsXG4uY2tlX2VkaXRhYmxlIGhyOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHVsLFxuLmJnZS1jb250ZW50cyB1bCxcbi5ja2VfZWRpdGFibGUgdWwge1xuICBtYXJnaW46IDIwcHggMCAzNnB4IDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjY7XG4gIGxldHRlci1zcGFjaW5nOiAwLjA1cmVtO1xufVxuLmJzLW1haW4tY29udGVudHMgdWw6Zmlyc3QtY2hpbGQsXG4uYmdlLWNvbnRlbnRzIHVsOmZpcnN0LWNoaWxkLFxuLmNrZV9lZGl0YWJsZSB1bDpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4uYnMtbWFpbi1jb250ZW50cyB1bCBsaSxcbi5iZ2UtY29udGVudHMgdWwgbGksXG4uY2tlX2VkaXRhYmxlIHVsIGxpIHtcbiAgbGlzdC1zdHlsZS1wb3NpdGlvbjogaW5zaWRlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6IDAgMCAwIDI1cHg7XG4gIG1hcmdpbjogMC41ZW0gMCAwLjVlbSAwO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG59XG4uYnMtbWFpbi1jb250ZW50cyB1bCBsaSBhLFxuLmJnZS1jb250ZW50cyB1bCBsaSBhLFxuLmNrZV9lZGl0YWJsZSB1bCBsaSBhIHtcbiAgem9vbTogMTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHVsIGxpOmJlZm9yZSxcbi5iZ2UtY29udGVudHMgdWwgbGk6YmVmb3JlLFxuLmNrZV9lZGl0YWJsZSB1bCBsaTpiZWZvcmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDlweDtcbiAgbGVmdDogMXB4O1xuICB3aWR0aDogNnB4O1xuICBoZWlnaHQ6IDZweDtcbiAgYmFja2dyb3VuZDogIzE4MTgxODtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xufVxuLmJzLW1haW4tY29udGVudHMgdWwgdWwsXG4uYmdlLWNvbnRlbnRzIHVsIHVsLFxuLmNrZV9lZGl0YWJsZSB1bCB1bCB7XG4gIG1hcmdpbjogMCAwIDAgMS44ZW07XG59XG4uYnMtbWFpbi1jb250ZW50cyB1bCB1bDpmaXJzdC1jaGlsZCxcbi5iZ2UtY29udGVudHMgdWwgdWw6Zmlyc3QtY2hpbGQsXG4uY2tlX2VkaXRhYmxlIHVsIHVsOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5icy1tYWluLWNvbnRlbnRzIG9sLFxuLmJnZS1jb250ZW50cyBvbCxcbi5ja2VfZWRpdGFibGUgb2wge1xuICBtYXJnaW46IDIwcHggMCAzNnB4IDEuOGVtO1xuICBsaW5lLWhlaWdodDogMS42O1xuICBsZXR0ZXItc3BhY2luZzogMC4wNXJlbTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIG9sIG9sLFxuLmJnZS1jb250ZW50cyBvbCBvbCxcbi5ja2VfZWRpdGFibGUgb2wgb2wge1xuICBtYXJnaW46IDIwcHg7XG59XG4uYnMtbWFpbi1jb250ZW50cyBvbCBsaSxcbi5iZ2UtY29udGVudHMgb2wgbGksXG4uY2tlX2VkaXRhYmxlIG9sIGxpIHtcbiAgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsLWxlYWRpbmctemVybztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAwIDAgMCAwO1xuICBtYXJnaW46IDAuNWVtIDAgMC41ZW0gMDtcbiAgbGluZS1oZWlnaHQ6IDEuNjtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHAsXG4uYmdlLWNvbnRlbnRzIHAsXG4uY2tlX2VkaXRhYmxlIHAge1xuICBtYXJnaW46IDFlbSAwO1xuICBsZXR0ZXItc3BhY2luZzogMC4wNXJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgbGluZS1oZWlnaHQ6IDIuMztcbn1cbi5icy1tYWluLWNvbnRlbnRzIHRhYmxlLFxuLmJnZS1jb250ZW50cyB0YWJsZSxcbi5ja2VfZWRpdGFibGUgdGFibGUge1xuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICBib3JkZXItc3BhY2luZzogMDtcbiAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2UxZTFlMTtcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2UxZTFlMTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlMWUxZTE7XG4gIG1hcmdpbjogMjBweCAwIDIwcHggMDtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIC5icy1tYWluLWNvbnRlbnRzIHRhYmxlLFxuICAuYmdlLWNvbnRlbnRzIHRhYmxlLFxuICAuY2tlX2VkaXRhYmxlIHRhYmxlIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuLmJzLW1haW4tY29udGVudHMgdGFibGU6Zmlyc3QtY2hpbGQsXG4uYmdlLWNvbnRlbnRzIHRhYmxlOmZpcnN0LWNoaWxkLFxuLmNrZV9lZGl0YWJsZSB0YWJsZTpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4uYnMtbWFpbi1jb250ZW50cyB0YWJsZSBjYXB0aW9uLFxuLmJnZS1jb250ZW50cyB0YWJsZSBjYXB0aW9uLFxuLmNrZV9lZGl0YWJsZSB0YWJsZSBjYXB0aW9uIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkge1xuICAuYnMtbWFpbi1jb250ZW50cyB0YWJsZSBjYXB0aW9uLFxuICAuYmdlLWNvbnRlbnRzIHRhYmxlIGNhcHRpb24sXG4gIC5ja2VfZWRpdGFibGUgdGFibGUgY2FwdGlvbiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIC5icy1tYWluLWNvbnRlbnRzIHRhYmxlIHRib2R5LFxuICAuYnMtbWFpbi1jb250ZW50cyB0YWJsZSB0Zm9vdCxcbiAgLmJnZS1jb250ZW50cyB0YWJsZSB0Ym9keSxcbiAgLmJnZS1jb250ZW50cyB0YWJsZSB0Zm9vdCxcbiAgLmNrZV9lZGl0YWJsZSB0YWJsZSB0Ym9keSxcbiAgLmNrZV9lZGl0YWJsZSB0YWJsZSB0Zm9vdCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cbi5icy1tYWluLWNvbnRlbnRzIHRhYmxlIHRyLFxuLmJnZS1jb250ZW50cyB0YWJsZSB0cixcbi5ja2VfZWRpdGFibGUgdGFibGUgdHIge1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2UxZTFlMTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIC5icy1tYWluLWNvbnRlbnRzIHRhYmxlIHRyLFxuICAuYmdlLWNvbnRlbnRzIHRhYmxlIHRyLFxuICAuY2tlX2VkaXRhYmxlIHRhYmxlIHRyIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tdG9wOiAtMXB4O1xuICB9XG59XG4uYnMtbWFpbi1jb250ZW50cyB0YWJsZSB0cjpudGgtY2hpbGQob2RkKSB0ZCxcbi5iZ2UtY29udGVudHMgdGFibGUgdHI6bnRoLWNoaWxkKG9kZCkgdGQsXG4uY2tlX2VkaXRhYmxlIHRhYmxlIHRyOm50aC1jaGlsZChvZGQpIHRkIHtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHRhYmxlIHRyIHRoLFxuLmJzLW1haW4tY29udGVudHMgdGFibGUgdHIgdGQsXG4uYmdlLWNvbnRlbnRzIHRhYmxlIHRyIHRoLFxuLmJnZS1jb250ZW50cyB0YWJsZSB0ciB0ZCxcbi5ja2VfZWRpdGFibGUgdGFibGUgdHIgdGgsXG4uY2tlX2VkaXRhYmxlIHRhYmxlIHRyIHRkIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgcGFkZGluZzogMjZweCAyNHB4O1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNlMWUxZTE7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkge1xuICAuYnMtbWFpbi1jb250ZW50cyB0YWJsZSB0ciB0aCxcbiAgLmJzLW1haW4tY29udGVudHMgdGFibGUgdHIgdGQsXG4gIC5iZ2UtY29udGVudHMgdGFibGUgdHIgdGgsXG4gIC5iZ2UtY29udGVudHMgdGFibGUgdHIgdGQsXG4gIC5ja2VfZWRpdGFibGUgdGFibGUgdHIgdGgsXG4gIC5ja2VfZWRpdGFibGUgdGFibGUgdHIgdGQge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG4uYnMtbWFpbi1jb250ZW50cyB0YWJsZSB0ciB0aCxcbi5iZ2UtY29udGVudHMgdGFibGUgdHIgdGgsXG4uY2tlX2VkaXRhYmxlIHRhYmxlIHRyIHRoIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGZvbnQtZmFtaWx5OiBcIlNGIFBybyBKUFwiLCBcIlNGIFBybyBUZXh0XCIsIFwiU0YgUHJvIEljb25zXCIsIFwiSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvXCIsIFwi44OS44Op44Ku44OO6KeS44K0IFBybyBXM1wiLCBcIuODoeOCpOODquOCqlwiLCBcIk1laXJ5b1wiLCBcIu+8re+8syDvvLDjgrTjgrfjg4Pjgq9cIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBcIkhlbHZldGljYVwiLCBcIkFyaWFsXCIsIFwic2Fucy1zZXJpZlwiO1xuICBiYWNrZ3JvdW5kOiAjZjNmM2YzO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLmJzLW1haW4tY29udGVudHMgdGFibGUgdHIgdGgsXG4gIC5iZ2UtY29udGVudHMgdGFibGUgdHIgdGgsXG4gIC5ja2VfZWRpdGFibGUgdGFibGUgdHIgdGgge1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gIH1cbn1cbi5icy1tYWluLWNvbnRlbnRzIHRhYmxlIHRyIHRkLFxuLmJnZS1jb250ZW50cyB0YWJsZSB0ciB0ZCxcbi5ja2VfZWRpdGFibGUgdGFibGUgdHIgdGQge1xuICBmb250LXdlaWdodDogbm9ybWFsO1xufVxuLmJzLW1haW4tY29udGVudHMgdGFibGUgdHIgdGQgdWwsXG4uYmdlLWNvbnRlbnRzIHRhYmxlIHRyIHRkIHVsLFxuLmNrZV9lZGl0YWJsZSB0YWJsZSB0ciB0ZCB1bCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGZpZWxkc2V0LFxuLmJnZS1jb250ZW50cyBmaWVsZHNldCxcbi5ja2VfZWRpdGFibGUgZmllbGRzZXQge1xuICBib3JkZXI6IDA7XG59XG4uYnMtbWFpbi1jb250ZW50cyBpbWcsXG4uYmdlLWNvbnRlbnRzIGltZyxcbi5ja2VfZWRpdGFibGUgaW1nIHtcbiAgYm9yZGVyOiAwO1xuICBtYXJnaW46IGF1dG87XG59XG4uYnMtbWFpbi1jb250ZW50cyBhZGRyZXNzLCAuYnMtbWFpbi1jb250ZW50cyBidXR0b24sIC5icy1tYWluLWNvbnRlbnRzIGNhcHRpb24sIC5icy1tYWluLWNvbnRlbnRzIGNpdGUsIC5icy1tYWluLWNvbnRlbnRzIGNvZGUsIC5icy1tYWluLWNvbnRlbnRzIGRmbiwgLmJzLW1haW4tY29udGVudHMgZW0sIC5icy1tYWluLWNvbnRlbnRzIGlucHV0LCAuYnMtbWFpbi1jb250ZW50cyBvcHRncm91cCwgLmJzLW1haW4tY29udGVudHMgb3B0aW9uLCAuYnMtbWFpbi1jb250ZW50cyBzZWxlY3QsIC5icy1tYWluLWNvbnRlbnRzIHN0cm9uZywgLmJzLW1haW4tY29udGVudHMgdGV4dGFyZWEsIC5icy1tYWluLWNvbnRlbnRzIHRoLCAuYnMtbWFpbi1jb250ZW50cyB2YXIsXG4uYmdlLWNvbnRlbnRzIGFkZHJlc3MsXG4uYmdlLWNvbnRlbnRzIGJ1dHRvbixcbi5iZ2UtY29udGVudHMgY2FwdGlvbixcbi5iZ2UtY29udGVudHMgY2l0ZSxcbi5iZ2UtY29udGVudHMgY29kZSxcbi5iZ2UtY29udGVudHMgZGZuLFxuLmJnZS1jb250ZW50cyBlbSxcbi5iZ2UtY29udGVudHMgaW5wdXQsXG4uYmdlLWNvbnRlbnRzIG9wdGdyb3VwLFxuLmJnZS1jb250ZW50cyBvcHRpb24sXG4uYmdlLWNvbnRlbnRzIHNlbGVjdCxcbi5iZ2UtY29udGVudHMgc3Ryb25nLFxuLmJnZS1jb250ZW50cyB0ZXh0YXJlYSxcbi5iZ2UtY29udGVudHMgdGgsXG4uYmdlLWNvbnRlbnRzIHZhcixcbi5ja2VfZWRpdGFibGUgYWRkcmVzcyxcbi5ja2VfZWRpdGFibGUgYnV0dG9uLFxuLmNrZV9lZGl0YWJsZSBjYXB0aW9uLFxuLmNrZV9lZGl0YWJsZSBjaXRlLFxuLmNrZV9lZGl0YWJsZSBjb2RlLFxuLmNrZV9lZGl0YWJsZSBkZm4sXG4uY2tlX2VkaXRhYmxlIGVtLFxuLmNrZV9lZGl0YWJsZSBpbnB1dCxcbi5ja2VfZWRpdGFibGUgb3B0Z3JvdXAsXG4uY2tlX2VkaXRhYmxlIG9wdGlvbixcbi5ja2VfZWRpdGFibGUgc2VsZWN0LFxuLmNrZV9lZGl0YWJsZSBzdHJvbmcsXG4uY2tlX2VkaXRhYmxlIHRleHRhcmVhLFxuLmNrZV9lZGl0YWJsZSB0aCxcbi5ja2VfZWRpdGFibGUgdmFyIHtcbiAgZm9udDogaW5oZXJpdDtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHNtYWxsLFxuLmJnZS1jb250ZW50cyBzbWFsbCxcbi5ja2VfZWRpdGFibGUgc21hbGwge1xuICBjb2xvcjogIzY2Njtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGRlbCwgLmJzLW1haW4tY29udGVudHMgaW5zLFxuLmJnZS1jb250ZW50cyBkZWwsXG4uYmdlLWNvbnRlbnRzIGlucyxcbi5ja2VfZWRpdGFibGUgZGVsLFxuLmNrZV9lZGl0YWJsZSBpbnMge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4uYnMtbWFpbi1jb250ZW50cyBhOmxpbmssIC5icy1tYWluLWNvbnRlbnRzIGE6dmlzaXRlZCxcbi5iZ2UtY29udGVudHMgYTpsaW5rLFxuLmJnZS1jb250ZW50cyBhOnZpc2l0ZWQsXG4uY2tlX2VkaXRhYmxlIGE6bGluayxcbi5ja2VfZWRpdGFibGUgYTp2aXNpdGVkIHtcbiAgY29sb3I6ICMyYjdiYjk7XG59XG4uYnMtbWFpbi1jb250ZW50cyBhOmhvdmVyLFxuLmJnZS1jb250ZW50cyBhOmhvdmVyLFxuLmNrZV9lZGl0YWJsZSBhOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLmJzLW1haW4tY29udGVudHMgY2FwdGlvbiwgLmJzLW1haW4tY29udGVudHMgdGgsXG4uYmdlLWNvbnRlbnRzIGNhcHRpb24sXG4uYmdlLWNvbnRlbnRzIHRoLFxuLmNrZV9lZGl0YWJsZSBjYXB0aW9uLFxuLmNrZV9lZGl0YWJsZSB0aCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4uYnMtbWFpbi1jb250ZW50cyBxOmJlZm9yZSwgLmJzLW1haW4tY29udGVudHMgcTphZnRlcixcbi5iZ2UtY29udGVudHMgcTpiZWZvcmUsXG4uYmdlLWNvbnRlbnRzIHE6YWZ0ZXIsXG4uY2tlX2VkaXRhYmxlIHE6YmVmb3JlLFxuLmNrZV9lZGl0YWJsZSBxOmFmdGVyIHtcbiAgY29udGVudDogXCJcIjtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGFiYnIsIC5icy1tYWluLWNvbnRlbnRzIGFjcm9ueW0sXG4uYmdlLWNvbnRlbnRzIGFiYnIsXG4uYmdlLWNvbnRlbnRzIGFjcm9ueW0sXG4uY2tlX2VkaXRhYmxlIGFiYnIsXG4uY2tlX2VkaXRhYmxlIGFjcm9ueW0ge1xuICBib3JkZXI6IDA7XG4gIGZvbnQtdmFyaWFudDogbm9ybWFsO1xufVxuLmJzLW1haW4tY29udGVudHMgc3ViLFxuLmJnZS1jb250ZW50cyBzdWIsXG4uY2tlX2VkaXRhYmxlIHN1YiB7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB2ZXJ0aWNhbC1hbGlnbjogc3ViO1xufVxuLmJzLW1haW4tY29udGVudHMgc3VwLFxuLmJnZS1jb250ZW50cyBzdXAsXG4uY2tlX2VkaXRhYmxlIHN1cCB7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB2ZXJ0aWNhbC1hbGlnbjogc3VwZXI7XG59XG4uYnMtbWFpbi1jb250ZW50cyBsZWdlbmQsXG4uYmdlLWNvbnRlbnRzIGxlZ2VuZCxcbi5ja2VfZWRpdGFibGUgbGVnZW5kIHtcbiAgY29sb3I6ICMwMDA7XG59XG4uYnMtbWFpbi1jb250ZW50cyBwcmUsXG4uYmdlLWNvbnRlbnRzIHByZSxcbi5ja2VfZWRpdGFibGUgcHJlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0YzRjNGMztcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgcGFkZGluZzogMTBweCAyMHB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBvdmVyZmxvdzogYXV0bztcbiAgYm9yZGVyOiAxcHggc29saWQgI0UyRTJFMjtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGJsb2NrcXVvdGUsXG4uYmdlLWNvbnRlbnRzIGJsb2NrcXVvdGUsXG4uY2tlX2VkaXRhYmxlIGJsb2NrcXVvdGUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbjogMWVtIDA7XG4gIHBhZGRpbmc6IDFweCAyLjVlbTtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBib3JkZXI6IDJweCBzb2xpZCAjY2NjO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjb2xvcjogIzg4ODtcbiAgZm9udC1zaXplOiAwLjllbTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGJsb2NrcXVvdGU6Zmlyc3QtY2hpbGQsXG4uYmdlLWNvbnRlbnRzIGJsb2NrcXVvdGU6Zmlyc3QtY2hpbGQsXG4uY2tlX2VkaXRhYmxlIGJsb2NrcXVvdGU6Zmlyc3QtY2hpbGQge1xuICBtYXJnaW4tdG9wOiAwO1xufVxuLmJzLW1haW4tY29udGVudHMgYmxvY2txdW90ZTo6YmVmb3JlLFxuLmJnZS1jb250ZW50cyBibG9ja3F1b3RlOjpiZWZvcmUsXG4uY2tlX2VkaXRhYmxlIGJsb2NrcXVvdGU6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi4oCcXCI7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LWZhbWlseTogc2VyaWY7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwLjNlbTtcbiAgbGVmdDogMC4yNWVtO1xuICB6LWluZGV4OiAwO1xuICBjb2xvcjogI2NjYztcbiAgZm9udC1zaXplOiAzZW07XG59XG4uYnMtbWFpbi1jb250ZW50cyBibG9ja3F1b3RlOjphZnRlcixcbi5iZ2UtY29udGVudHMgYmxvY2txdW90ZTo6YWZ0ZXIsXG4uY2tlX2VkaXRhYmxlIGJsb2NrcXVvdGU6OmFmdGVyIHtcbiAgY29udGVudDogXCLigJ1cIjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtZmFtaWx5OiBzZXJpZjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IC0wLjNlbTtcbiAgcmlnaHQ6IDAuMjVlbTtcbiAgei1pbmRleDogMDtcbiAgY29sb3I6ICNjY2M7XG4gIGZvbnQtc2l6ZTogM2VtO1xufVxuXG4vKiBGb3JtIFBhcnRzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLmJzLW1haW4tY29udGVudHMgZm9ybSxcbi5iZ2UtY29udGVudHMgZm9ybSxcbi5ja2VfZWRpdGFibGUgZm9ybSxcbi5icy1zdWItY29udGVudHMgZm9ybSB7XG4gIGRpc3BsYXk6IGlubGluZTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGlucHV0LCAuYnMtbWFpbi1jb250ZW50cyB0ZXh0YXJlYSwgLmJzLW1haW4tY29udGVudHMgc2VsZWN0LCAuYnMtbWFpbi1jb250ZW50cyBvcHRpb24sXG4uYmdlLWNvbnRlbnRzIGlucHV0LFxuLmJnZS1jb250ZW50cyB0ZXh0YXJlYSxcbi5iZ2UtY29udGVudHMgc2VsZWN0LFxuLmJnZS1jb250ZW50cyBvcHRpb24sXG4uY2tlX2VkaXRhYmxlIGlucHV0LFxuLmNrZV9lZGl0YWJsZSB0ZXh0YXJlYSxcbi5ja2VfZWRpdGFibGUgc2VsZWN0LFxuLmNrZV9lZGl0YWJsZSBvcHRpb24sXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0LFxuLmJzLXN1Yi1jb250ZW50cyB0ZXh0YXJlYSxcbi5icy1zdWItY29udGVudHMgc2VsZWN0LFxuLmJzLXN1Yi1jb250ZW50cyBvcHRpb24ge1xuICBmb250LWZhbWlseTogXCJTRiBQcm8gSlBcIiwgXCJTRiBQcm8gVGV4dFwiLCBcIlNGIFBybyBJY29uc1wiLCBcIkhpcmFnaW5vIEtha3UgR290aGljIFByb1wiLCBcIuODkuODqeOCruODjuinkuOCtCBQcm8gVzNcIiwgXCLjg6HjgqTjg6rjgqpcIiwgXCJNZWlyeW9cIiwgXCLvvK3vvLMg77yw44K044K344OD44KvXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgXCJIZWx2ZXRpY2FcIiwgXCJBcmlhbFwiLCBcInNhbnMtc2VyaWZcIjtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdLFxuLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT10ZXh0XSxcbi5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9ZW1haWxdLFxuLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT10ZWxdLFxuLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT1udW1iZXJdLFxuLmJzLW1haW4tY29udGVudHMgdGV4dGFyZWEsXG4uYnMtbWFpbi1jb250ZW50cyBzZWxlY3QsXG4uYmdlLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPXRleHRdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPWVtYWlsXSxcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT10ZWxdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPW51bWJlcl0sXG4uYmdlLWNvbnRlbnRzIHRleHRhcmVhLFxuLmJnZS1jb250ZW50cyBzZWxlY3QsXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9cGFzc3dvcmRdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPXRleHRdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPWVtYWlsXSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT10ZWxdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPW51bWJlcl0sXG4uY2tlX2VkaXRhYmxlIHRleHRhcmVhLFxuLmNrZV9lZGl0YWJsZSBzZWxlY3QsXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPXRleHRdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPWVtYWlsXSxcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT10ZWxdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPW51bWJlcl0sXG4uYnMtc3ViLWNvbnRlbnRzIHRleHRhcmVhLFxuLmJzLXN1Yi1jb250ZW50cyBzZWxlY3Qge1xuICBtYXJnaW46IDNweCAycHg7XG4gIHBhZGRpbmc6IDhweCAxMHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDtcbiAgLW1vei1ib3JkZXItcmFkaXVzOiAzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9Y2hlY2tib3hdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPWNoZWNrYm94XSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT1jaGVja2JveF0sXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0W3R5cGU9Y2hlY2tib3hdIHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9cmFkaW9dLCAuYnMtbWFpbi1jb250ZW50cyBpbnB1dFt0eXBlPWNoZWNrYm94XSxcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT1yYWRpb10sXG4uYmdlLWNvbnRlbnRzIGlucHV0W3R5cGU9Y2hlY2tib3hdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPXJhZGlvXSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT1jaGVja2JveF0sXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0W3R5cGU9cmFkaW9dLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPWNoZWNrYm94XSB7XG4gIG1hcmdpbi1sZWZ0OiA1cHg7XG4gIG1hcmdpbi1yaWdodDogNXB4O1xufVxuLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT1zdWJtaXRdLCAuYnMtbWFpbi1jb250ZW50cyBpbnB1dFt0eXBlPXJlc2V0XSwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT1idXR0b25dLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPXN1Ym1pdF0sXG4uYmdlLWNvbnRlbnRzIGlucHV0W3R5cGU9cmVzZXRdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPWJ1dHRvbl0sXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9c3VibWl0XSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT1yZXNldF0sXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9YnV0dG9uXSxcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT1zdWJtaXRdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPXJlc2V0XSxcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT1idXR0b25dIHtcbiAgbWFyZ2luOiAzcHggMnB4O1xuICBmb250LWZhbWlseTogXCJTRiBQcm8gSlBcIiwgXCJTRiBQcm8gVGV4dFwiLCBcIlNGIFBybyBJY29uc1wiLCBcIkhpcmFnaW5vIEtha3UgR290aGljIFByb1wiLCBcIuODkuODqeOCruODjuinkuOCtCBQcm8gVzNcIiwgXCLjg6HjgqTjg6rjgqpcIiwgXCJNZWlyeW9cIiwgXCLvvK3vvLMg77yw44K044K344OD44KvXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgXCJIZWx2ZXRpY2FcIiwgXCJBcmlhbFwiLCBcInNhbnMtc2VyaWZcIjtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdLCAuYnMtbWFpbi1jb250ZW50cyBpbnB1dFt0eXBlPXRleHRdLCAuYnMtbWFpbi1jb250ZW50cyBpbnB1dFt0eXBlPWVtYWlsXSwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT10ZWxdLCAuYnMtbWFpbi1jb250ZW50cyBpbnB1dFt0eXBlPW51bWJlcl0sXG4uYmdlLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPXRleHRdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPWVtYWlsXSxcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT10ZWxdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPW51bWJlcl0sXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9cGFzc3dvcmRdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPXRleHRdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPWVtYWlsXSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT10ZWxdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPW51bWJlcl0sXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPXRleHRdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPWVtYWlsXSxcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT10ZWxdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPW51bWJlcl0ge1xuICBmb250LXNpemU6IDFlbTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdOjpwbGFjZWhvbGRlciwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT10ZXh0XTo6cGxhY2Vob2xkZXIsIC5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9ZW1haWxdOjpwbGFjZWhvbGRlciwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT10ZWxdOjpwbGFjZWhvbGRlciwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT1udW1iZXJdOjpwbGFjZWhvbGRlcixcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT1wYXNzd29yZF06OnBsYWNlaG9sZGVyLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPXRleHRdOjpwbGFjZWhvbGRlcixcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT1lbWFpbF06OnBsYWNlaG9sZGVyLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPXRlbF06OnBsYWNlaG9sZGVyLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPW51bWJlcl06OnBsYWNlaG9sZGVyLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPXBhc3N3b3JkXTo6cGxhY2Vob2xkZXIsXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9dGV4dF06OnBsYWNlaG9sZGVyLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPWVtYWlsXTo6cGxhY2Vob2xkZXIsXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9dGVsXTo6cGxhY2Vob2xkZXIsXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9bnVtYmVyXTo6cGxhY2Vob2xkZXIsXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdOjpwbGFjZWhvbGRlcixcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT10ZXh0XTo6cGxhY2Vob2xkZXIsXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0W3R5cGU9ZW1haWxdOjpwbGFjZWhvbGRlcixcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT10ZWxdOjpwbGFjZWhvbGRlcixcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT1udW1iZXJdOjpwbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjY2NjO1xufVxuLmJzLW1haW4tY29udGVudHMgaW5wdXQ6YWN0aXZlLCAuYnMtbWFpbi1jb250ZW50cyBpbnB1dDpmb2N1cyxcbi5iZ2UtY29udGVudHMgaW5wdXQ6YWN0aXZlLFxuLmJnZS1jb250ZW50cyBpbnB1dDpmb2N1cyxcbi5ja2VfZWRpdGFibGUgaW5wdXQ6YWN0aXZlLFxuLmNrZV9lZGl0YWJsZSBpbnB1dDpmb2N1cyxcbi5icy1zdWItY29udGVudHMgaW5wdXQ6YWN0aXZlLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dDpmb2N1cyB7XG4gIGJveC1zaGFkb3c6IDAgMCA1cHggMXB4ICNmYTk2OTY7XG4gIG91dGxpbmU6IG5vbmU7XG59XG4uYnMtbWFpbi1jb250ZW50cyB0ZXh0YXJlYSxcbi5iZ2UtY29udGVudHMgdGV4dGFyZWEsXG4uY2tlX2VkaXRhYmxlIHRleHRhcmVhLFxuLmJzLXN1Yi1jb250ZW50cyB0ZXh0YXJlYSB7XG4gIHdpZHRoOiA5NSU7XG4gIGZvbnQtc2l6ZTogMWVtO1xuICBwYWRkaW5nOiAzcHggM3B4O1xufVxuLmJzLW1haW4tY29udGVudHMgdGV4dGFyZWE6YWN0aXZlLCAuYnMtbWFpbi1jb250ZW50cyB0ZXh0YXJlYTpmb2N1cyxcbi5iZ2UtY29udGVudHMgdGV4dGFyZWE6YWN0aXZlLFxuLmJnZS1jb250ZW50cyB0ZXh0YXJlYTpmb2N1cyxcbi5ja2VfZWRpdGFibGUgdGV4dGFyZWE6YWN0aXZlLFxuLmNrZV9lZGl0YWJsZSB0ZXh0YXJlYTpmb2N1cyxcbi5icy1zdWItY29udGVudHMgdGV4dGFyZWE6YWN0aXZlLFxuLmJzLXN1Yi1jb250ZW50cyB0ZXh0YXJlYTpmb2N1cyB7XG4gIGJveC1zaGFkb3c6IDAgMCA1cHggMXB4ICNmYTk2OTY7XG4gIG91dGxpbmU6IG5vbmU7XG59XG4uYnMtbWFpbi1jb250ZW50cyBpbnB1dFt0eXBlPXBhc3N3b3JkXSwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT10ZXh0XSwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT1lbWFpbF0sIC5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9dGVsXSwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT1udW1iZXJdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPXBhc3N3b3JkXSxcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT10ZXh0XSxcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT1lbWFpbF0sXG4uYmdlLWNvbnRlbnRzIGlucHV0W3R5cGU9dGVsXSxcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT1udW1iZXJdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPXBhc3N3b3JkXSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT10ZXh0XSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT1lbWFpbF0sXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9dGVsXSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT1udW1iZXJdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPXBhc3N3b3JkXSxcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT10ZXh0XSxcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT1lbWFpbF0sXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0W3R5cGU9dGVsXSxcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT1udW1iZXJdIHtcbiAgbGluZS1oZWlnaHQ6IDFlbTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHNlbGVjdCxcbi5iZ2UtY29udGVudHMgc2VsZWN0LFxuLmNrZV9lZGl0YWJsZSBzZWxlY3QsXG4uYnMtc3ViLWNvbnRlbnRzIHNlbGVjdCB7XG4gIGZvbnQtc2l6ZTogMWVtO1xuICBoZWlnaHQ6IDIuNmVtO1xuICBwYWRkaW5nOiAxMHB4IDhweDtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHNlbGVjdDphY3RpdmUsIC5icy1tYWluLWNvbnRlbnRzIHNlbGVjdDpmb2N1cyxcbi5iZ2UtY29udGVudHMgc2VsZWN0OmFjdGl2ZSxcbi5iZ2UtY29udGVudHMgc2VsZWN0OmZvY3VzLFxuLmNrZV9lZGl0YWJsZSBzZWxlY3Q6YWN0aXZlLFxuLmNrZV9lZGl0YWJsZSBzZWxlY3Q6Zm9jdXMsXG4uYnMtc3ViLWNvbnRlbnRzIHNlbGVjdDphY3RpdmUsXG4uYnMtc3ViLWNvbnRlbnRzIHNlbGVjdDpmb2N1cyB7XG4gIGJveC1zaGFkb3c6IDAgMCA1cHggMXB4ICNmYTk2OTY7XG4gIG91dGxpbmU6IG5vbmU7XG59XG4uYnMtbWFpbi1jb250ZW50cyBvcHRncm91cCBvcHRpb24sXG4uYmdlLWNvbnRlbnRzIG9wdGdyb3VwIG9wdGlvbixcbi5ja2VfZWRpdGFibGUgb3B0Z3JvdXAgb3B0aW9uLFxuLmJzLXN1Yi1jb250ZW50cyBvcHRncm91cCBvcHRpb24ge1xuICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG59XG5cbi8qKlxuICog5aSJ5pWwXG4gKi9cbi8qKiAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAqXG4gKlxuICog44OV44Kp44Oz44OI44Gu5a6a576pXG4gKiBGb250IEF3ZXNvbWUgNC42LjMgYnkgQGRhdmVnYW5keSAtIGh0dHA6Ly9mb250YXdlc29tZS5pbyAtIEBmb250YXdlc29tZVxuICogTGljZW5zZSAtIGh0dHA6Ly9mb250YXdlc29tZS5pby9saWNlbnNlIChGb250OiBTSUwgT0ZMIDEuMSwgQ1NTOiBNSVQgTGljZW5zZSlcbiAqXG4gKiAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAqKi9cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogRm9udEF3ZXNvbWU7XG4gIHNyYzogdXJsKFwiLi4vZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC5lb3Q/dj00LjYuM1wiKTtcbiAgc3JjOiB1cmwoXCIuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LmVvdD8jaWVmaXgmdj00LjYuM1wiKSBmb3JtYXQoXCJlbWJlZGRlZC1vcGVudHlwZVwiKSwgdXJsKFwiLi4vZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC53b2ZmMj92PTQuNi4zXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCIuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LndvZmY/dj00LjYuM1wiKSBmb3JtYXQoXCJ3b2ZmXCIpLCB1cmwoXCIuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LnR0Zj92PTQuNi4zXCIpIGZvcm1hdChcInRydWV0eXBlXCIpLCB1cmwoXCIuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LnN2Zz92PTQuNi4zI2ZvbnRhd2Vzb21lcmVndWxhclwiKSBmb3JtYXQoXCJzdmdcIik7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbn1cbi8qKiAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAqXG4gKlxuICog44Oe44Or44OB44Kr44Op44Og44OW44Ot44OD44Kv44Gu44Os44Kk44Ki44Km44OIXG4gKlxuICogLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gKiovXG4vKipcbiAqIEJ1cmdlckVkaXRvciBTdHlsZVNoZWV0IFN0eWxlXG4gKlxuICogYmMtZnJvbnQg44OG44O844Oe5YG044Gn44Kz44Oz44OR44Kk44Or44GX44Gf6Zqb44Gv44CBYmdlX3N0eWxlLmNzcyDjgpJcbiAqIEJjVGhlbWVTYW1wbGUg44OG44O844Oe5YG044Gr44Kz44OU44O844GZ44KL5b+F6KaB44GM44GC44KLXG4gKi9cbi5iZ3QtYm94X19jYXB0aW9uIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgcGFkZGluZzogM3B4O1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBmb250LXNpemU6IDAuOGVtO1xufVxuXG4uYmd0LWJ0biB7XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgcGFkZGluZzogMTJweCAxMHB4O1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBtaW4td2lkdGg6IDI4MHB4O1xuICBib3JkZXItcmFkaXVzOiAycHg7XG59XG4uYmd0LWJ0bjphY3RpdmUsIC5iZ3QtYnRuOmZvY3VzIHtcbiAgYm94LXNoYWRvdzogMCAwIDEwcHggMCAjMDU3MGM3LCAwIDAgMTBweCAwICNmZmY7XG59XG5cbi5iZ3QtYnRuLS1saW5rLFxuW2RhdGEtYmd0LWJ1dHRvbi1raW5kPWxpbmtdIC5iZ3QtYnRuIHtcbiAgY29sb3I6ICMzMzM7XG4gIGJvcmRlci1jb2xvcjogI2NjYztcbiAgYmFja2dyb3VuZDogI2ZmZjtcbn1cbi5iZ3QtYnRuLS1saW5rOmhvdmVyLCAuYmd0LWJ0bi0tbGluazphY3RpdmUsIC5iZ3QtYnRuLS1saW5rOmZvY3VzLFxuW2RhdGEtYmd0LWJ1dHRvbi1raW5kPWxpbmtdIC5iZ3QtYnRuOmhvdmVyLFxuW2RhdGEtYmd0LWJ1dHRvbi1raW5kPWxpbmtdIC5iZ3QtYnRuOmFjdGl2ZSxcbltkYXRhLWJndC1idXR0b24ta2luZD1saW5rXSAuYmd0LWJ0bjpmb2N1cyB7XG4gIGJhY2tncm91bmQ6ICNlOWU5ZTk7XG59XG5cbi5iZ3QtYnRuLS1lbSxcbltkYXRhLWJndC1idXR0b24ta2luZD1lbV0gLmJndC1idG4ge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZDogIzMzMztcbn1cbi5iZ3QtYnRuLS1lbTpob3ZlciwgLmJndC1idG4tLWVtOmFjdGl2ZSwgLmJndC1idG4tLWVtOmZvY3VzLFxuW2RhdGEtYmd0LWJ1dHRvbi1raW5kPWVtXSAuYmd0LWJ0bjpob3ZlcixcbltkYXRhLWJndC1idXR0b24ta2luZD1lbV0gLmJndC1idG46YWN0aXZlLFxuW2RhdGEtYmd0LWJ1dHRvbi1raW5kPWVtXSAuYmd0LWJ0bjpmb2N1cyB7XG4gIGJhY2tncm91bmQ6ICM1NTU7XG59XG5cbi5iZ3QtYnRuLS1leHRlcm5hbCxcbltkYXRhLWJndC1idXR0b24ta2luZD1leHRlcm5hbF0gLmJndC1idG4ge1xuICBjb2xvcjogIzMzMztcbiAgYm9yZGVyLWNvbG9yOiAjY2NjO1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xufVxuLmJndC1idG4tLWV4dGVybmFsOmhvdmVyLCAuYmd0LWJ0bi0tZXh0ZXJuYWw6YWN0aXZlLCAuYmd0LWJ0bi0tZXh0ZXJuYWw6Zm9jdXMsXG5bZGF0YS1iZ3QtYnV0dG9uLWtpbmQ9ZXh0ZXJuYWxdIC5iZ3QtYnRuOmhvdmVyLFxuW2RhdGEtYmd0LWJ1dHRvbi1raW5kPWV4dGVybmFsXSAuYmd0LWJ0bjphY3RpdmUsXG5bZGF0YS1iZ3QtYnV0dG9uLWtpbmQ9ZXh0ZXJuYWxdIC5iZ3QtYnRuOmZvY3VzIHtcbiAgYmFja2dyb3VuZDogI2U5ZTllOTtcbn1cbi5iZ3QtYnRuLS1leHRlcm5hbDo6YWZ0ZXIsXG5bZGF0YS1iZ3QtYnV0dG9uLWtpbmQ9ZXh0ZXJuYWxdIC5iZ3QtYnRuOjphZnRlciB7XG4gIGZvbnQtZmFtaWx5OiBGb250QXdlc29tZSwgc2VyaWY7XG4gIHNwZWFrOiBub25lO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtdmFyaWFudDogbm9ybWFsO1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgdGV4dC1yZW5kZXJpbmc6IGF1dG87XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgY29udGVudDogXCJcXGYwOGVcIjtcbiAgZm9udC1zaXplOiAxZW07XG4gIGNvbG9yOiAjOTk5O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYmd0LWJ0bi0tYmFjayxcbltkYXRhLWJndC1idXR0b24ta2luZD1iYWNrXSAuYmd0LWJ0biB7XG4gIGNvbG9yOiAjMzMzO1xuICBib3JkZXItY29sb3I6ICNkZGQ7XG4gIGJhY2tncm91bmQ6ICNkZGQ7XG59XG4uYmd0LWJ0bi0tYmFjazpob3ZlciwgLmJndC1idG4tLWJhY2s6YWN0aXZlLCAuYmd0LWJ0bi0tYmFjazpmb2N1cyxcbltkYXRhLWJndC1idXR0b24ta2luZD1iYWNrXSAuYmd0LWJ0bjpob3ZlcixcbltkYXRhLWJndC1idXR0b24ta2luZD1iYWNrXSAuYmd0LWJ0bjphY3RpdmUsXG5bZGF0YS1iZ3QtYnV0dG9uLWtpbmQ9YmFja10gLmJndC1idG46Zm9jdXMge1xuICBiYWNrZ3JvdW5kOiAjZTllOWU5O1xufVxuLmJndC1idG4tLWJhY2sgc3BhbixcbltkYXRhLWJndC1idXR0b24ta2luZD1iYWNrXSAuYmd0LWJ0biBzcGFuIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJndC1idG4tLWJhY2s6OmJlZm9yZSxcbltkYXRhLWJndC1idXR0b24ta2luZD1iYWNrXSAuYmd0LWJ0bjo6YmVmb3JlIHtcbiAgZm9udC1mYW1pbHk6IEZvbnRBd2Vzb21lLCBzZXJpZjtcbiAgc3BlYWs6IG5vbmU7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC12YXJpYW50OiBub3JtYWw7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICB0ZXh0LXJlbmRlcmluZzogYXV0bztcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICBjb250ZW50OiBcIlxcZjA1M1wiO1xuICBmb250LXNpemU6IDFlbTtcbiAgbWFyZ2luLXRvcDogLTJweDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYmd0LWhyIHtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG5cbltkYXRhLWJndC1oci1raW5kPWRhc2hlZF0gLmJndC1ociB7XG4gIGhlaWdodDogMDtcbiAgYm9yZGVyOiBub25lO1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBib3JkZXItYm90dG9tOiAycHggZGFzaGVkIGN1cnJlbnRDb2xvcjtcbn1cblxuLmJndC1oci0tYm9sZCxcbltkYXRhLWJndC1oci1raW5kPWJvbGRdIC5iZ3QtaHIge1xuICBoZWlnaHQ6IDVweDtcbn1cblxuLmJndC1oci0tbmFycm93LFxuW2RhdGEtYmd0LWhyLWtpbmQ9bmFycm93XSAuYmd0LWhyIHtcbiAgaGVpZ2h0OiAxcHg7XG59XG5cbi5iZ3QtaHItLXNob3J0LFxuW2RhdGEtYmd0LWhyLWtpbmQ9c2hvcnRdIC5iZ3QtaHIge1xuICB3aWR0aDogNjAlO1xuICBoZWlnaHQ6IDFweDtcbn1cblxuLmJndC1kb3dubG9hZC1maWxlX19saW5rIHtcbiAgY29sb3I6ICMzMzM7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGZvbnQtc2l6ZTogMS4wOGVtO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAwLjdlbSAxZW07XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5iZ3QtZG93bmxvYWQtZmlsZV9fbGluazpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWU7XG59XG4uYmd0LWRvd25sb2FkLWZpbGVfX2xpbms6YWN0aXZlLCAuYmd0LWRvd25sb2FkLWZpbGVfX2xpbms6Zm9jdXMge1xuICBib3gtc2hhZG93OiAwIDAgNXB4IDFweCAjMDU3MGM3O1xuICBvdXRsaW5lOiBub25lO1xufVxuXG4uYmd0LWxpbmtfX3NpemUge1xuICBjb2xvcjogIzgwODA4MDtcbiAgZm9udC1zaXplOiAwLjhlbTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLmJndC1nb29nbGUtbWFwcy1saW5rIHtcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgIHBhZGRpbmc6IDFlbTtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgY29sb3I6ICMzMzM7XG4gICAgYm9yZGVyOiBzb2xpZCAxcHggIzk5OTtcbiAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG4gIC5iZ3QtZ29vZ2xlLW1hcHMtbGluayBzcGFuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAuYmd0LWdvb2dsZS1tYXBzLWxpbms6OmFmdGVyIHtcbiAgICBmb250LWZhbWlseTogRm9udEF3ZXNvbWUsIHNlcmlmO1xuICAgIHNwZWFrOiBub25lO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtdmFyaWFudDogbm9ybWFsO1xuICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgIHRleHQtcmVuZGVyaW5nOiBhdXRvO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gICAgY29udGVudDogXCJcXGYwOGVcIjtcbiAgICBmb250LXNpemU6IDFlbTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG59XG5cbltkYXRhLWJndD1nYWxsZXJ5XSAuYmd0LWdhbGxlcnkge1xuICBwYWRkaW5nLXRvcDogNTQlO1xufVxuW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeTpob3ZlciBbZGF0YS1iZ3Q9Z2FsbGVyeV0gLmJndC1nYWxsZXJ5LWN0cmwge1xuICBvcGFjaXR5OiAxO1xufVxuW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeV9faW1nIGltZyB7XG4gIG9iamVjdC1maXQ6IGNvdmVyO1xufVxuW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeV9fY2FwdGlvbiB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNik7XG4gIHBhZGRpbmc6IDAuN2VtIDFlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeS1jdHJsIHtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXMgZWFzZS1pbjtcbn1cbltkYXRhLWJndD1nYWxsZXJ5XSAuYmd0LWdhbGxlcnktY3RybF9fcHJldiwgW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeS1jdHJsX19uZXh0IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG4gIG1hcmdpbjogLTIwcHggMCAwO1xuICBwYWRkaW5nOiAwO1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBib3JkZXI6IG5vbmU7XG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7XG59XG5bZGF0YS1iZ3Q9Z2FsbGVyeV0gLmJndC1nYWxsZXJ5LWN0cmxfX3ByZXY6aG92ZXIsIFtkYXRhLWJndD1nYWxsZXJ5XSAuYmd0LWdhbGxlcnktY3RybF9fbmV4dDpob3ZlciB7XG4gIG9wYWNpdHk6IDAuNTtcbn1cbltkYXRhLWJndD1nYWxsZXJ5XSAuYmd0LWdhbGxlcnktY3RybF9fcHJldjpmb2N1cywgW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeS1jdHJsX19uZXh0OmZvY3VzIHtcbiAgb3V0bGluZTogbm9uZTtcbn1cbltkYXRhLWJndD1nYWxsZXJ5XSAuYmd0LWdhbGxlcnktY3RybF9fcHJldiBzcGFuLCBbZGF0YS1iZ3Q9Z2FsbGVyeV0gLmJndC1nYWxsZXJ5LWN0cmxfX25leHQgc3BhbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xufVxuW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeS1jdHJsX19wcmV2OjphZnRlciwgW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeS1jdHJsX19uZXh0OjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXI6IHNvbGlkICNmZmY7XG4gIGJvcmRlci13aWR0aDogNXB4IDVweCAwIDA7XG59XG5bZGF0YS1iZ3Q9Z2FsbGVyeV0gLmJndC1nYWxsZXJ5LWN0cmxfX3ByZXYge1xuICBsZWZ0OiAyMHB4O1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTM1ZGVnKTtcbn1cbltkYXRhLWJndD1nYWxsZXJ5XSAuYmd0LWdhbGxlcnktY3RybF9fbmV4dCB7XG4gIHJpZ2h0OiAyMHB4O1xuICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG59XG5bZGF0YS1iZ3Q9Z2FsbGVyeV0gW2RhdGEtZ2FsbGVyeS1tYXJrZXI9dGh1bWJzXSArIC5iZ3QtZ2FsbGVyeS1tYXJrZXIge1xuICBtYXJnaW4tdG9wOiAxMHB4O1xufVxuW2RhdGEtYmd0PWdhbGxlcnldIFtkYXRhLWdhbGxlcnktbWFya2VyPXRodW1ic10gKyAuYmd0LWdhbGxlcnktbWFya2VyIGxpIHtcbiAgbWFyZ2luOiAwIDVweDtcbiAgd2lkdGg6IDYwcHg7XG4gIGhlaWdodDogNjBweDtcbn1cbltkYXRhLWJndD1nYWxsZXJ5XSBbZGF0YS1nYWxsZXJ5LW1hcmtlcj10aHVtYnNdICsgLmJndC1nYWxsZXJ5LW1hcmtlciBsaTo6YmVmb3JlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbltkYXRhLWJndD1nYWxsZXJ5XSBbZGF0YS1nYWxsZXJ5LW1hcmtlcj1kb3RdICsgLmJndC1nYWxsZXJ5LW1hcmtlciB7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG59XG5bZGF0YS1iZ3Q9Z2FsbGVyeV0gW2RhdGEtZ2FsbGVyeS1tYXJrZXI9ZG90XSArIC5iZ3QtZ2FsbGVyeS1tYXJrZXIgbGkge1xuICBtYXJnaW46IDAgMnB4O1xuICB3aWR0aDogMTBweDtcbiAgaGVpZ2h0OiAxMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTk5O1xuICBib3JkZXItcmFkaXVzOiAxMDAlO1xufVxuW2RhdGEtYmd0PWdhbGxlcnldIFtkYXRhLWdhbGxlcnktbWFya2VyPWRvdF0gKyAuYmd0LWdhbGxlcnktbWFya2VyIGxpLmN1cnJlbnQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xufVxuXG4vKiDjg4fjg5DjgqTjgrnkvp3lrZjmsY7nlKjjgq/jg6njgrkgKi9cbi5wYy1vbmx5IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkge1xuICAucGMtb25seSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4uc3Atb25seSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkge1xuICAuc3Atb25seSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn0iLCJAY2hhcnNldCBcInV0Zi04XCI7XG4vKipcbiAqIGJhc2VyQ01TIDogIEJhc2VkIFdlYnNpdGUgRGV2ZWxvcG1lbnQgUHJvamVjdCA8aHR0cHM6Ly9iYXNlcmNtcy5uZXQ+XG4gKiBDb3B5cmlnaHQgKGMpIE5QTyBiYXNlciBmb3VuZGF0aW9uIDxodHRwczovL2Jhc2VyZm91bmRhdGlvbi5vcmcvPlxuICpcbiAqIEBjb3B5cmlnaHQgICAgIENvcHlyaWdodCAoYykgTlBPIGJhc2VyIGZvdW5kYXRpb25cbiAqIEBsaW5rICAgICAgICAgIGh0dHBzOi8vYmFzZXJjbXMubmV0IGJhc2VyQ01TIFByb2plY3RcbiAqIEBzaW5jZSAgICAgICAgIDUuMC4wXG4gKiBAbGljZW5zZSAgICAgICBodHRwczovL2Jhc2VyY21zLm5ldC9saWNlbnNlL2luZGV4Lmh0bWwgTUlUIExpY2Vuc2VcbiAqL1xuXG4vKipcbiAqIOODkOODvOOCrOODvOOCqOODh+OCo+OCv+ODvOOCueOCv+OCpOODq1xuICog566h55CG55S76Z2i44Gn44KC5ZG844Gz5Ye644GV44KM44KLXG4gKi9cblxuQGltcG9ydCBcImNvbW1vbi9lZGl0b3JcIjtcbkBpbXBvcnQgXCJjb21tb24vYmdlX3NldHRpbmdcIjtcbkBpbXBvcnQgXCJjb21tb24vYmdlXCI7XG5cbiIsIi8qKlxuICog44Ko44OH44Kj44K/44O855SoQ1NTXG4gKi9cblxuJGJyZWFrUG9pbnQ6IDc2OHB4O1xuXG4uY2tlX2VkaXRhYmxlIHtcbiAgcGFkZGluZzogMTVweDtcbn1cblxuLyogRWRpdG9yIFBhcnRzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4uYnMtbWFpbi1jb250ZW50cyxcbi5iZ2UtY29udGVudHMsXG4uY2tlX2VkaXRhYmxlIHtcbiAgZm9udC1mYW1pbHk6IEFyaWFsLCBWZXJkYW5hLCBcIua4uOOCtOOCt+ODg+OCr1wiLCBZdUdvdGhpYywgXCJIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm9OXCIsIE1laXJ5bywgc2Fucy1zZXJpZjtcbiAgY29sb3I6ICMwMDA7XG5cbiAgaDEge1xuICAgIGZvbnQtc2l6ZTogNDBweDtcbiAgICBtYXJnaW4tYm90dG9tOiA0MHB4O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgaDIge1xuICAgIGZvbnQtZmFtaWx5OiBcIlNGIFBybyBKUFwiLCBcIlNGIFBybyBUZXh0XCIsIFwiU0YgUHJvIEljb25zXCIsIFwiSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvXCIsIFwi44OS44Op44Ku44OO6KeS44K0IFBybyBXM1wiLCBcIuODoeOCpOODquOCqlwiLCBcIk1laXJ5b1wiLCBcIu+8re+8syDvvLDjgrTjgrfjg4Pjgq9cIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBcIkhlbHZldGljYVwiLCBcIkFyaWFsXCIsIFwic2Fucy1zZXJpZlwiO1xuICAgIGxldHRlci1zcGFjaW5nOiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgZm9udC1zaXplOiAyLjJlbTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBsaW5lLWhlaWdodDogMS4yO1xuICAgIG1hcmdpbjogMC42ZW0gMDtcbiAgICBwYWRkaW5nOiAwLjNlbSAwO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgfVxuICB9XG5cbiAgaDMge1xuICAgIG1hcmdpbjogNTZweCAwIDIwcHggMDtcbiAgICBwYWRkaW5nOiAxM3B4IDI4cHggMTJweDtcbiAgICBmb250LXNpemU6IDIxcHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgbGluZS1oZWlnaHQ6IDQ4LjNweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgIH1cbiAgfVxuXG4gIGg0IHtcbiAgICBib3JkZXItYm90dG9tOiAxcHggI0NDQyBkb3R0ZWQ7XG4gICAgZm9udC1zaXplOiAyMnB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxMnB4O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBtYXJnaW46IDUwcHggMCAxN3B4IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgfVxuICB9XG5cbiAgaDUge1xuICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgICBtYXJnaW46IDFlbSAwO1xuICAgIHBhZGRpbmc6IDAuM2VtIDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG4gIH1cblxuICBoNiB7XG4gICAgZm9udC1zaXplOiAxZW07XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgICBtYXJnaW46IDFlbSAwO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBwYWRkaW5nOiAwLjNlbSAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgfVxuICB9XG5cbiAgc3Ryb25nIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB9XG5cbiAgdSB7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIH1cblxuICBzIHtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcbiAgfVxuXG4gIGVtIHtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIH1cblxuICBociB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxcHg7XG4gICAgY29sb3I6ICNkZGQ7XG4gICAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgICBtYXJnaW46IDUwcHggYXV0bztcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG4gIH1cblxuICB1bCB7XG4gICAgbWFyZ2luOiAyMHB4IDAgMzZweCAwO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjY7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC4wNXJlbTtcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG5cbiAgICBsaSB7XG4gICAgICBsaXN0LXN0eWxlLXBvc2l0aW9uOiBpbnNpZGU7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBwYWRkaW5nOiAwIDAgMCAyNXB4O1xuICAgICAgbWFyZ2luOiAwLjVlbSAwIDAuNWVtIDA7XG4gICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDtcblxuICAgICAgYSB7XG4gICAgICAgIHpvb206IDE7XG4gICAgICB9XG5cbiAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogOXB4O1xuICAgICAgICBsZWZ0OiAxcHg7XG4gICAgICAgIHdpZHRoOiA2cHg7XG4gICAgICAgIGhlaWdodDogNnB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMTgxODE4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdWwge1xuICAgICAgbWFyZ2luOiAwIDAgMCAxLjhlbTtcblxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb2wge1xuICAgIG1hcmdpbjogMjBweCAwIDM2cHggMS44ZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgICBsZXR0ZXItc3BhY2luZzogLjA1cmVtO1xuXG4gICAgb2wge1xuICAgICAgbWFyZ2luOiAyMHB4O1xuICAgIH1cblxuICAgIGxpIHtcbiAgICAgIGxpc3Qtc3R5bGUtdHlwZTogZGVjaW1hbC1sZWFkaW5nLXplcm87XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBwYWRkaW5nOiAwIDAgMCAwO1xuICAgICAgbWFyZ2luOiAwLjVlbSAwIDAuNWVtIDA7XG4gICAgICBsaW5lLWhlaWdodDogMS42O1xuICAgIH1cbiAgfVxuXG4gIHAge1xuICAgIG1hcmdpbjogMWVtIDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC4wNXJlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyLjM7XG4gIH1cblxuICB0YWJsZSB7XG4gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICBib3JkZXItc3BhY2luZzogMDtcbiAgICB0YWJsZS1sYXlvdXQ6IGZpeGVkO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2UxZTFlMTtcbiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZTFlMWUxO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTFlMWUxO1xuICAgIG1hcmdpbjogMjBweCAwIDIwcHggMDtcblxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRicmVha1BvaW50KSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG5cbiAgICBjYXB0aW9uIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcblxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGJvZHksXG4gICAgdGZvb3Qge1xuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHIge1xuICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlMWUxZTE7XG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWFyZ2luLXRvcDogLTFweDtcbiAgICAgIH1cblxuICAgICAgJjpudGgtY2hpbGQob2RkKSB0ZCB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XG4gICAgICB9XG5cbiAgICAgIHRoLFxuICAgICAgdGQge1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICBwYWRkaW5nOiAyNnB4IDI0cHg7XG4gICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2UxZTFlMTtcblxuICAgICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIlNGIFBybyBKUFwiLCBcIlNGIFBybyBUZXh0XCIsIFwiU0YgUHJvIEljb25zXCIsIFwiSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvXCIsIFwi44OS44Op44Ku44OO6KeS44K0IFBybyBXM1wiLCBcIuODoeOCpOODquOCqlwiLCBcIk1laXJ5b1wiLCBcIu+8re+8syDvvLDjgrTjgrfjg4Pjgq9cIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBcIkhlbHZldGljYVwiLCBcIkFyaWFsXCIsIFwic2Fucy1zZXJpZlwiO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZjNmM2YzO1xuICAgICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGQge1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuXG4gICAgICAgIHVsIHtcbiAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpZWxkc2V0IHtcbiAgICBib3JkZXI6IDA7XG4gIH1cblxuICBpbWcge1xuICAgIGJvcmRlcjogMDtcbiAgICBtYXJnaW46IGF1dG87XG4gIH1cblxuICBhZGRyZXNzLCBidXR0b24sIGNhcHRpb24sIGNpdGUsIGNvZGUsIGRmbiwgZW0sIGlucHV0LCBvcHRncm91cCwgb3B0aW9uLCBzZWxlY3QsIHN0cm9uZywgdGV4dGFyZWEsIHRoLCB2YXIge1xuICAgIGZvbnQ6IGluaGVyaXQ7XG4gIH1cblxuICBzbWFsbCB7XG4gICAgY29sb3I6ICM2NjY7XG4gIH1cblxuICBkZWwsIGlucyB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB9XG5cbiAgYSB7XG4gICAgJjpsaW5rLCAmOnZpc2l0ZWQge1xuICAgICAgY29sb3I6ICMyYjdiYjk7XG4gICAgfVxuXG4gICAgJjpob3ZlciB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgY2FwdGlvbiwgdGgge1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gIH1cblxuICBxIHtcbiAgICAmOmJlZm9yZSwgJjphZnRlciB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICB9XG4gIH1cblxuICBhYmJyLCBhY3JvbnltIHtcbiAgICBib3JkZXI6IDA7XG4gICAgZm9udC12YXJpYW50OiBub3JtYWw7XG4gIH1cblxuICBzdWIge1xuICAgIGZvbnQtc2l6ZTogMC44ZW07XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIHZlcnRpY2FsLWFsaWduOiBzdWI7XG4gIH1cblxuICBzdXAge1xuICAgIGZvbnQtc2l6ZTogMC44ZW07XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIHZlcnRpY2FsLWFsaWduOiBzdXBlcjtcbiAgfVxuXG4gIGxlZ2VuZCB7XG4gICAgY29sb3I6ICMwMDA7XG4gIH1cblxuICBwcmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNGM0YzRjM7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjRTJFMkUyO1xuICB9XG5cbiAgYmxvY2txdW90ZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogMWVtIDA7XG4gICAgcGFkZGluZzogMXB4IDIuNWVtO1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICNjY2M7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBjb2xvcjogIzg4ODtcbiAgICBmb250LXNpemU6IDAuOWVtO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgIH1cblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAn4oCcJztcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgZm9udC1mYW1pbHk6IHNlcmlmO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwLjNlbTtcbiAgICAgIGxlZnQ6IDAuMjVlbTtcbiAgICAgIHotaW5kZXg6IDA7XG4gICAgICBjb2xvcjogI2NjYztcbiAgICAgIGZvbnQtc2l6ZTogM2VtO1xuICAgIH1cblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICfigJ0nO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBmb250LWZhbWlseTogc2VyaWY7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206IC0wLjNlbTtcbiAgICAgIHJpZ2h0OiAwLjI1ZW07XG4gICAgICB6LWluZGV4OiAwO1xuICAgICAgY29sb3I6ICNjY2M7XG4gICAgICBmb250LXNpemU6IDNlbTtcbiAgICB9XG4gIH1cblxufVxuXG4vKiBGb3JtIFBhcnRzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4uYnMtbWFpbi1jb250ZW50cyxcbi5iZ2UtY29udGVudHMsXG4uY2tlX2VkaXRhYmxlLFxuLmJzLXN1Yi1jb250ZW50cyB7XG4gIGZvcm0ge1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgfVxuXG4gIGlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBvcHRpb24ge1xuICAgIGZvbnQtZmFtaWx5OiBcIlNGIFBybyBKUFwiLCBcIlNGIFBybyBUZXh0XCIsIFwiU0YgUHJvIEljb25zXCIsIFwiSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvXCIsIFwi44OS44Op44Ku44OO6KeS44K0IFBybyBXM1wiLCBcIuODoeOCpOODquOCqlwiLCBcIk1laXJ5b1wiLCBcIu+8re+8syDvvLDjgrTjgrfjg4Pjgq9cIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBcIkhlbHZldGljYVwiLCBcIkFyaWFsXCIsIFwic2Fucy1zZXJpZlwiO1xuICB9XG5cbiAgaW5wdXRbdHlwZT1wYXNzd29yZF0sXG4gIGlucHV0W3R5cGU9dGV4dF0sXG4gIGlucHV0W3R5cGU9ZW1haWxdLFxuICBpbnB1dFt0eXBlPXRlbF0sXG4gIGlucHV0W3R5cGU9bnVtYmVyXSxcbiAgdGV4dGFyZWEsXG4gIHNlbGVjdCB7XG4gICAgbWFyZ2luOiAzcHggMnB4O1xuICAgIHBhZGRpbmc6IDhweCAxMHB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgLW1vei1ib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICB9XG5cbiAgaW5wdXQge1xuICAgICZbdHlwZT1jaGVja2JveF0ge1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG5cbiAgICAmW3R5cGU9cmFkaW9dLCAmW3R5cGU9Y2hlY2tib3hdIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgICB9XG5cbiAgICAmW3R5cGU9c3VibWl0XSwgJlt0eXBlPXJlc2V0XSwgJlt0eXBlPWJ1dHRvbl0ge1xuICAgICAgbWFyZ2luOiAzcHggMnB4O1xuICAgICAgZm9udC1mYW1pbHk6IFwiU0YgUHJvIEpQXCIsIFwiU0YgUHJvIFRleHRcIiwgXCJTRiBQcm8gSWNvbnNcIiwgXCJIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm9cIiwgXCLjg5Ljg6njgq7jg47op5LjgrQgUHJvIFczXCIsIFwi44Oh44Kk44Oq44KqXCIsIFwiTWVpcnlvXCIsIFwi77yt77yzIO+8sOOCtOOCt+ODg+OCr1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIFwiSGVsdmV0aWNhXCIsIFwiQXJpYWxcIiwgXCJzYW5zLXNlcmlmXCI7XG4gICAgfVxuXG4gICAgJlt0eXBlPXBhc3N3b3JkXSxcbiAgICAmW3R5cGU9dGV4dF0sXG4gICAgJlt0eXBlPWVtYWlsXSxcbiAgICAmW3R5cGU9dGVsXSxcbiAgICAmW3R5cGU9bnVtYmVyXVxuICAgIHtcbiAgICAgIGZvbnQtc2l6ZTogMWVtO1xuXG4gICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgIGNvbG9yOiAjY2NjO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6YWN0aXZlLFxuICAgICY6Zm9jdXMge1xuICAgICAgYm94LXNoYWRvdzogMCAwIDVweCAxcHggI2ZhOTY5NjtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgdGV4dGFyZWEge1xuICAgIHdpZHRoOiA5NSU7XG4gICAgZm9udC1zaXplOiAxZW07XG4gICAgcGFkZGluZzogM3B4IDNweDtcblxuICAgICY6YWN0aXZlLFxuICAgICY6Zm9jdXMge1xuICAgICAgYm94LXNoYWRvdzogMCAwIDVweCAxcHggI2ZhOTY5NjtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgaW5wdXQge1xuICAgICZbdHlwZT1wYXNzd29yZF0sXG4gICAgJlt0eXBlPXRleHRdLFxuICAgICZbdHlwZT1lbWFpbF0sXG4gICAgJlt0eXBlPXRlbF0sXG4gICAgJlt0eXBlPW51bWJlcl1cbiAgICB7XG4gICAgICBsaW5lLWhlaWdodDogMWVtO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdCB7XG4gICAgZm9udC1zaXplOiAxZW07XG4gICAgaGVpZ2h0OiAyLjZlbTtcbiAgICBwYWRkaW5nOiAxMHB4IDhweDtcblxuICAgICY6YWN0aXZlLFxuICAgICY6Zm9jdXMge1xuICAgICAgYm94LXNoYWRvdzogMCAwIDVweCAxcHggI2ZhOTY5NjtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgb3B0Z3JvdXAgb3B0aW9uIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gIH1cbn1cbiIsIi8qKlxuICog5aSJ5pWwXG4gKi9cbkB1c2UgXCJzYXNzOm1hdGhcIjtcblxuLy8gUldE44Gu44OW44Os44O844Kv44Od44Kk44Oz44OIXG4kYnJlYWtQb2ludDogNzY4cHg7XG5cbi8vIOOCq+ODqeODoOmWk+OBruODnuODvOOCuOODs1xuJG11bHRpQ29sdW1uR3JpZE1hcmdpbjogMjBweDtcblxuLy8gUldE44Gn44Kr44Op44Og44GM6JC944Gh44Gf5pmC44Gu5LiL44Oe44O844K444OzXG4kbXVsdGlDb2x1bW5HcmlkTWFyZ2luQm90dG9tV2hlbkNsZWFyZWRGbG9hdDogMjBweDtcblxuLy8g44Oc44K/44Oz44Gu44OV44Kp44O844Kr44K55pmC44Gu44Kr44Op44O8XG4kYnRuR2xvd0NvbG9yOiAjMDU3MGM3O1xuXG4vLyDjg4jjg6rjg6DnlLvlg4/jg5bjg63jg4Pjgq/jga7nuKbmqKrmr5RcbiR0cmltSW1hZ2VBc3BlY3RSYXRpbzogMTsgLy8gNDoz44Gu5aC05ZCI44GvMy80XG5cbi8qKiAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAqXG4gKlxuICog44OV44Kp44Oz44OI44Gu5a6a576pXG4gKiBGb250IEF3ZXNvbWUgNC42LjMgYnkgQGRhdmVnYW5keSAtIGh0dHA6Ly9mb250YXdlc29tZS5pbyAtIEBmb250YXdlc29tZVxuICogTGljZW5zZSAtIGh0dHA6Ly9mb250YXdlc29tZS5pby9saWNlbnNlIChGb250OiBTSUwgT0ZMIDEuMSwgQ1NTOiBNSVQgTGljZW5zZSlcbiAqXG4gKiAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAqKi9cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogRm9udEF3ZXNvbWU7XG4gIHNyYzogdXJsKCcuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LmVvdD92PTQuNi4zJyk7XG4gIHNyYzogdXJsKCcuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LmVvdD8jaWVmaXgmdj00LjYuMycpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSxcbiAgdXJsKCcuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LndvZmYyP3Y9NC42LjMnKSBmb3JtYXQoJ3dvZmYyJyksXG4gIHVybCgnLi4vZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC53b2ZmP3Y9NC42LjMnKSBmb3JtYXQoJ3dvZmYnKSxcbiAgdXJsKCcuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LnR0Zj92PTQuNi4zJykgZm9ybWF0KCd0cnVldHlwZScpLFxuICB1cmwoJy4uL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQuc3ZnP3Y9NC42LjMjZm9udGF3ZXNvbWVyZWd1bGFyJykgZm9ybWF0KCdzdmcnKTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuXG4vLyAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAvXG4vLyDjgrDjg6rjg4Pjg4njgrfjgrnjg4bjg6Bcbi8vXG4vLyDnt6jpm4bpnZ7mjqjlpahcbi8vXG4vLyAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAvXG4kc3BhbjE6IDguMzMzMyU7XG4kc3BhbjI6IDE2LjY2NjYlO1xuJHNwYW4zOiAyNSU7XG4kc3BhbjQ6IDMzLjMzMzMlO1xuJHNwYW41OiA0MS42NjY2JTtcbiRzcGFuNjogNTAlO1xuJHNwYW43OiA1OC4zMzMzJTtcbiRzcGFuODogNjYuNjY2NiU7XG4kc3Bhbjk6IDc1JTtcbiRzcGFuMTA6IDgzLjMzMzMlO1xuJHNwYW4xMTogOTEuNjY2NiU7XG4kc3BhbjEyOiAxMDAlO1xuJGRpdmlkZTU6IDIwJTsgLy8gMTLjgrDjg6rjg4Pjg4njgrfjgrnjg4bjg6Djgafjga/lho3nj77jgafjgY3jgarjgYQ15YiG5YmyXG5cbi8vIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC9cbi8vXG4vLyDjg5/jg4Pjgq/jgrnjgqTjg7Ncbi8vXG4vLyAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAvXG5AbWl4aW4gYmdlLWljb24ge1xuICBmb250LWZhbWlseTogRm9udEF3ZXNvbWUsIHNlcmlmO1xuICBzcGVhazogbm9uZTtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXZhcmlhbnQ6IG5vcm1hbDtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gIHRleHQtcmVuZGVyaW5nOiBhdXRvO1xuICBsaW5lLWhlaWdodDogMTtcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG59XG5cbi8qKiAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAqXG4gKlxuICog44Oe44Or44OB44Kr44Op44Og44OW44Ot44OD44Kv44Gu44Os44Kk44Ki44Km44OIXG4gKlxuICogLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gKiovXG5cbiVjb2x1bW4yLWxheW91dCB7XG4gIC8qIDLliJfjg5bjg63jg4Pjgq8gKi9cbiAgLmJndC1ncmlkIHtcbiAgICAvKiAy5YiX44OW44Ot44OD44Kv5YaFIOODrOOCpOOCouOCpuODiOeUqOOCs+ODs+ODhuODiiAqL1xuICAgIHdpZHRoOiAkc3BhbjY7XG4gICAgZmxvYXQ6IGxlZnQ7XG5cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBmbG9hdDogbm9uZTtcblxuICAgICAgW2RhdGEtYmd0XSA+IDpsYXN0LWNoaWxkIHtcbiAgICAgICAgLyog5LiL44Oe44O844K444Oz44Gv44OW44Ot44OD44Kv5YaF44Gu44K/44Kk44OX44Gu6KaB57Sg44Gr5a++44GX44Gm5oyH5a6a44GZ44KLICjnqbrnlLvlg4/lr77nrZYpICovXG4gICAgICAgIG1hcmdpbi1ib3R0b206ICRtdWx0aUNvbHVtbkdyaWRNYXJnaW5Cb3R0b21XaGVuQ2xlYXJlZEZsb2F0O1xuXG4gICAgICAgICZbZGF0YS1iZ2UtZW1wdHk9JzEnXSB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQsXG4gICAgICAmW2NsYXNzKj0nYmd0LXNwLWdyaWQnXSB7XG4gICAgICAgIFtkYXRhLWJndF0gPiA6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICY6bnRoLWNoaWxkKDEpIHtcbiAgICAgIC8qIDLliJfjg5bjg63jg4Pjgq/lhoUg44Os44Kk44Ki44Km44OI55So5pyA5Yid44Gu44Kz44Oz44OG44OKICovXG4gICAgICBwYWRkaW5nLXJpZ2h0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luLCAyKTtcblxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm50aC1jaGlsZCgyKSB7XG4gICAgICAvKiAy5YiX44OW44Ot44OD44Kv5YaFIOODrOOCpOOCouOCpuODiOeUqOacgOW+jOOBruOCs+ODs+ODhuODiiAqL1xuICAgICAgcGFkZGluZy1sZWZ0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luLCAyKTtcblxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4lY29sdW1uMy1sYXlvdXQge1xuICAvKiAz5YiX44OW44Ot44OD44KvICovXG4gIC5iZ3QtZ3JpZCB7XG4gICAgLyogM+WIl+ODluODreODg+OCr+WGhSDjg6zjgqTjgqLjgqbjg4jnlKjjgrPjg7Pjg4bjg4ogKi9cbiAgICB3aWR0aDogJHNwYW40O1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIHBhZGRpbmctbGVmdDogbWF0aC5kaXYoJG11bHRpQ29sdW1uR3JpZE1hcmdpbiAqIDEsIDMpO1xuICAgIHBhZGRpbmctcmlnaHQ6IG1hdGguZGl2KCRtdWx0aUNvbHVtbkdyaWRNYXJnaW4gKiAxLCAzKTtcblxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRicmVha1BvaW50KSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGZsb2F0OiBub25lO1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcblxuICAgICAgW2RhdGEtYmd0XSA+IDpsYXN0LWNoaWxkIHtcbiAgICAgICAgLyog5LiL44Oe44O844K444Oz44Gv44OW44Ot44OD44Kv5YaF44Gu44K/44Kk44OX44Gu6KaB57Sg44Gr5a++44GX44Gm5oyH5a6a44GZ44KLICjnqbrnlLvlg4/lr77nrZYpICovXG4gICAgICAgIG1hcmdpbi1ib3R0b206ICRtdWx0aUNvbHVtbkdyaWRNYXJnaW5Cb3R0b21XaGVuQ2xlYXJlZEZsb2F0O1xuXG4gICAgICAgICZbZGF0YS1iZ2UtZW1wdHk9JzEnXSB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQsXG4gICAgICAmW2NsYXNzKj0nYmd0LXNwLWdyaWQnXSB7XG4gICAgICAgIFtkYXRhLWJndF0gPiA6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICY6bnRoLWNoaWxkKDEpIHtcbiAgICAgIC8qIDPliJfjg5bjg63jg4Pjgq/lhoUg44Os44Kk44Ki44Km44OI55So5pyA5Yid44Gu44Kz44Oz44OG44OKICovXG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luICogMiwgMyk7XG5cbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRicmVha1BvaW50KSB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpudGgtY2hpbGQoMykge1xuICAgICAgLyogM+WIl+ODluODreODg+OCr+WGhSDjg6zjgqTjgqLjgqbjg4jnlKjmnIDliJ3jga7jgrPjg7Pjg4bjg4ogKi9cbiAgICAgIHBhZGRpbmctbGVmdDogbWF0aC5kaXYoJG11bHRpQ29sdW1uR3JpZE1hcmdpbiAqIDIsIDMpO1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcblxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4lY29sdW1uNC1sYXlvdXQge1xuICAvKiA05YiX44OW44Ot44OD44KvICovXG4gIC5iZ3QtZ3JpZCB7XG4gICAgLyogNOWIl+ODluODreODg+OCr+WGhSDjg6zjgqTjgqLjgqbjg4jnlKjjgrPjg7Pjg4bjg4ogKi9cbiAgICB3aWR0aDogJHNwYW4zO1xuICAgIGZsb2F0OiBsZWZ0O1xuXG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgZmxvYXQ6IG5vbmU7XG5cbiAgICAgIFtkYXRhLWJndF0gPiA6bGFzdC1jaGlsZCB7XG4gICAgICAgIC8qIOS4i+ODnuODvOOCuOODs+OBr+ODluODreODg+OCr+WGheOBruOCv+OCpOODl+OBruimgee0oOOBq+WvvuOBl+OBpuaMh+WumuOBmeOCiyAo56m655S75YOP5a++562WKSAqL1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAkbXVsdGlDb2x1bW5HcmlkTWFyZ2luQm90dG9tV2hlbkNsZWFyZWRGbG9hdDtcblxuICAgICAgICAmW2RhdGEtYmdlLWVtcHR5PScxJ10ge1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkLFxuICAgICAgJltjbGFzcyo9J2JndC1zcC1ncmlkJ10ge1xuICAgICAgICBbZGF0YS1iZ3RdID4gOmxhc3QtY2hpbGQge1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm50aC1jaGlsZCgxKSB7XG4gICAgICAvKiA05YiX44OW44Ot44OD44Kv5YaF44Gu44Kz44Oz44OG44OKICovXG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luICogMywgNCk7XG5cbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRicmVha1BvaW50KSB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm50aC1jaGlsZCgyKSB7XG4gICAgICAvKiA05YiX44OW44Ot44OD44Kv5YaF44Gu44Kz44Oz44OG44OKICovXG4gICAgICBwYWRkaW5nLWxlZnQ6IG1hdGguZGl2KCRtdWx0aUNvbHVtbkdyaWRNYXJnaW4gKiAxLCA0KTtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IG1hdGguZGl2KCRtdWx0aUNvbHVtbkdyaWRNYXJnaW4gKiAyLCA0KTtcblxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6bnRoLWNoaWxkKDMpIHtcbiAgICAgIC8qIDTliJfjg5bjg63jg4Pjgq/lhoXjga7jgrPjg7Pjg4bjg4ogKi9cbiAgICAgIHBhZGRpbmctbGVmdDogbWF0aC5kaXYoJG11bHRpQ29sdW1uR3JpZE1hcmdpbiAqIDIsIDQpO1xuICAgICAgcGFkZGluZy1yaWdodDogbWF0aC5kaXYoJG11bHRpQ29sdW1uR3JpZE1hcmdpbiAqIDEsIDQpO1xuXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpudGgtY2hpbGQoNCkge1xuICAgICAgLyogNOWIl+ODluODreODg+OCr+WGheOBruOCs+ODs+ODhuODiiAqL1xuICAgICAgcGFkZGluZy1sZWZ0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luICogMywgNCk7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbiVjb2x1bW41LWxheW91dCB7XG4gIC8qIDXliJfjg5bjg63jg4Pjgq8gKi9cbiAgLmJndC1ncmlkIHtcbiAgICAvKiA15YiX44OW44Ot44OD44Kv5YaFIOODrOOCpOOCouOCpuODiOeUqOOCs+ODs+ODhuODiiAqL1xuICAgIHdpZHRoOiAkZGl2aWRlNTtcbiAgICBmbG9hdDogbGVmdDtcblxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRicmVha1BvaW50KSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGZsb2F0OiBub25lO1xuXG4gICAgICBbZGF0YS1iZ3RdID4gOmxhc3QtY2hpbGQge1xuICAgICAgICAvKiDkuIvjg57jg7zjgrjjg7Pjga/jg5bjg63jg4Pjgq/lhoXjga7jgr/jgqTjg5fjga7opoHntKDjgavlr77jgZfjgabmjIflrprjgZnjgosgKOepuueUu+WDj+WvvuetlikgKi9cbiAgICAgICAgbWFyZ2luLWJvdHRvbTogJG11bHRpQ29sdW1uR3JpZE1hcmdpbkJvdHRvbVdoZW5DbGVhcmVkRmxvYXQ7XG5cbiAgICAgICAgJltkYXRhLWJnZS1lbXB0eT0nMSddIHtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCxcbiAgICAgICZbY2xhc3MqPSdiZ3Qtc3AtZ3JpZCddIHtcbiAgICAgICAgW2RhdGEtYmd0XSA+IDpsYXN0LWNoaWxkIHtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpudGgtY2hpbGQoMSkge1xuICAgICAgLyogNOWIl+ODluODreODg+OCr+WGheOBruOCs+ODs+ODhuODiiAqL1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgcGFkZGluZy1yaWdodDogbWF0aC5kaXYoJG11bHRpQ29sdW1uR3JpZE1hcmdpbiAqIDQsIDUpO1xuXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpudGgtY2hpbGQoMikge1xuICAgICAgLyogNOWIl+ODluODreODg+OCr+WGheOBruOCs+ODs+ODhuODiiAqL1xuICAgICAgcGFkZGluZy1sZWZ0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luICogMSwgNSk7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luICogMywgNSk7XG5cbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRicmVha1BvaW50KSB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm50aC1jaGlsZCgzKSB7XG4gICAgICAvKiA05YiX44OW44Ot44OD44Kv5YaF44Gu44Kz44Oz44OG44OKICovXG4gICAgICBwYWRkaW5nLWxlZnQ6IG1hdGguZGl2KCRtdWx0aUNvbHVtbkdyaWRNYXJnaW4gKiAyLCA1KTtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IG1hdGguZGl2KCRtdWx0aUNvbHVtbkdyaWRNYXJnaW4gKiAyLCA1KTtcblxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6bnRoLWNoaWxkKDQpIHtcbiAgICAgIC8qIDTliJfjg5bjg63jg4Pjgq/lhoXjga7jgrPjg7Pjg4bjg4ogKi9cbiAgICAgIHBhZGRpbmctbGVmdDogbWF0aC5kaXYoJG11bHRpQ29sdW1uR3JpZE1hcmdpbiAqIDMsIDUpO1xuICAgICAgcGFkZGluZy1yaWdodDogbWF0aC5kaXYoJG11bHRpQ29sdW1uR3JpZE1hcmdpbiAqIDEsIDUpO1xuXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpudGgtY2hpbGQoNSkge1xuICAgICAgLyogNOWIl+ODluODreODg+OCr+WGheOBruOCs+ODs+ODhuODiiAqL1xuICAgICAgcGFkZGluZy1sZWZ0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luICogNCwgNSk7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIEJ1cmdlckVkaXRvciBTdHlsZVNoZWV0IFN0eWxlXG4gKlxuICogYmMtZnJvbnQg44OG44O844Oe5YG044Gn44Kz44Oz44OR44Kk44Or44GX44Gf6Zqb44Gv44CBYmdlX3N0eWxlLmNzcyDjgpJcbiAqIEJjVGhlbWVTYW1wbGUg44OG44O844Oe5YG044Gr44Kz44OU44O844GZ44KL5b+F6KaB44GM44GC44KLXG4gKi9cblxuLmJndC1ib3hfX2NhcHRpb24ge1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBwYWRkaW5nOiAzcHg7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG59XG5cbi5iZ3QtYnRuIHtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBwYWRkaW5nOiAxMnB4IDEwcHg7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIG1pbi13aWR0aDogMjgwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcblxuICAmOmFjdGl2ZSxcbiAgJjpmb2N1cyB7XG4gICAgYm94LXNoYWRvdzogMCAwIDEwcHggMCAkYnRuR2xvd0NvbG9yLCAwIDAgMTBweCAwICNmZmY7XG4gIH1cbn1cblxuLmJndC1idG4tLWxpbmsgLyog5pen44K744Os44Kv44K/ICovXG4sXG5bZGF0YS1iZ3QtYnV0dG9uLWtpbmQ9J2xpbmsnXSAuYmd0LWJ0biAvKiDmlrDjgrvjg6zjgq/jgr8gKi9cbntcbiAgJGNvbG9yOiAjMzMzO1xuICAkYkNvbG9yOiAjY2NjO1xuICAkYmdDb2xvcjogI2ZmZjtcbiAgJGJnQ29sb3JIb3ZlcjogI2U5ZTllOTtcbiAgY29sb3I6ICRjb2xvcjtcbiAgYm9yZGVyLWNvbG9yOiAkYkNvbG9yO1xuICBiYWNrZ3JvdW5kOiAkYmdDb2xvcjtcblxuICAmOmhvdmVyLFxuICAmOmFjdGl2ZSxcbiAgJjpmb2N1cyB7XG4gICAgYmFja2dyb3VuZDogJGJnQ29sb3JIb3ZlcjtcbiAgfVxufVxuXG4uYmd0LWJ0bi0tZW0gLyog5pen44K744Os44Kv44K/ICovXG4sXG5bZGF0YS1iZ3QtYnV0dG9uLWtpbmQ9J2VtJ10gLmJndC1idG4gLyog5paw44K744Os44Kv44K/ICovXG57XG4gICRjb2xvcjogI2ZmZjtcbiAgJGJDb2xvcjogIzMzMztcbiAgJGJnQ29sb3I6ICMzMzM7XG4gICRiZ0NvbG9ySG92ZXI6ICM1NTU7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogJGNvbG9yO1xuICBib3JkZXItY29sb3I6ICRiQ29sb3I7XG4gIGJhY2tncm91bmQ6ICRiZ0NvbG9yO1xuXG4gICY6aG92ZXIsXG4gICY6YWN0aXZlLFxuICAmOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmdDb2xvckhvdmVyO1xuICB9XG59XG5cbi5iZ3QtYnRuLS1leHRlcm5hbCAvKiDml6fjgrvjg6zjgq/jgr8gKi9cbixcbltkYXRhLWJndC1idXR0b24ta2luZD0nZXh0ZXJuYWwnXSAuYmd0LWJ0biAvKiDmlrDjgrvjg6zjgq/jgr8gKi9cbntcbiAgJGNvbG9yOiAjMzMzO1xuICAkYkNvbG9yOiAjY2NjO1xuICAkYmdDb2xvcjogI2ZmZjtcbiAgJGJnQ29sb3JIb3ZlcjogI2U5ZTllOTtcbiAgY29sb3I6ICRjb2xvcjtcbiAgYm9yZGVyLWNvbG9yOiAkYkNvbG9yO1xuICBiYWNrZ3JvdW5kOiAkYmdDb2xvcjtcblxuICAmOmhvdmVyLFxuICAmOmFjdGl2ZSxcbiAgJjpmb2N1cyB7XG4gICAgYmFja2dyb3VuZDogJGJnQ29sb3JIb3ZlcjtcbiAgfVxuXG4gICY6OmFmdGVyIHtcbiAgICBAaW5jbHVkZSBiZ2UtaWNvbjtcbiAgICBjb250ZW50OiAnXFxmMDhlJztcbiAgICBmb250LXNpemU6IDFlbTtcbiAgICBjb2xvcjogIzk5OTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG59XG5cbi5iZ3QtYnRuLS1iYWNrIC8qIOaXp+OCu+ODrOOCr+OCvyAqL1xuLFxuW2RhdGEtYmd0LWJ1dHRvbi1raW5kPSdiYWNrJ10gLmJndC1idG4gLyog5paw44K744Os44Kv44K/ICovXG57XG4gICRjb2xvcjogIzMzMztcbiAgJGJDb2xvcjogI2RkZDtcbiAgJGJnQ29sb3I6ICNkZGQ7XG4gICRiZ0NvbG9ySG92ZXI6ICNlOWU5ZTk7XG4gIGNvbG9yOiAkY29sb3I7XG4gIGJvcmRlci1jb2xvcjogJGJDb2xvcjtcbiAgYmFja2dyb3VuZDogJGJnQ29sb3I7XG5cbiAgJjpob3ZlcixcbiAgJjphY3RpdmUsXG4gICY6Zm9jdXMge1xuICAgIGJhY2tncm91bmQ6ICRiZ0NvbG9ySG92ZXI7XG4gIH1cblxuICBzcGFuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuXG4gICY6OmJlZm9yZSB7XG4gICAgQGluY2x1ZGUgYmdlLWljb247XG4gICAgY29udGVudDogJ1xcZjA1Myc7XG4gICAgZm9udC1zaXplOiAxZW07XG4gICAgbWFyZ2luLXRvcDogLTJweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxufVxuXG4uYmd0LWhyIHtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG5cbltkYXRhLWJndC1oci1raW5kPSdkYXNoZWQnXSAuYmd0LWhyIHtcbiAgaGVpZ2h0OiAwO1xuICBib3JkZXI6IG5vbmU7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGJvcmRlci1ib3R0b206IDJweCBkYXNoZWQgY3VycmVudENvbG9yO1xufVxuXG4uYmd0LWhyLS1ib2xkIC8qIOaXp+OCu+ODrOOCr+OCvyAqL1xuLFxuW2RhdGEtYmd0LWhyLWtpbmQ9J2JvbGQnXSAuYmd0LWhyIC8qIOaWsOOCu+ODrOOCr+OCvyAqL1xue1xuICBoZWlnaHQ6IDVweDtcbn1cblxuLmJndC1oci0tbmFycm93IC8qIOaXp+OCu+ODrOOCr+OCvyAqL1xuLFxuW2RhdGEtYmd0LWhyLWtpbmQ9J25hcnJvdyddIC5iZ3QtaHIgLyog5paw44K744Os44Kv44K/ICovXG57XG4gIGhlaWdodDogMXB4O1xufVxuXG4uYmd0LWhyLS1zaG9ydCAvKiDml6fjgrvjg6zjgq/jgr8gKi9cbixcbltkYXRhLWJndC1oci1raW5kPSdzaG9ydCddIC5iZ3QtaHIgLyog5paw44K744Os44Kv44K/ICovXG57XG4gIHdpZHRoOiA2MCU7XG4gIGhlaWdodDogMXB4O1xufVxuXG4uYmd0LWRvd25sb2FkLWZpbGVfX2xpbmsge1xuICBjb2xvcjogIzMzMztcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgZm9udC1zaXplOiAxLjA4ZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDAuN2VtIDFlbTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBsaW5lLWhlaWdodDogMTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7XG4gIH1cblxuICAmOmFjdGl2ZSxcbiAgJjpmb2N1cyB7XG4gICAgYm94LXNoYWRvdzogMCAwIDVweCAxcHggJGJ0bkdsb3dDb2xvcjtcbiAgICBvdXRsaW5lOiBub25lO1xuICB9XG59XG5cbi5iZ3QtbGlua19fc2l6ZSB7XG4gIGNvbG9yOiAjODA4MDgwO1xuICBmb250LXNpemU6IDAuOGVtO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xufVxuXG4uYmd0LWdvb2dsZS1tYXBzLWxpbmsge1xuICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgcGFkZGluZzogMWVtO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBjb2xvcjogIzMzMztcbiAgICBib3JkZXI6IHNvbGlkIDFweCAjOTk5O1xuICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICBzcGFuIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgQGluY2x1ZGUgYmdlLWljb247XG4gICAgICBjb250ZW50OiAnXFxmMDhlJztcbiAgICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG4gIH1cbn1cblxuW2RhdGEtYmd0PSdnYWxsZXJ5J10ge1xuICAkdGh1bWItc2l6ZTogNjBweDtcblxuICAuYmd0LWdhbGxlcnkge1xuICAgIHBhZGRpbmctdG9wOiA1NCU7XG5cbiAgICAmOmhvdmVyICYtY3RybCB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cblxuICAgICZfX2ltZyB7XG4gICAgICBpbWcge1xuICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19jYXB0aW9uIHtcbiAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjYpO1xuICAgICAgcGFkZGluZzogMC43ZW0gMWVtO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cblxuICAgICYtY3RybCB7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXMgZWFzZS1pbjtcblxuICAgICAgJl9fcHJldixcbiAgICAgICZfX25leHQge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgbWFyZ2luOiAtMjBweCAwIDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICAgIH1cblxuICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgc3BhbiB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICB3aWR0aDogMDtcbiAgICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgd2lkdGg6IDQwcHg7XG4gICAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICAgIGJvcmRlcjogc29saWQgI2ZmZjtcbiAgICAgICAgICBib3JkZXItd2lkdGg6IDVweCA1cHggMCAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICZfX3ByZXYge1xuICAgICAgICBsZWZ0OiAyMHB4O1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTM1ZGVnKTtcbiAgICAgIH1cblxuICAgICAgJl9fbmV4dCB7XG4gICAgICAgIHJpZ2h0OiAyMHB4O1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgW2RhdGEtZ2FsbGVyeS1tYXJrZXI9J3RodW1icyddIHtcbiAgICArIC5iZ3QtZ2FsbGVyeS1tYXJrZXIge1xuICAgICAgbWFyZ2luLXRvcDogMTBweDtcblxuICAgICAgbGkge1xuICAgICAgICBtYXJnaW46IDAgNXB4O1xuICAgICAgICB3aWR0aDogJHRodW1iLXNpemU7XG4gICAgICAgIGhlaWdodDogJHRodW1iLXNpemU7XG5cdFx0XHRcdCY6OmJlZm9yZSB7XG5cdFx0XHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHRcdFx0fVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFtkYXRhLWdhbGxlcnktbWFya2VyPSdkb3QnXSB7XG4gICAgKyAuYmd0LWdhbGxlcnktbWFya2VyIHtcbiAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG5cbiAgICAgIGxpIHtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgd2lkdGg6IDEwcHg7XG4gICAgICAgIGhlaWdodDogMTBweDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzk5OTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTtcblxuICAgICAgICAmLmN1cnJlbnQge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiDjg4fjg5DjgqTjgrnkvp3lrZjmsY7nlKjjgq/jg6njgrkgKi9cbi5wYy1vbmx5IHtcbiAgZGlzcGxheTogYmxvY2s7XG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi5zcC1vbmx5IHtcbiAgZGlzcGxheTogbm9uZTtcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG5cbiJdfQ== */
diff --git a/plugins/baser-core/README.md b/plugins/baser-core/README.md
index 7b2b0f083a..04bffd6fcf 100644
--- a/plugins/baser-core/README.md
+++ b/plugins/baser-core/README.md
@@ -40,7 +40,7 @@ Some Handy Links
- See [baserCMS Users Community](https://basercms.net/community/)
- See [CakePHP - the rapid development PHP framework](https://cakephp.org)
-Get Support!
+Get Support
-------------
- See [baserCMS Users Forum](https://forum.basercms.net/)
diff --git a/plugins/baser-core/VERSION.txt b/plugins/baser-core/VERSION.txt
index 83e3f27fcf..4b5a004dd5 100644
--- a/plugins/baser-core/VERSION.txt
+++ b/plugins/baser-core/VERSION.txt
@@ -1,4 +1,4 @@
-5.1.1
+5.1.2
///////////////////////////////////////////////////////////////////////////////////////////////////////////
// +---------------------------------------------------------------------------------------------------+ //
@@ -14,6 +14,29 @@
CHG: 変更内容 / BUG: バグフィックス / NEW: 機能追加
+[2024-09-05] basercms-5.1.1
+- NEW [BC] PHP8.3に対応
+- CHG: [BC] AppTable::find() を削除
+ - beforeFindが重複実装だった
+ - afterFindは、位置的にfindの後ではなかった
+- CHG: [BC] PHPの必要バージョンを8.1に変更
+- CHG: [BC] ライブラリのインストーラーのcomposerコマンドをupdateからinstallに変更
+ ライブラリが最新化することにより問題が発生することがあるため
+- CHG: [BC] ダンロードパッケージからDockerの設定ファイルを削除しないようにした
+- CHG [BC] ダウンロードパッケージからDockerの設定ファイルを削除しないように変更
+- CHG [BC] BcThemeSample / BcPluginSample / BcColumn を packagist に公開
+- CHG [BC] インストーラーを調整
+ - .env が存在しない場合にステップ2で生成するようにした
+ - debugモードがOn になっている場合、ステップ5でOffに設定するようにした
+- CHG [BC] docker compose コマンドを変更
+ - docker-compose → docker compose
+- BUG [BC] 初期データ読み込み時にCSVファイルの"0"がnullとして読み込まれてしまう事象を修正
+- BUG [BC] composer で読み込むライブラリを CakePHPの必要要件に合わせて調整
+- BUG [BG] BlogHelperの一部関数が5.1系に対応していない問題を改善
+- BUG: [BC] ショートコードのヘルパーの読み込み方法を調整
+ - Viewにロードされたヘルパーが読み込めてなかったため
+- BUG [CC] カスタムコンテンツ設定編集のオプションの項目:更新日に漢字やひらがな等を入力し保存するとエラーになるがエラーメッセージが出ない箇所がある問題を改善
+
[2024-07-18] basercms-5.1.0
- NEW [BC] 二段階認証
- NEW [BC] パスワードの再設定間隔
diff --git a/plugins/baser-core/composer.json b/plugins/baser-core/composer.json
index 014f768966..7d9afd3715 100644
--- a/plugins/baser-core/composer.json
+++ b/plugins/baser-core/composer.json
@@ -15,20 +15,20 @@
"firebase/php-jwt": "6.1.0",
"mobiledetect/mobiledetectlib": "^3.74",
"ext-json": "*",
- "baserproject/bc-admin-third": "5.1.x",
- "baserproject/bc-blog": "5.1.x",
- "baserproject/bc-content-link": "5.1.x",
- "baserproject/bc-custom-content": "5.1.x",
- "baserproject/bc-editor-template": "5.1.x",
- "baserproject/bc-favorite": "5.1.x",
- "baserproject/bc-front": "5.1.x",
- "baserproject/bc-installer": "5.1.x",
- "baserproject/bc-mail": "5.1.x",
- "baserproject/bc-search-index": "5.1.x",
- "baserproject/bc-theme-config": "5.1.x",
- "baserproject/bc-theme-file": "5.1.x",
- "baserproject/bc-uploader": "5.1.x",
- "baserproject/bc-widget-area": "5.1.x",
+ "baserproject/bc-admin-third": "5.1.x-dev",
+ "baserproject/bc-blog": "5.1.x-dev",
+ "baserproject/bc-content-link": "5.1.x-dev",
+ "baserproject/bc-custom-content": "5.1.x-dev",
+ "baserproject/bc-editor-template": "5.1.x-dev",
+ "baserproject/bc-favorite": "5.1.x-dev",
+ "baserproject/bc-front": "5.1.x-dev",
+ "baserproject/bc-installer": "5.1.x-dev",
+ "baserproject/bc-mail": "5.1.x-dev",
+ "baserproject/bc-search-index": "5.1.x-dev",
+ "baserproject/bc-theme-config": "5.1.x-dev",
+ "baserproject/bc-theme-file": "5.1.x-dev",
+ "baserproject/bc-uploader": "5.1.x-dev",
+ "baserproject/bc-widget-area": "5.1.x-dev",
"ext-mbstring": "*",
"ext-zip": "*",
"ext-gd": "*"
@@ -38,7 +38,7 @@
"cakephp/cakephp-codesniffer": "^5.0",
"cakephp/debug_kit": "^5.0.0",
"josegonzalez/dotenv": "^4.0",
- "phpunit/phpunit": "^10.1.0",
+ "phpunit/phpunit": "10.5.31",
"symplify/monorepo-builder": "^11.2",
"vierge-noire/cakephp-fixture-factories": "^3.0",
"vierge-noire/cakephp-test-suite-light": "^3.0",
diff --git a/plugins/baser-core/config/setting.php b/plugins/baser-core/config/setting.php
index ff74aed8af..7487ccf4f1 100644
--- a/plugins/baser-core/config/setting.php
+++ b/plugins/baser-core/config/setting.php
@@ -291,12 +291,6 @@
*/
'coreReleaseUrl' => 'https://packagist.org/feeds/package.baserproject/baser-core.rss',
- /**
- * インストール時に composer.json にセットするバージョン
- * @see \BaserCore\Utility\BcComposer::setupComposerForDistribution()
- */
- 'setupVersion' => '5.1.*',
-
/**
* リリースパッケージに不要なファイル
* @see \BaserCore\Command\CreateReleaseCommand::deleteExcludeFiles()
diff --git a/plugins/baser-core/src/Command/ComposerCommand.php b/plugins/baser-core/src/Command/ComposerCommand.php
index 7aead59a85..5fe2637907 100644
--- a/plugins/baser-core/src/Command/ComposerCommand.php
+++ b/plugins/baser-core/src/Command/ComposerCommand.php
@@ -12,6 +12,7 @@
namespace BaserCore\Command;
use BaserCore\Utility\BcComposer;
+use BaserCore\Utility\BcFile;
use Cake\Command\Command;
use Cake\Console\Arguments;
use Cake\Console\ConsoleIo;
@@ -79,12 +80,17 @@ public function execute(Arguments $args, ConsoleIo $io)
BcComposer::clearCache();
+ $version = $args->getArgument('version');
if($args->getOption('force')) {
- $result = BcComposer::update();
- } else {
- $result = BcComposer::require('baser-core', $args->getArgument('version'));
+ if (!preg_match('/-dev$/', $version)) {
+ $version = preg_replace('/^(\d+\.\d+\.)(\d+)$/', '$1x-dev', $version);
+ }
+ BcComposer::changeMinimumStabilityToDev();
+ BcComposer::deleteReplace();
}
+ $result = BcComposer::require('baser-core', $version);
+
if($result['code'] === 0) {
$io->out(__d('baser_core', 'Composer によるアップデートが完了しました。'));
} else {
diff --git a/plugins/baser-core/src/Command/CreateReleaseCommand.php b/plugins/baser-core/src/Command/CreateReleaseCommand.php
index 3b6e8804f9..4c5378d311 100644
--- a/plugins/baser-core/src/Command/CreateReleaseCommand.php
+++ b/plugins/baser-core/src/Command/CreateReleaseCommand.php
@@ -39,10 +39,13 @@ class CreateReleaseCommand extends Command
*/
protected function buildOptionParser(\Cake\Console\ConsoleOptionParser $parser): \Cake\Console\ConsoleOptionParser
{
- $parser->addArgument('branch', [
+ $parser->addArgument('version', [
+ 'help' => __d('baser_core', 'リリースバージョン'),
+ 'required' => true
+ ]);
+ $parser->addOption('branch', [
'help' => __d('baser_core', 'クローン対象ブランチ'),
- 'default' => 'master',
- 'required' => false
+ 'default' => 'master'
]);
return $parser;
}
@@ -62,15 +65,26 @@ public function execute(Arguments $args, ConsoleIo $io)
if(is_dir($packagePath)) {
(new BcFolder($packagePath))->delete();
}
+ $version = $args->getArgument('version');
$io->out(__d('baser_core', 'リリースパッケージを作成します。', TMP));
$io->out();
$io->out(__d('baser_core', '- {0} にパッケージをクローンします。', TMP));
- $this->clonePackage($packagePath, $args->getArgument('branch'));
-
- $io->out(__d('baser_core', '- composer.json をセットアップします。'));
- BcComposer::setupComposerForDistribution($packagePath);
+ $this->clonePackage($packagePath, $args->getOption('branch'));
+
+ $io->out(__d('baser_core', '- composer.json / composer.lock をセットアップします。'));
+ BcComposer::setup('', $packagePath);
+ $result = BcComposer::setupComposerForDistribution($version);
+ if($result['code'] === 0) {
+ $io->out(__d('baser_core', 'Composer による lock ファイルの更新に失敗アップデートが完了しました。'));
+ } else {
+ $message = __d('baser_core', 'Composer による lock ファイルの更新に失敗しました。ログを確認してください。');
+ $this->log($message);
+ $this->log(implode("\n", $result['out']));
+ $io->error($message);
+ $this->abort();
+ }
$io->out(__d('baser_core', '- プラグインを初期化します。'));
$this->deletePlugins($packagePath);
@@ -79,7 +93,7 @@ public function execute(Arguments $args, ConsoleIo $io)
$this->deleteExcludeFiles($packagePath);
$io->out(__d('baser_core', '- Zip ファイルを作成します。'));
- $this->createZip($packagePath);
+ $this->createZip($packagePath, $version);
$io->out(__d('baser_core', '- クリーニング処理を実行します。'));
(new BcFolder($packagePath))->delete();
@@ -128,11 +142,12 @@ public function deletePlugins(string $packagePath)
* @param string $packagePath
* @checked
* @noTodo
+ * @unitTest
*/
- public function createZip(string $packagePath)
+ public function createZip(string $packagePath, string $version)
{
$zip = new ZipArchiver();
- $zipFile = TMP . 'basercms.zip';
+ $zipFile = TMP . 'basercms-' . $version . '.zip';
if(file_exists($zipFile)) {
unlink($zipFile);
}
diff --git a/plugins/baser-core/src/Controller/Admin/PermissionGroupsController.php b/plugins/baser-core/src/Controller/Admin/PermissionGroupsController.php
index a4c4403559..d1418ad480 100644
--- a/plugins/baser-core/src/Controller/Admin/PermissionGroupsController.php
+++ b/plugins/baser-core/src/Controller/Admin/PermissionGroupsController.php
@@ -80,7 +80,7 @@ public function index(PermissionGroupsAdminServiceInterface $service, ?int $user
* @noTodo
* @unitTest
*/
- public function add(PermissionGroupsAdminServiceInterface $service, int $userGroupId, string $prefix)
+ public function add(PermissionGroupsAdminServiceInterface $service, int $userGroupId)
{
if($this->getRequest()->is(['post', 'put'])) {
try {
@@ -96,7 +96,7 @@ public function add(PermissionGroupsAdminServiceInterface $service, int $userGro
}
$this->set($service->getViewVarsForForm(
$userGroupId,
- $entity?? $service->getNew($prefix)
+ $entity?? $service->getNew($this->getRequest()->getQuery('prefix'))
));
}
diff --git a/plugins/baser-core/src/Controller/Api/Admin/ContentsController.php b/plugins/baser-core/src/Controller/Api/Admin/ContentsController.php
index a25600d0c1..73e32bacbe 100644
--- a/plugins/baser-core/src/Controller/Api/Admin/ContentsController.php
+++ b/plugins/baser-core/src/Controller/Api/Admin/ContentsController.php
@@ -513,6 +513,7 @@ public function move(ContentsServiceInterface $service)
}
} else {
$message = __d('baser_core', 'コンテンツ一覧を表示後、他のログインユーザーがコンテンツの並び順を更新しました。
一度リロードしてから並び替えてください。');
+ $this->setResponse($this->response->withStatus(400));
}
$this->set([
diff --git a/plugins/baser-core/src/Database/Migration/BcMigration.php b/plugins/baser-core/src/Database/Migration/BcMigration.php
index 8cb47da5e7..14a6a57d5e 100644
--- a/plugins/baser-core/src/Database/Migration/BcMigration.php
+++ b/plugins/baser-core/src/Database/Migration/BcMigration.php
@@ -37,7 +37,11 @@ class BcMigration extends AbstractMigration
*/
public function table(string $tableName, array $options = []): Table
{
- $connection = $this->input->getOption('connection')?? 'default';
+ if($this->input->hasParameterOption('--connection')) {
+ $connection = $this->input->getParameterOption('--connection');
+ } else {
+ $connection = 'default';
+ }
$prefix = ConnectionManager::get($connection)->config()['prefix'];
return parent::table($prefix . $tableName);
}
diff --git a/plugins/baser-core/src/Event/BcEventListener.php b/plugins/baser-core/src/Event/BcEventListener.php
index 60f28ad370..355b454a40 100644
--- a/plugins/baser-core/src/Event/BcEventListener.php
+++ b/plugins/baser-core/src/Event/BcEventListener.php
@@ -122,6 +122,7 @@ public function implementedEvents(): array
* @return bool
* @checked
* @noTodo
+ * @unitTest
*/
public function isAction($action, $isContainController = true)
{
diff --git a/plugins/baser-core/src/Event/BcShortCodeEventListener.php b/plugins/baser-core/src/Event/BcShortCodeEventListener.php
index a6a7a68e25..8654faa7ca 100644
--- a/plugins/baser-core/src/Event/BcShortCodeEventListener.php
+++ b/plugins/baser-core/src/Event/BcShortCodeEventListener.php
@@ -94,7 +94,7 @@ protected function _execShortCode(View $view)
}
}
- if (isset($view->{$func[0]})) {
+ if ($view->helpers()->{$func[0]}) {
$Helper = $view->{$func[0]};
} else {
$className = $plugin . "\\" . "View\\Helper\\" . $func[0] . 'Helper';
diff --git a/plugins/baser-core/src/Model/Table/AppTable.php b/plugins/baser-core/src/Model/Table/AppTable.php
index 0972577255..feebf67d9b 100755
--- a/plugins/baser-core/src/Model/Table/AppTable.php
+++ b/plugins/baser-core/src/Model/Table/AppTable.php
@@ -109,41 +109,6 @@ public function belongsToMany(string $associated, array $options = []): BelongsT
return parent::belongsToMany($associated, $options);
}
- /**
- * findの前後にイベントを追加する
- *
- * @param string $type the type of query to perform
- * @param array $options An array that will be passed to Query::applyOptions()
- * @return \Cake\ORM\Query The query builder
- * @checked
- * @noTodo
- */
- public function find(string $type = 'all', mixed ...$args): Query
- {
- // EVENT beforeFind
- $event = $this->dispatchLayerEvent('beforeFind', [
- 'type' => $type,
- 'options' => $args // 後方互換のため options として渡す
- ]);
- if ($event !== false) {
- $args = ($event->getResult() === null || $event->getResult() === true) ? $event->getData('options') : $event->getResult();
- }
-
- $result = parent::find($type, ...$args);
-
- // EVENT afterFind
- $event = $this->dispatchLayerEvent('afterFind', [
- 'type' => $type,
- 'options' => $args,
- 'result' => $result
- ]);
- if ($event !== false) {
- $result = ($event->getResult() === null || $event->getResult() === true) ? $event->getData('result') : $event->getResult();
- }
-
- return $result;
- }
-
/**
* テーブル名にプレフィックスを追加する
*
@@ -315,6 +280,7 @@ public function sortup($id, $conditions)
* @return boolean
* @checked
* @noTodo
+ * @unitTest
*/
public function sortdown($id, $conditions)
{
@@ -332,6 +298,7 @@ public function sortdown($id, $conditions)
* @return boolean
* @checked
* @noTodo
+ * @unitTest
*/
public function changeSort($id, $offset, $options = [])
{
diff --git a/plugins/baser-core/src/Model/Table/ContentsTable.php b/plugins/baser-core/src/Model/Table/ContentsTable.php
index 3dbf6a77d9..ea15024781 100644
--- a/plugins/baser-core/src/Model/Table/ContentsTable.php
+++ b/plugins/baser-core/src/Model/Table/ContentsTable.php
@@ -13,6 +13,7 @@
use ArrayObject;
use Cake\Chronos\Chronos;
+use Cake\Datasource\Exception\RecordNotFoundException;
use Cake\Utility\Hash;
use Cake\Core\Configure;
use Cake\ORM\TableRegistry;
@@ -468,7 +469,13 @@ public function getUniqueName($name, $parentId, $contentId = null)
public function beforeSave(EventInterface $event, EntityInterface $entity, ArrayObject $options)
{
if (!empty($entity->id)) {
- $this->beforeSaveParentId = $entity->parent_id;
+ try {
+ $this->beforeSaveParentId = $this->get($entity->id)->parent_id;
+ } catch (RecordNotFoundException) {
+ try {
+ $this->beforeSaveParentId = $this->getTrash($entity->id)->parent_id;
+ } catch (\Throwable) {}
+ }
}
if (!empty($entity->name)) {
$entity->name = $this->urlEncode(mb_substr(rawurldecode($entity->name), 0, 230, 'UTF-8'));
diff --git a/plugins/baser-core/src/Model/Validation/BcValidation.php b/plugins/baser-core/src/Model/Validation/BcValidation.php
index de101bd2ee..27e6bced9b 100644
--- a/plugins/baser-core/src/Model/Validation/BcValidation.php
+++ b/plugins/baser-core/src/Model/Validation/BcValidation.php
@@ -23,6 +23,7 @@
use BaserCore\Annotation\NoTodo;
use BaserCore\Annotation\Checked;
use BaserCore\Annotation\UnitTest;
+use Laminas\Diactoros\UploadedFile;
/**
* Class BcValidation
@@ -264,11 +265,21 @@ public static function fileCheck($value, $size)
public static function fileExt($file, $exts)
{
if (!is_array($exts)) $exts = explode(',', $exts);
- if (empty($file)) return true;
+ if($file instanceof UploadedFile) {
+ $fileName = $file->getClientFilename();
+ $type = $file->getClientMediaType();
+ } elseif(is_array($file)) {
+ $fileName = $file['name'];
+ $type = $file['type'];
+ } else {
+ $fileName = $file;
+ $type = null;
+ }
+ if (empty($fileName)) return true;
// FILES形式のチェック
- if (is_array($file) && !empty($file['type'])) {
- $ext = BcUtil::decodeContent($file['type'], $file['name']);
+ if ($type) {
+ $ext = BcUtil::decodeContent($type, $fileName);
if (!in_array($ext, $exts)) {
return false;
}
diff --git a/plugins/baser-core/src/Service/Admin/PluginsAdminService.php b/plugins/baser-core/src/Service/Admin/PluginsAdminService.php
index 67361c5c3f..4cedbe29c0 100644
--- a/plugins/baser-core/src/Service/Admin/PluginsAdminService.php
+++ b/plugins/baser-core/src/Service/Admin/PluginsAdminService.php
@@ -144,6 +144,7 @@ public function whichPhp()
* @return bool
* @checked
* @noTodo
+ * @unitTest
*/
public function isRequireUpdate(string $programVersion, ?string $dbVersion, ?string $availableVersion)
{
@@ -191,6 +192,7 @@ public function getUpdateLog()
* @return array
* @checked
* @noTodo
+ * @unitTest
*/
public function getViewVarsForAdd()
{
diff --git a/plugins/baser-core/src/Service/PluginsService.php b/plugins/baser-core/src/Service/PluginsService.php
index 0705d2c4d1..3bfba79c7e 100644
--- a/plugins/baser-core/src/Service/PluginsService.php
+++ b/plugins/baser-core/src/Service/PluginsService.php
@@ -865,6 +865,7 @@ public function getAvailableCoreVersion()
* @return array|mixed
* @checked
* @noTodo
+ * @unitTest
*/
public function isAvailableCoreUpdates()
{
diff --git a/plugins/baser-core/src/Utility/BcAbstractDetector.php b/plugins/baser-core/src/Utility/BcAbstractDetector.php
index e5ca109bcc..fb831f875b 100644
--- a/plugins/baser-core/src/Utility/BcAbstractDetector.php
+++ b/plugins/baser-core/src/Utility/BcAbstractDetector.php
@@ -77,6 +77,7 @@ public function __construct($name, array $config)
* @return BcAbstractDetector|null
* @checked
* @noTodo
+ * @unitTest
*/
public static function find($name)
{
@@ -93,6 +94,7 @@ public static function find($name)
* @return BcAbstractDetector[]
* @checked
* @noTodo
+ * @unitTest
*/
public static function findAll()
{
@@ -116,6 +118,7 @@ public static function findAll()
* @return BcAbstractDetector|null
* @checked
* @noTodo
+ * @unitTest
*/
public static function findCurrent()
{
diff --git a/plugins/baser-core/src/Utility/BcComposer.php b/plugins/baser-core/src/Utility/BcComposer.php
index 80b4166101..b90f878dfe 100644
--- a/plugins/baser-core/src/Utility/BcComposer.php
+++ b/plugins/baser-core/src/Utility/BcComposer.php
@@ -37,6 +37,13 @@ class BcComposer
*/
public static $composerDir;
+ /**
+ * 現在のディレクトリ
+ *
+ * @var string
+ */
+ public static $currentDir;
+
/**
* export コマンド
*
@@ -62,7 +69,12 @@ class BcComposer
public static function setup(string $php = '', $dir = '')
{
self::checkEnv();
- self::$cd = ($dir)? "cd " . $dir . ';': "cd " . ROOT . DS . ';';
+ $dir = ($dir)? : ROOT . DS;
+ if(!preg_match('/\/$/', $dir)) {
+ $dir .= '/';
+ }
+ self::$currentDir = $dir;
+ self::$cd = "cd " . $dir . ';';
self::$composerDir = ROOT . DS . 'composer' . DS;
self::$export = "export HOME=" . self::$composerDir . ";";
self::$php = ($php)?: 'php';
@@ -79,6 +91,7 @@ public static function setup(string $php = '', $dir = '')
* @throws Exception
* @checked
* @noTodo
+ * @unitTest
*/
public static function checkComposer()
{
@@ -97,6 +110,7 @@ public static function checkComposer()
* @throws Exception
* @checked
* @noTodo
+ * @unitTest
*/
public static function checkEnv()
{
@@ -161,6 +175,7 @@ public static function require(string $package, string $version)
* @return array
* @checked
* @noTodo
+ * @unitTest
*/
public static function update()
{
@@ -173,10 +188,11 @@ public static function update()
* @return array
* @checked
* @noTodo
+ * @unitTest
*/
public static function install()
{
- return self::execCommand('install --with-all-dependencies --ignore-platform-req=ext-xdebug');
+ return self::execCommand('install --ignore-platform-req=ext-xdebug');
}
/**
@@ -185,6 +201,7 @@ public static function install()
* @return array
* @checked
* @noTodo
+ * @unitTest
*/
public static function selfUpdate()
{
@@ -225,6 +242,7 @@ public static function execCommand(string $command)
* @return string
* @checked
* @noTodo
+ * @unitTest
*/
public static function createCommand(string $command)
{
@@ -233,24 +251,62 @@ public static function createCommand(string $command)
/**
* 配布用に composer.json をセットアップする
- * @param string $packagePath
- * @return void
+ * @param string $version
+ * @return array
* @noTodo
* @checked
* @unitTest
*/
- public static function setupComposerForDistribution(string $packagePath)
+ public static function setupComposerForDistribution(string $version)
{
- $composer = $packagePath . 'composer.json';
- $file = new BcFile($composer);
- $data = $file->read();
- $regex = '/^(.+?) "replace": {.+?},\n(.+?)/s';
- $data = preg_replace($regex, "$1$2", $data);
- $regex = '/^(.+?"cakephp\/cakephp": ".+?",)(.+?)$/s';
- $setupVersion = Configure::read('BcApp.setupVersion');
- $replace = "$1\n \"baserproject/baser-core\": \"{$setupVersion}\",$2";
- $data = preg_replace($regex, $replace, $data);
- $file->write($data);
+ self::deleteReplace();
+ $result = self::require('baser-core', $version);
+ (new BcFolder(self::$currentDir . 'vendor'))->delete();
+ mkdir(self::$currentDir . 'vendor');
+ (new BcFile(self::$currentDir . 'vendor' . DS . '.gitkeep'))->create();
+ return $result;
+ }
+
+ /**
+ * changeMinimumStabilityToDev
+ *
+ * @return void
+ * @checked
+ * @noTodo
+ */
+ public static function changeMinimumStabilityToDev()
+ {
+ $file = new BcFile(self::$currentDir . 'composer.json');
+ $json = $file->read();
+
+ if(strpos($json, '"minimum-stability"') !== false) {
+ $json = preg_replace('/"minimum-stability"\s*:\s*".+?"/', '"minimum-stability": "dev"', $json);
+ } else {
+ $json = preg_replace('/"require"\s*:\s*{/', '"minimum-stability": "dev",' . "\n" . ' "require": {', $json);
+ }
+ if(strpos($json, '"prefer-stable"') !== false) {
+ $json = preg_replace('/"prefer-stable"\s*:\s*[a-zA-Z]+/', '"prefer-stable": true', $json);
+ } else {
+ $json = preg_replace('/"require"\s*:\s*{/', '"prefer-stable": true,' . "\n" . ' "require": {', $json);
+ }
+
+ $file->write($json);
+ }
+
+ /**
+ * replace を削除する
+ * @return void
+ */
+ public static function deleteReplace()
+ {
+ $file = new BcFile(self::$currentDir . 'composer.json');
+ $json = $file->read();
+ $data = json_decode($json, true);
+ if(isset($data['replace'])) {
+ unset($data['replace']);
+ }
+ $json = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
+ $file->write($json);
}
}
diff --git a/plugins/baser-core/src/Utility/BcFolder.php b/plugins/baser-core/src/Utility/BcFolder.php
index 95fdfb2c67..6768c54b29 100644
--- a/plugins/baser-core/src/Utility/BcFolder.php
+++ b/plugins/baser-core/src/Utility/BcFolder.php
@@ -429,6 +429,7 @@ public function read($sort = true, $exceptions = false, $fullPath = false)
* @return string
* @checked
* @noTodo
+ * @unitTest
*/
public function pwd(): string
{
diff --git a/plugins/baser-core/src/Utility/BcGmaps.php b/plugins/baser-core/src/Utility/BcGmaps.php
index 803ce157d4..8facdfc2dd 100644
--- a/plugins/baser-core/src/Utility/BcGmaps.php
+++ b/plugins/baser-core/src/Utility/BcGmaps.php
@@ -59,6 +59,7 @@ class BcGmaps
* @return void
* @checked
* @noTodo
+ * @unitTest
*/
public function __construct($apiKey)
{
@@ -75,6 +76,7 @@ public function __construct($apiKey)
* @return array|null
* @checked
* @noTodo
+ * @unitTest
*/
public function getLocation($address)
{
diff --git a/plugins/baser-core/src/Utility/BcLang.php b/plugins/baser-core/src/Utility/BcLang.php
index 842018982f..dbb5ac0db8 100644
--- a/plugins/baser-core/src/Utility/BcLang.php
+++ b/plugins/baser-core/src/Utility/BcLang.php
@@ -43,6 +43,7 @@ class BcLang extends BcAbstractDetector
* @return void
* @checked
* @noTodo
+ * @unitTest
*/
protected function _setConfig(array $config)
{
@@ -55,6 +56,7 @@ protected function _setConfig(array $config)
* @return array
* @checked
* @noTodo
+ * @unitTest
*/
protected function _getDefaultConfig()
{
@@ -69,6 +71,7 @@ protected function _getDefaultConfig()
* @return string
* @checked
* @noTodo
+ * @unitTest
*/
public function getDetectorRegex()
{
@@ -82,6 +85,7 @@ public function getDetectorRegex()
* @return bool
* @checked
* @noTodo
+ * @unitTest
*/
public function isMatchDecisionKey()
{
@@ -99,6 +103,7 @@ public function isMatchDecisionKey()
* @return array|string
* @checked
* @noTodo
+ * @unitTest
*/
static public function parseLang($acceptLanguage)
{
@@ -121,5 +126,5 @@ static public function parseLang($acceptLanguage)
}
return $langs[0];
}
-
+
}
diff --git a/plugins/baser-core/src/Utility/BcSiteConfig.php b/plugins/baser-core/src/Utility/BcSiteConfig.php
index e01cd0f7a2..fa4b873dec 100644
--- a/plugins/baser-core/src/Utility/BcSiteConfig.php
+++ b/plugins/baser-core/src/Utility/BcSiteConfig.php
@@ -29,6 +29,7 @@ class BcSiteConfig
* @return mixed
* @checked
* @noTodo
+ * @unitTest
*/
public static function get($key)
{
diff --git a/plugins/baser-core/src/Utility/BcZip.php b/plugins/baser-core/src/Utility/BcZip.php
index 6cd95a37ed..f02819693e 100644
--- a/plugins/baser-core/src/Utility/BcZip.php
+++ b/plugins/baser-core/src/Utility/BcZip.php
@@ -91,6 +91,7 @@ public function extract($source, $target)
* @return bool
* @checked
* @noTodo
+ * @unitTest
*/
protected function _extractByPhpLib($source, $target)
{
@@ -143,6 +144,7 @@ protected function _extractByCommand($source, $target)
* @return string
* @checked
* @noTodo
+ * @unitTest
*/
protected function _escapePath($path)
{
@@ -161,6 +163,7 @@ protected function _escapePath($path)
* @return void
* @checked
* @noTodo
+ * @unitTest
*/
public function create($sorce, $dist)
{
@@ -179,6 +182,7 @@ public function create($sorce, $dist)
* @return void
* @checked
* @noTodo
+ * @unitTest
*/
private function zipSub($za, $path, $parentPath = '')
{
diff --git a/plugins/baser-core/src/View/Helper/BcAdminHelper.php b/plugins/baser-core/src/View/Helper/BcAdminHelper.php
index 4b8117629b..ff3987a587 100755
--- a/plugins/baser-core/src/View/Helper/BcAdminHelper.php
+++ b/plugins/baser-core/src/View/Helper/BcAdminHelper.php
@@ -425,6 +425,7 @@ public function existsPublishLink()
* @return bool
* @checked
* @noTodo
+ * @unitTest
*/
public function existsAddLink()
{
@@ -477,6 +478,7 @@ public function editLink(): void
* @return void
* @checked
* @noTodo
+ * @unitTest
*/
public function addLink(): void
{
@@ -520,10 +522,11 @@ public function publishLink(): void
* @return void
* @checked
* @noTodo
+ * @unitTest
*/
public function firstAccess()
{
- if($this->getView()->getRequest()->getParam('controller') === 'installations') return;
+ if ($this->getView()->getRequest()->getParam('controller') === 'installations') return;
$this->BcBaser->element('first_access');
}
diff --git a/plugins/baser-core/src/View/Helper/BcAuthHelper.php b/plugins/baser-core/src/View/Helper/BcAuthHelper.php
index f2e77999e5..b2fa90b82f 100644
--- a/plugins/baser-core/src/View/Helper/BcAuthHelper.php
+++ b/plugins/baser-core/src/View/Helper/BcAuthHelper.php
@@ -249,6 +249,7 @@ public function getCurrentLoginUser()
* @return boolean
* @checked
* @noTodo
+ * @unitTest
*/
public function isSuperUser(): bool
{
diff --git a/plugins/baser-core/src/View/Helper/BcBaserHelper.php b/plugins/baser-core/src/View/Helper/BcBaserHelper.php
index 89739dd33e..a46c7ef543 100755
--- a/plugins/baser-core/src/View/Helper/BcBaserHelper.php
+++ b/plugins/baser-core/src/View/Helper/BcBaserHelper.php
@@ -1255,6 +1255,7 @@ public function footer($data = [], $options = [])
* @return void
* @checked
* @noTodo
+ * @unitTest
*/
public function pagination($name = 'default', $data = [], $options = [])
{
diff --git a/plugins/baser-core/src/View/Helper/BcContentsHelper.php b/plugins/baser-core/src/View/Helper/BcContentsHelper.php
index d391aed79e..ed591fc408 100644
--- a/plugins/baser-core/src/View/Helper/BcContentsHelper.php
+++ b/plugins/baser-core/src/View/Helper/BcContentsHelper.php
@@ -572,6 +572,7 @@ public function isParentId($id, $parentId)
* @return bool
* @checked
* @noTodo
+ * @unitTest
*/
public function isFolder()
{
diff --git a/plugins/baser-core/src/View/Helper/BcCsvHelper.php b/plugins/baser-core/src/View/Helper/BcCsvHelper.php
index b1ac28771f..e6574487f5 100755
--- a/plugins/baser-core/src/View/Helper/BcCsvHelper.php
+++ b/plugins/baser-core/src/View/Helper/BcCsvHelper.php
@@ -94,6 +94,7 @@ public function getCsvTmpDataFp()
* @return bool
* @checked
* @noTodo
+ * @unitTest
*/
public function addModelData($modelName, $data)
{
@@ -120,6 +121,7 @@ public function addModelData($modelName, $data)
* @return $csv
* @checked
* @noTodo
+ * @unitTest
*/
public function addModelDatas($modelName, $datas)
{
diff --git a/plugins/baser-core/src/View/Helper/BcFormHelper.php b/plugins/baser-core/src/View/Helper/BcFormHelper.php
index 254a0d2779..b4e9999ad2 100644
--- a/plugins/baser-core/src/View/Helper/BcFormHelper.php
+++ b/plugins/baser-core/src/View/Helper/BcFormHelper.php
@@ -707,33 +707,31 @@ public function editor($fieldName, $options = [])
'style' => 'width:99%;height:540px'
], $options);
- if($options['editor'] === 'none') $options['editor'] = '';
- if ($options['editor']) {
- [$plugin] = pluginSplit($options['editor']);
- if (!Plugin::isLoaded($plugin)) {
- $options['editor'] = '';
- }
- }
-
- if (!$options['editor']) {
+ if(!$options['editor']) {
/** @var BcCkeditorHelper $bcCkeditor */
$bcCkeditor = $this->getView()->BcCkeditor;
return $bcCkeditor->editor($fieldName, $options);
+ } elseif ($options['editor'] !== 'none') {
+ [$plugin] = pluginSplit($options['editor']);
+ if (!Plugin::isLoaded($plugin)) {
+ $options['editor'] = 'none';
+ } else {
+ $className = $options['editor'];
+ [, $editor] = pluginSplit($options['editor']);
+ $this->getView()->loadHelper($editor, ['className' => $className]);
+ }
}
- $className = $options['editor'];
- [, $editor] = pluginSplit($options['editor']);
- $this->getView()->loadHelper($editor, ['className' => $className]);
- if (isset($this->getView()->helpers()->{$editor})) {
- return $this->getView()->{$editor}->editor($fieldName, $options);
- } elseif ($editor === 'none') {
+ if ($options['editor'] === 'none') {
$_options = [];
foreach($options as $key => $value) {
if (!preg_match('/^editor/', $key)) {
$_options[$key] = $value;
}
}
- return $this->input($fieldName, array_merge(['type' => 'textarea'], $_options));
+ return $this->control($fieldName, array_merge(['type' => 'textarea'], $_options));
+ } elseif (isset($this->getView()->helpers()->{$editor})) {
+ return $this->getView()->{$editor}->editor($fieldName, $options);
} else {
/** @var BcCkeditorHelper $bcCkeditor */
$bcCkeditor = $this->getView()->BcCkeditor;
diff --git a/plugins/baser-core/tests/TestCase/Command/ComposerCommandTest.php b/plugins/baser-core/tests/TestCase/Command/ComposerCommandTest.php
index 4e4fad2e58..c1a471b2f7 100644
--- a/plugins/baser-core/tests/TestCase/Command/ComposerCommandTest.php
+++ b/plugins/baser-core/tests/TestCase/Command/ComposerCommandTest.php
@@ -73,7 +73,8 @@ public function testExecute()
$this->assertErrorContains('Composer によるアップデートが失敗しました。update ログを確認してください。');
// composer実行(composer.json を配布用にセットアップ)
- BcComposer::setupComposerForDistribution(ROOT . DS);
+ BcComposer::setup('', ROOT . DS);
+ BcComposer::setupComposerForDistribution('5.0.15');
$this->exec('composer 5.0.15');
$this->assertExitCode(Command::CODE_SUCCESS);
$this->assertOutputContains('Composer によるアップデートが完了しました。');
@@ -104,7 +105,8 @@ public function testExecuteOnUpdateTmp()
copy(ROOT . DS . 'composer.json', TMP . 'update' . DS . 'composer.json');
copy(ROOT . DS . 'composer.lock', TMP . 'update' . DS . 'composer.lock');
// composer.json を配布用にセットアップ
- BcComposer::setupComposerForDistribution(TMP . 'update' . DS);
+ BcComposer::setup('', TMP . 'update' . DS);
+ BcComposer::setupComposerForDistribution('5.0.15');
// composer 実行
$this->exec('composer 5.0.15 --dir ' . TMP . 'update');
// バージョンを確認
diff --git a/plugins/baser-core/tests/TestCase/Command/CreateReleaseCommandTest.php b/plugins/baser-core/tests/TestCase/Command/CreateReleaseCommandTest.php
new file mode 100644
index 0000000000..c3444b863f
--- /dev/null
+++ b/plugins/baser-core/tests/TestCase/Command/CreateReleaseCommandTest.php
@@ -0,0 +1,45 @@
+CreateReleaseCommand = new CreateReleaseCommand();
+ }
+
+ public function tearDown(): void
+ {
+ parent::tearDown();
+ }
+
+ /**
+ * Test createZip
+ *
+ */
+ public function test_createZip()
+ {
+ $this->packagePath = '/var/www/html/plugins/bc-widget-area/';
+ $this->zipFile = TMP . 'basercms-5.1.0.zip';
+
+ //create TMP folder if not exist
+ if (!is_dir(TMP)) {
+ mkdir(TMP, 0777, true);
+ }
+ $this->CreateReleaseCommand->createZip($this->packagePath, '5.1.0');
+
+ $this->assertFileExists($this->zipFile);
+
+ //delete the zip file
+ if (file_exists($this->zipFile)) {
+ unlink($this->zipFile);
+ }
+ }
+}
diff --git a/plugins/baser-core/tests/TestCase/Controller/Admin/PermissionGroupsControllerTest.php b/plugins/baser-core/tests/TestCase/Controller/Admin/PermissionGroupsControllerTest.php
index 77b4437465..b9a8e69c38 100644
--- a/plugins/baser-core/tests/TestCase/Controller/Admin/PermissionGroupsControllerTest.php
+++ b/plugins/baser-core/tests/TestCase/Controller/Admin/PermissionGroupsControllerTest.php
@@ -85,7 +85,7 @@ public function test_add()
'status' => 1
];
//APIをコール
- $this->post('/baser/admin/baser-core/permission_groups/add/1/Admin.json', $data);
+ $this->post('/baser/admin/baser-core/permission_groups/add/1?prefix=Admin', $data);
//フラッシュメッセージを確認
$this->assertFlashMessage('ルールグループ「システム基本設定 テスト」を登録しました。');
//ステータスを確認
diff --git a/plugins/baser-core/tests/TestCase/Controller/Admin/PluginsControllerTest.php b/plugins/baser-core/tests/TestCase/Controller/Admin/PluginsControllerTest.php
index 382b8f7ba0..baa4b07bcf 100644
--- a/plugins/baser-core/tests/TestCase/Controller/Admin/PluginsControllerTest.php
+++ b/plugins/baser-core/tests/TestCase/Controller/Admin/PluginsControllerTest.php
@@ -369,7 +369,8 @@ public function test_get_core_update()
copy(ROOT . DS . 'composer.lock', ROOT . DS . 'composer.bak.lock');
// composer.json を配布用に更新
- BcComposer::setupComposerForDistribution(ROOT . DS);
+ BcComposer::setup('', ROOT . DS);
+ BcComposer::setupComposerForDistribution('5.0.15');
$this->post('/baser/admin/baser-core/plugins/get_core_update', [
'targetVersion' => '5.0.15',
diff --git a/plugins/baser-core/tests/TestCase/Event/BcEventListenerTest.php b/plugins/baser-core/tests/TestCase/Event/BcEventListenerTest.php
index bb1b75ae56..3fdebf0398 100644
--- a/plugins/baser-core/tests/TestCase/Event/BcEventListenerTest.php
+++ b/plugins/baser-core/tests/TestCase/Event/BcEventListenerTest.php
@@ -45,4 +45,39 @@ public function testGetAction()
$result = $this->BcEventListener->getAction(false);
$this->assertEquals('Index', $result);
}
+
+ /**
+ * Test isAction
+ * @param $currentAction
+ * @param $actionToCheck
+ * @param $isContainController
+ * @param $expected
+ * @dataProvider isActionDataProvider
+ */
+ public function testIsAction($currentAction, $actionToCheck, $isContainController, $expected)
+ {
+ $this->BcEventListener = $this->getMockBuilder(BcEventListener::class)
+ ->onlyMethods(['getAction'])
+ ->getMock();
+
+ $this->BcEventListener->method('getAction')
+ ->with($isContainController)
+ ->willReturn($currentAction);
+
+ $result = $this->BcEventListener->isAction($actionToCheck, $isContainController);
+ $this->assertEquals($expected, $result);
+ }
+
+ public static function isActionDataProvider()
+ {
+ return [
+ ['Users.Index', 'Users.Index', true, true],
+ ['Users.Index', 'Users.View', true, false],
+ ['Users.Index', ['Users.View', 'Users.Index'], true, true],
+ ['Users.Index', ['Users.View', 'Users.Edit'], true, false],
+ ['Index', 'Index', false, true],
+ ['Index', 'View', false, false],
+ ['Users.Index', 'Users.Index', true, true],
+ ];
+ }
}
diff --git a/plugins/baser-core/tests/TestCase/Model/Table/AppTableTest.php b/plugins/baser-core/tests/TestCase/Model/Table/AppTableTest.php
index 405e4f649f..b95038b1f8 100644
--- a/plugins/baser-core/tests/TestCase/Model/Table/AppTableTest.php
+++ b/plugins/baser-core/tests/TestCase/Model/Table/AppTableTest.php
@@ -13,6 +13,7 @@
use BaserCore\Model\Table\AppTable;
use BaserCore\Test\Factory\ContentFolderFactory;
+use BaserCore\Test\Factory\PluginFactory;
use BaserCore\Test\Scenario\PermissionGroupsScenario;
use BaserCore\Test\Scenario\PluginsScenario;
use BaserCore\TestSuite\BcTestCase;
@@ -243,34 +244,6 @@ public static function replaceTextDataProvider()
];
}
- /**
- * test beforeFind
- * @return void
- */
- public function testBeforeFind()
- {
- ContentFolderFactory::make(2)->persist();
- $this->entryEventToMock(self::EVENT_LAYER_MODEL, 'BaserCore.ContentFolders.beforeFind', function(Event $event) {
- $event->setData('options', ['limit' => 1]);
- });
- $contentFolders = $this->getTableLocator()->get('BaserCore.ContentFolders');
- $this->assertEquals(1, $contentFolders->find()->all()->count());
- }
-
- /**
- * test afterFind
- * @return void
- */
- public function testAfterFind()
- {
- ContentFolderFactory::make(2)->persist();
- $this->entryEventToMock(self::EVENT_LAYER_MODEL, 'BaserCore.ContentFolders.afterFind', function(Event $event) {
- $event->setData('result', $event->getData('result')->limit(1));
- });
- $contentFolders = $this->getTableLocator()->get('BaserCore.ContentFolders');
- $this->assertEquals(1, $contentFolders->find()->all()->count());
- }
-
/**
* testSortdown
* @return void
diff --git a/plugins/baser-core/tests/TestCase/Model/Table/ContentsTableTest.php b/plugins/baser-core/tests/TestCase/Model/Table/ContentsTableTest.php
index 6664abf2a6..8af2bbd3f8 100644
--- a/plugins/baser-core/tests/TestCase/Model/Table/ContentsTableTest.php
+++ b/plugins/baser-core/tests/TestCase/Model/Table/ContentsTableTest.php
@@ -13,14 +13,13 @@
use ArrayObject;
use BaserCore\Service\BcDatabaseService;
+use BaserCore\Test\Factory\ContentFactory;
use BaserCore\Test\Scenario\ContentsScenario;
use BaserCore\Test\Scenario\InitAppScenario;
use BaserCore\Test\Scenario\SitesScenario;
use BaserCore\Test\Scenario\SmallSetContentsScenario;
-use Cake\ORM\Entity;
use CakephpFixtureFactories\Scenario\ScenarioAwareTrait;
use ReflectionClass;
-use Cake\Core\Configure;
use Cake\I18n\FrozenTime;
use Cake\Validation\Validator;
use BaserCore\Model\Entity\Content;
@@ -289,11 +288,12 @@ public static function getUniqueNameDataProvider()
public function testBeforeSave()
{
$value = "テスト";
- $data = new Entity([
+ ContentFactory::make([
'id' => 100,
'parent_id' => 6,
- 'name' => $value
- ]);
+ 'name' => $value,
+ ])->persist();
+ $data = ContentFactory::get(100);
$result = $this->Contents->dispatchEvent('Model.beforeSave', ['entity' => $data, 'options' => new ArrayObject()]);
$this->assertEquals(6, $this->Contents->beforeSaveParentId);
// nameフィールドがエンコードされてるかをテスト
diff --git a/plugins/baser-core/tests/TestCase/Service/Admin/PluginsAdminServiceTest.php b/plugins/baser-core/tests/TestCase/Service/Admin/PluginsAdminServiceTest.php
index a480ce581c..cc77f54d8b 100644
--- a/plugins/baser-core/tests/TestCase/Service/Admin/PluginsAdminServiceTest.php
+++ b/plugins/baser-core/tests/TestCase/Service/Admin/PluginsAdminServiceTest.php
@@ -112,4 +112,41 @@ public function test_getUpdateLog()
}
}
+ /**
+ * test isRequireUpdate
+ * @param string $programVersion
+ * @param string|null $dbVersion
+ * @param string|null $availableVersion
+ * @param bool $expected
+ * @dataProvider isRequireUpdateDataProvider
+ */
+ public function test_isRequireUpdate(string $programVersion, ?string $dbVersion, ?string $availableVersion, bool $expected)
+ {
+ $result = $this->PluginsAdmin->isRequireUpdate($programVersion, $dbVersion, $availableVersion);
+ $this->assertEquals($expected, $result);
+ }
+
+ public static function isRequireUpdateDataProvider()
+ {
+ return [
+ ['1.0.0', '1.0.0', '1.1.0', true],
+ ['1.0.0', '1.0.0', '0.9.0', false],
+ ['1.0.0', '1.0.0', '1.0.0', false],
+ ['1.1.0', '1.0.0', '1.1.0', false],
+ ['1.0.0', '1.0.0', null, false],
+ ['invalid_version', '1.0.0', '1.1.0', false],
+ ['1.0.0', 'invalid_version', '1.1.0', false],
+ ['1.0.0', '1.0.0', 'invalid_version', false],
+ ];
+ }
+
+ /**
+ * test getViewVarsForAdd
+ */
+ public function test_getViewVarsForAdd()
+ {
+ $vars = $this->PluginsAdmin->getViewVarsForAdd();
+ $this->assertTrue(isset($vars['isPluginsDirWritable']));
+ }
+
}
diff --git a/plugins/baser-core/tests/TestCase/Service/PluginsServiceTest.php b/plugins/baser-core/tests/TestCase/Service/PluginsServiceTest.php
index c37886c7ed..1cc3f8a0ba 100644
--- a/plugins/baser-core/tests/TestCase/Service/PluginsServiceTest.php
+++ b/plugins/baser-core/tests/TestCase/Service/PluginsServiceTest.php
@@ -573,7 +573,8 @@ public function testGetCoreUpdateAndUpdateCoreFiles()
copy(ROOT . DS . 'composer.lock', ROOT . DS . 'composer.bak.lock');
// composer.json を配布用に更新
- BcComposer::setupComposerForDistribution(ROOT . DS);
+ BcComposer::setup('', ROOT . DS);
+ BcComposer::setupComposerForDistribution('5.0.15');
// getCoreUpdate 実行
$this->Plugins->getCoreUpdate('5.0.15', 'php');
@@ -615,7 +616,8 @@ public function testRollbackCore()
// composer.json をバックアップ
copy(ROOT . DS . 'composer.json', ROOT . DS . 'composer.bak.json');
// composer.json を配布用に更新
- BcComposer::setupComposerForDistribution(ROOT . DS);
+ BcComposer::setup('', ROOT . DS);
+ BcComposer::setupComposerForDistribution('5.1.1');
// ロールバック
$this->Plugins->rollbackCore('5.0.15', 'php');
@@ -632,4 +634,35 @@ public function testRollbackCore()
(new BcFolder(ROOT . DS . 'vendor' . DS . 'baserproject'))->delete();
}
+ /**
+ * test isAvailableCoreUpdates
+ */
+ public function testIsAvailableCoreUpdates()
+ {
+ $versionPath = Plugin::path('BaserCore') . 'VERSION.txt';
+ $versionBakPath = Plugin::path('BaserCore') . 'VERSION.bak.txt';
+ $rssPath = WWW_ROOT . 'baser-core.rss';
+
+ // バックアップを取得する
+ copy($versionPath, $versionBakPath);
+ // オートアップデートを有効化
+ SiteConfigFactory::make(['name' => 'use_update_notice', 'value' => true])->persist();
+ // BcApp.coreReleaseUrl を書き換える
+ Configure::write('BcApp.coreReleaseUrl', $rssPath);
+ // バージョンを書き換える
+ $file = new BcFile($versionPath);
+ $file->write('5.0.0');
+ // RSSを生成
+ $this->createReleaseRss(['5.0.2', '5.0.1', '5.0.0']);
+ // キャッシュを削除
+ Cache::delete('coreReleaseInfo', '_bc_update_');
+
+ // 実行
+ $rs = $this->Plugins->isAvailableCoreUpdates();
+ $this->assertEquals(['5.0.2', '5.0.1'], $rs);
+
+ // 初期化
+ rename($versionBakPath, $versionPath);
+ unlink($rssPath);
+ }
}
diff --git a/plugins/baser-core/tests/TestCase/Utility/BcAbstractDetectorTest.php b/plugins/baser-core/tests/TestCase/Utility/BcAbstractDetectorTest.php
new file mode 100644
index 0000000000..f5ab3fac85
--- /dev/null
+++ b/plugins/baser-core/tests/TestCase/Utility/BcAbstractDetectorTest.php
@@ -0,0 +1,103 @@
+
+ * Copyright (c) NPO baser foundation
+ *
+ * @copyright Copyright (c) NPO baser foundation
+ * @link https://basercms.net baserCMS Project
+ * @since 5.0.0
+ * @license https://basercms.net/license/index.html MIT License
+ */
+
+namespace BaserCore\Test\TestCase\Utility;
+
+use BaserCore\TestSuite\BcTestCase;
+use BaserCore\Utility\BcAgent;
+use Cake\Core\Configure;
+
+/**
+ * Class BcAbstractDetector
+ *
+ */
+class BcAbstractDetectorTest extends BcTestCase
+{
+
+ /**
+ * set up
+ */
+ public function setUp(): void
+ {
+ parent::setUp();
+ }
+
+ /**
+ * tearDown
+ *
+ * @return void
+ */
+ public function tearDown(): void
+ {
+ parent::tearDown();
+ }
+
+ /**
+ * test find
+ */
+ public function testFind()
+ {
+ Configure::write("BcApp.smartphone", true);
+
+ //Configureにnameがある場合、
+ $rs = BcAgent::find('smartphone');
+ $this->assertEquals('smartphone', $rs->name);
+ $this->assertEquals('device', $rs->type);
+
+ //Configureにnameがない場合、
+ $this->assertNull(BcAgent::find('test'));
+ }
+
+ /**
+ * test findAll
+ */
+ public function testFindAll()
+ {
+ Configure::write("BcEnv.isInstalled", false);
+
+ //isInstalled=false
+ $agents = BcAgent::findAll();
+ $this->assertCount(0, $agents);
+
+ //isInstalled=true
+ Configure::write("BcEnv.isInstalled", true);
+ $agents = BcAgent::findAll();
+ $this->assertCount(2, $agents);
+ }
+
+ /**
+ * test findCurrent
+ * @param string $agent ユーザーエージェント名
+ * @param string $expect 期待値
+ *
+ * @dataProvider findCurrentDataProvider
+ */
+ public function testFindCurrent($agent, $expect)
+ {
+ $_SERVER["HTTP_USER_AGENT"] = $agent;
+ $result = BcAgent::findCurrent();
+ if (is_null($expect)) {
+ $this->assertNull($result);
+ } else {
+ $this->assertEquals($expect, $result->name);
+ }
+ }
+
+ public static function findCurrentDataProvider(): array
+ {
+ return [
+ ['Googlebot-Mobile', 'mobile'],
+ ['DoCoMo', 'mobile'],
+ ['iPhone', 'smartphone'],
+ ['hoge', null],
+ ];
+ }
+}
diff --git a/plugins/baser-core/tests/TestCase/Utility/BcComposerTest.php b/plugins/baser-core/tests/TestCase/Utility/BcComposerTest.php
index 793d0e8c93..bc9208cf92 100644
--- a/plugins/baser-core/tests/TestCase/Utility/BcComposerTest.php
+++ b/plugins/baser-core/tests/TestCase/Utility/BcComposerTest.php
@@ -51,10 +51,18 @@ public function testSetup()
// 環境を変更
BcComposer::setup('/usr/local/bin/php', '/var/www/html/tmp/update');
- $this->assertEquals('cd /var/www/html/tmp/update;', BcComposer::$cd);
+ $this->assertEquals('cd /var/www/html/tmp/update/;', BcComposer::$cd);
$this->assertEquals('/usr/local/bin/php', BcComposer::$php);
}
+ /**
+ * test checkEnv
+ */
+ public function testCheckEnv()
+ {
+ $this->assertNull(BcComposer::checkEnv());
+ }
+
/**
* installComposer
*/
@@ -75,6 +83,31 @@ public function test_installComposer()
$this->assertFileExists(BcComposer::$composerDir . 'composer.phar');
}
+ /**
+ * test checkComposer
+ */
+ public function testCheckComposer()
+ {
+ BcComposer::$composerDir = '';
+
+ BcComposer::setup();
+ BcComposer::checkComposer();
+ //実行問題なし場合、composer.pharが生成された
+ $this->assertFileExists(BcComposer::$composerDir . 'composer.phar');
+ }
+
+ /**
+ * test checkComposer エラーを発生した場合
+ */
+ public function testCheckComposerError()
+ {
+ BcComposer::$composerDir = '';
+
+ $this->expectException(\Exception::class);
+ $this->expectExceptionMessage('composer がインストールできません。All settings correct for using Composer');
+ BcComposer::checkComposer();
+ }
+
/**
* test setVersion
*/
@@ -137,6 +170,43 @@ public function test_require()
BcComposer::update();
}
+ /**
+ * test update
+ */
+ public function testUpdate()
+ {
+ $orgPath = ROOT . DS . 'composer.json';
+ $backupPath = ROOT . DS . 'composer.json.bak';
+ $orgLockPath = ROOT . DS . 'composer.lock';
+ $backupLockPath = ROOT . DS . 'composer.lock.bak';
+
+ // バックアップ作成
+ copy($orgPath, $backupPath);
+ copy($orgLockPath, $backupLockPath);
+
+ // replace を削除
+ // baserCMS5.0.0が、CakePHP5.0.10 に依存するため、一旦、CakePHP5.0.10 に戻す
+ $file = new BcFile($orgPath);
+ $data = $file->read();
+ $regex = '/("replace": {.+?},)/s';
+ $data = str_replace('"cakephp/cakephp": "5.0.*"', '"cakephp/cakephp": "5.0.10"', $data);
+ $data = preg_replace($regex, '', $data);
+ $file->write($data);
+ BcComposer::setup('php');
+
+ $rs = BcComposer::update();
+ //戻り値を確認
+ $this->assertEquals(0, $rs['code']);
+ $this->assertEquals('A script named install would override a Composer command and has been skipped', $rs['out'][0]);
+
+ // バックアップ復元
+ rename($backupPath, $orgPath);
+ rename($backupLockPath, $orgLockPath);
+ $folder = new BcFolder(ROOT . DS . 'vendor' . DS . 'baserproject');
+ $folder->delete();
+ BcComposer::install();
+ }
+
/**
* test clearCache
*/
@@ -150,24 +220,116 @@ public function testClearCache()
$this->assertFileDoesNotExist(ROOT . DS . 'composer' . DS . '.composer' . DS . 'cache' . DS . '.htaccess');
}
+ /**
+ * test install
+ */
+ public function testInstall()
+ {
+ BcComposer::setup('php');
+
+ $rs = BcComposer::install();
+ //戻り値を確認
+ $this->assertEquals(0, $rs['code']);
+ $this->assertEquals('A script named install would override a Composer command and has been skipped', $rs['out'][0]);
+ }
+
+ /**
+ * test selfUpdate
+ */
+ public function testSelfUpdate()
+ {
+ BcComposer::setup();
+ $rs = BcComposer::selfUpdate();
+
+ $this->assertEquals(0, $rs['code']);
+ $this->assertEquals("A script named install would override a Composer command and has been skipped", $rs['out'][0]);
+ $this->assertStringContainsString("You are already using the latest available Composer version", $rs['out'][1]);
+ }
+
/**
* test setupComposerForDistribution
*/
public function testSetupComposerForDistribution()
{
// composer.json をバックアップ
- $composer = ROOT . DS . 'composer.json';
- copy($composer, ROOT . DS . 'composer.json.bak');
+ $srcComposerJsonPath = __DIR__ . DS . 'assets' . DS . 'composer-5.1.1.json';
+ $srcComposerLockPath = __DIR__ . DS . 'assets' . DS . 'composer-5.1.1.lock';
+ $composerJson = TMP_TESTS . 'composer.json';
+ $composerLock = TMP_TESTS . 'composer.lock';
+ copy($srcComposerJsonPath, $composerJson);
+ copy($srcComposerLockPath, $composerLock);
// 実行
- BcComposer::setupComposerForDistribution(ROOT . DS);
- $file = new BcFile($composer);
+ BcComposer::setup('', TMP_TESTS);
+ BcComposer::setupComposerForDistribution('5.1.1');
+ $file = new BcFile($composerJson);
$data = $file->read();
$this->assertNotFalse(strpos($data, '"baserproject/baser-core": '));
$this->assertFalse(strpos($data, '"replace": {'));
+ $file = new BcFile($composerLock);
+ $data = $file->read();
+ $this->assertNotFalse(strpos($data, '"baserproject/baser-core"'));
// バックアップをリストア
- rename(ROOT . DS . 'composer.json.bak', ROOT . DS . 'composer.json');
+ unlink($composerJson);
+ unlink($composerLock);
+ (new BcFolder(TMP_TESTS . 'vendor'))->delete();
+ }
+
+ /**
+ * test createCommand
+ * @param $inputCommand
+ * @param $expectedCommand
+ * @dataProvider createCommandDataProvider
+ */
+ public function testCreateCommand($inputCommand, $expectedCommand)
+ {
+ BcComposer::$cd = 'cd /var/www/html/;';
+ BcComposer::$export = 'export HOME=/var/www/html/composer/;';
+ BcComposer::$php = 'php';
+ BcComposer::$composerDir = '/var/www/html/composer/';
+
+ $result = BcComposer::createCommand($inputCommand);
+ $this->assertEquals($expectedCommand, $result);
+ }
+
+ public static function createCommandDataProvider()
+ {
+ return [
+ [
+ 'self-update',
+ "cd /var/www/html/; export HOME=/var/www/html/composer/; echo y | php /var/www/html/composer/composer.phar self-update 2>&1"
+ ],
+ [
+ 'install',
+ "cd /var/www/html/; export HOME=/var/www/html/composer/; echo y | php /var/www/html/composer/composer.phar install 2>&1"
+ ],
+ [
+ 'require vendor/package',
+ "cd /var/www/html/; export HOME=/var/www/html/composer/; echo y | php /var/www/html/composer/composer.phar require vendor/package 2>&1"
+ ],
+ ];
+ }
+
+ /**
+ * test deleteReplace
+ * @return void
+ */
+ public function testDeleteReplace()
+ {
+ $orgPath = ROOT . DS . 'composer.json';
+ $backupPath = ROOT . DS . 'composer.json.bak';
+
+ // バックアップ作成
+ copy($orgPath, $backupPath);
+ BcComposer::setup();
+ BcComposer::deleteReplace();
+ $file = new BcFile($orgPath);
+ $data = $file->read();
+ $this->assertFalse(strpos($data, '"replace": {'));
+
+ // バックアップ復元
+ rename($backupPath, $orgPath);
}
}
diff --git a/plugins/baser-core/tests/TestCase/Utility/BcFolderTest.php b/plugins/baser-core/tests/TestCase/Utility/BcFolderTest.php
index 73289aaae5..9176a8b821 100644
--- a/plugins/baser-core/tests/TestCase/Utility/BcFolderTest.php
+++ b/plugins/baser-core/tests/TestCase/Utility/BcFolderTest.php
@@ -165,10 +165,29 @@ public function test_move()
$this->assertFileDoesNotExist($path. DS. 'test.txt');
$this->assertFileExists($des. DS. 'test.txt');
$folder2->delete();
-
}
+ /**
+ * test pwd
+ * @param string $path
+ * @param string $expected
+ * @dataProvider pwdDataProvider
+ */
+ public function test_pwd($path, $expected)
+ {
+ $bcFolder = new BcFolder($path);
+ $result = $bcFolder->pwd();
+ $this->assertEquals($expected, $result);
+ }
-
-
+ public static function pwdDataProvider()
+ {
+ return [
+ ['/', '/'],
+ ['/var/www/html', '/var/www/html'],
+ ['plugins/baser-core', 'plugins/baser-core'],
+ ['/path/with spaces/folder', '/path/with spaces/folder'],
+ ['', ''],
+ ];
+ }
}
diff --git a/plugins/baser-core/tests/TestCase/Utility/BcGmapsTest.php b/plugins/baser-core/tests/TestCase/Utility/BcGmapsTest.php
index 7c13eafefd..37aa5d450e 100644
--- a/plugins/baser-core/tests/TestCase/Utility/BcGmapsTest.php
+++ b/plugins/baser-core/tests/TestCase/Utility/BcGmapsTest.php
@@ -9,8 +9,11 @@
* @license https://basercms.net/license/index.html
*/
namespace BaserCore\Test\TestCase\Utility;
+use A\B;
+use BaserCore\Error\BcException;
use BaserCore\TestSuite\BcTestCase;
use BaserCore\Utility\BcGmaps;
+use Cake\Cache\Cache;
/**
* Class BcGmapsTest
@@ -25,6 +28,7 @@ class BcGmapsTest extends BcTestCase
public function setUp(): void
{
parent::setUp();
+ $this->BcGmaps = new BcGmaps('api-key');
}
/**
@@ -38,23 +42,31 @@ public function tearDown(): void
}
/**
- * getInfoLocation
- * 2018/07/09 ryuring TravisCI環境にて、タイミングにより、データを取得できず処理に失敗するので一旦コメントアウト
+ * test __construct
*/
- public function testGetInfoLocation()
+ public function test__construct()
{
- $this->markTestIncomplete('このテストは、まだ実装されていません。');
-// $result = $this->BcGmaps->getInfoLocation('日本');
-// $this->assertNotEmpty($result, 'getInfoLocationで情報を取得できません');
-//
-// $lat = round($result['latitude'], 1);
-// $lng = round($result['longitude'], 1);
-//
-// $this->assertEquals(36.2, $lat, '位置情報を正しく取得できません');
-// $this->assertEquals(138.3, $lng, '位置情報を正しく取得できません');
-//
-// $result = $this->BcGmaps->getInfoLocation('');
-// $this->assertNull($result, 'getInfoLocationに空のアドレスに値が返ってきます');
+ $_gmapsApiUrl = $this->getPrivateProperty($this->BcGmaps, '_gmapsApiUrl');
+ $this->assertEquals('https://maps.googleapis.com/maps/api/geocode/xml?key=api-key', $_gmapsApiUrl);
+
+ $this->expectException(BcException::class);
+ $this->expectExceptionMessage('システム基本設定にて、Google Maps API キーを入力してください。');
+ new BcGmaps(false);
+ }
+
+ /**
+ * test getLocation
+ */
+ public function testGetLocation()
+ {
+ Cache::write('5pel5pys', '33.0661504,126.551622,5z', '_bc_gmaps_');
+ $result = $this->BcGmaps->getLocation('日本');
+ $this->assertEquals('33.0661504,126.551622,5z', $result);
+
+ $result = $this->BcGmaps->getLocation('');
+ $this->assertNull($result, 'getLocationに空のアドレスに値が返ってきます');
+
+ Cache::delete('5pel5pys', '_bc_gmaps_');
}
}
diff --git a/plugins/baser-core/tests/TestCase/Utility/BcLangTest.php b/plugins/baser-core/tests/TestCase/Utility/BcLangTest.php
new file mode 100644
index 0000000000..efc549e300
--- /dev/null
+++ b/plugins/baser-core/tests/TestCase/Utility/BcLangTest.php
@@ -0,0 +1,136 @@
+ 'ja-JP']);
+ //対象メソッドをコール
+ $this->execPrivateMethod($bcLang, '_setConfig', [['langs' => 'ja-JP']]);
+ //decisionKeysがlangsを設定できるか確認すること
+ $this->assertEquals('ja-JP', $bcLang->decisionKeys);
+ }
+
+ /**
+ * test _getDefaultConfig
+ */
+ public function testGetDefaultConfig()
+ {
+ $bcLang = new BcLang('BcLang', ['langs' => 'ja-JP']);
+ $rs = $this->execPrivateMethod($bcLang, '_getDefaultConfig', []);
+ $this->assertEquals($rs['langs'], []);
+ }
+
+ public function testGetPattern()
+ {
+ $this->markTestIncomplete('このテストは、まだ実装されていません。');
+ }
+
+ /**
+ * Test parseLang
+ * @dataProvider parseLangDataProvider
+ */
+ public function testParseLang($acceptLanguage, $expected)
+ {
+ $result = BcLang::parseLang($acceptLanguage);
+ $this->assertEquals($expected, $result);
+ }
+
+ public static function parseLangDataProvider()
+ {
+ return [
+ [null, 'ja'],
+ ['', 'ja'],
+ ['en-US', 'en'],
+ ['fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5', 'fr'],
+ ['en-US,en;q=0.9', 'en'],
+ ['zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', 'zh'],
+ ['en-US,en;q=0.8,es-ES;q=0.5,es;q=0.3', 'en'],
+ ['123,456', '123'],
+ ];
+ }
+
+ /**
+ * Test isMatchDecisionKey
+ * @param string $acceptLanguage
+ * @param string $detectorRegex
+ * @param bool $expected
+ * @dataProvider isMatchDecisionKeyDataProvider
+ */
+ public function testIsMatchDecisionKey($acceptLanguage, $detectorRegex, $expected)
+ {
+ $request = $this->getMockBuilder('Cake\Http\ServerRequest')->getMock();
+ $config = [];
+
+ $BcLang = $this->getMockBuilder(BcLang::class)
+ ->setConstructorArgs([$request, $config])
+ ->onlyMethods(['getDetectorRegex'])
+ ->getMock();
+
+ $BcLang->method('getDetectorRegex')
+ ->willReturn($detectorRegex);
+
+ // Set $_SERVER['HTTP_ACCEPT_LANGUAGE']
+ $_SERVER['HTTP_ACCEPT_LANGUAGE'] = $acceptLanguage;
+
+ $result = $BcLang->isMatchDecisionKey();
+ $this->assertEquals($expected, $result);
+
+ // Clean up
+ unset($_SERVER['HTTP_ACCEPT_LANGUAGE']);
+ }
+
+ public static function isMatchDecisionKeyDataProvider()
+ {
+ return [
+ ['en-US,en;q=0.9', '/en/i', true],
+ ['ja,en-US;q=0.9,en;q=0.8', '/ja|en/i', true],
+ ['fr-FR,fr;q=0.9', '/de|es/i', false],
+ ['', '/en|ja/i', true],
+ [null, '/en|ja/i', true],
+ ['', '/ja/i', true],
+ ['', '/en/i', false],
+ ];
+ }
+
+ /**
+ * Test getDetectorRegex
+ * @param array $decisionKeys
+ * @param string $expected
+ * @dataProvider getDetectorRegexDataProvider
+ */
+ public function testGetDetectorRegex($decisionKeys, $expected)
+ {
+ $lang = new BcLang('lang', ['langs' => $decisionKeys]);
+ $result = $lang->getDetectorRegex();
+ $this->assertEquals($expected, $result);
+ }
+
+ public static function getDetectorRegexDataProvider()
+ {
+ return [
+ [['en'], '/en/i'],
+ [['en', 'ja', 'fr'], '/en|ja|fr/i'],
+ [['en-US', 'zh-CN', 'pt-BR'], '/en\-US|zh\-CN|pt\-BR/i'],
+ [[], '//i'],
+ ];
+ }
+}
diff --git a/plugins/baser-core/tests/TestCase/Utility/BcSiteConfigTest.php b/plugins/baser-core/tests/TestCase/Utility/BcSiteConfigTest.php
new file mode 100644
index 0000000000..e307d77264
--- /dev/null
+++ b/plugins/baser-core/tests/TestCase/Utility/BcSiteConfigTest.php
@@ -0,0 +1,29 @@
+ 'version', 'value' => '2.0.0'])->persist();
+ $this->assertEquals('2.0.0', BcSiteConfig::get('version'));
+
+ //field not exist
+ $this->assertEquals(null, BcSiteConfig::get('not_exist'));
+ }
+}
diff --git a/plugins/baser-core/tests/TestCase/Utility/BcZipTest.php b/plugins/baser-core/tests/TestCase/Utility/BcZipTest.php
new file mode 100644
index 0000000000..b16256d332
--- /dev/null
+++ b/plugins/baser-core/tests/TestCase/Utility/BcZipTest.php
@@ -0,0 +1,188 @@
+BcZip = new BcZip();
+ }
+
+ public function tearDown(): void
+ {
+ parent::tearDown();
+ }
+
+ /**
+ * test create
+ */
+ public function testCreate()
+ {
+ // create zip file
+ $zipSrcPath = TMP . 'zip' . DS;
+ mkdir($zipSrcPath);
+
+ file_put_contents($zipSrcPath . '/test.txt', 'Test content');
+ $zipFile = sys_get_temp_dir() . '/test.zip';
+
+ $this->BcZip->create($zipSrcPath, $zipFile);
+ $this->assertFileExists($zipFile);
+
+ // check zip file
+ $za = new \ZipArchive();
+ $za->open($zipFile);
+ $this->assertTrue($za->locateName('test.txt') !== false);
+ $za->close();
+
+ // clean up
+ unlink($zipFile);
+ unlink($zipSrcPath . '/test.txt');
+ rmdir($zipSrcPath);
+ }
+
+ /**
+ * test _extractByPhpLib
+ */
+ public function testExtractByPhpLib()
+ {
+ // create zip file
+ $zipSrcPath = TMP . 'zip' . DS;
+ $sourceZip = $zipSrcPath . 'test.zip';
+ $targetPath = TMP . 'extracted' . DS;
+
+ if (!file_exists($zipSrcPath)) {
+ mkdir($zipSrcPath, 0777, true);
+ }
+ if (!file_exists($targetPath)) {
+ mkdir($targetPath, 0777, true);
+ }
+
+ $zip = new \ZipArchive();
+ $zip->open($sourceZip, \ZipArchive::CREATE);
+ $zip->addFromString('testfolder' . DS . 'testfile.txt', 'This is a test file.');
+ $zip->close();
+
+ $result = $this->execPrivateMethod($this->BcZip, '_extractByPhpLib', [$sourceZip, $targetPath]);
+
+ $this->assertTrue($result);
+ $this->assertEquals('testfolder', $this->BcZip->topArchiveName);
+
+ // check extracted file
+ $extractedFile = $targetPath . 'testfolder' . DS . 'testfile.txt';
+ $this->assertFileExists($extractedFile);
+ $this->assertEquals('This is a test file.', file_get_contents($extractedFile));
+
+ // clean up
+ $folder = new BcFolder($zipSrcPath);
+ $folder->delete();
+ $folder = new BcFolder($targetPath);
+ $folder->delete();
+ }
+
+ /**
+ * test testExtractByPhpLibReturnsFalse
+ */
+ public function testExtractByPhpLibReturnsFalse()
+ {
+ $zipSrcPath = TMP . 'zip' . DS;
+ $sourceZip = $zipSrcPath . 'invalid.zip';
+ $targetPath = TMP . 'extracted' . DS;
+
+ if (!file_exists($zipSrcPath)) {
+ mkdir($zipSrcPath, 0777, true);
+ }
+ if (!file_exists($targetPath)) {
+ mkdir($targetPath, 0777, true);
+ }
+
+ $result = $this->execPrivateMethod($this->BcZip, '_extractByPhpLib', [$sourceZip, $targetPath]);
+
+ $this->assertFalse($result);
+ //check target path is empty
+ $this->assertEmpty(glob($targetPath . '*'));
+
+ // clean up
+ $folder = new BcFolder($zipSrcPath);
+ $folder->delete();
+ $folder = new BcFolder($targetPath);
+ $folder->delete();
+ }
+
+ /**
+ * test _escapePath
+ * @param $path
+ * @param $expected
+ * @dataProvider escapePathDataProvider
+ */
+ public function test_escapePath($path, $expected)
+ {
+ $result = $this->execPrivateMethod($this->BcZip, '_escapePath', [$path]);
+ $this->assertEquals($expected, $result);
+ }
+
+ public static function escapePathDataProvider()
+ {
+ return [
+ ['/var/www/html', "''/'var'/'www'/'html'"],
+ ['/path/to/some file.txt', "''/'path'/'to'/'some file.txt'"],
+ ['/', "''/''"],
+ ['', "''"],
+ [
+ '/path/with/$pecial&chars',
+ "''/'path'/'with'/'\$pecial&chars'",
+ ],
+ ];
+ }
+
+ /**
+ * test zipSub
+ */
+ public function testZipSub()
+ {
+ //create zip file
+ $tempDir = TMP . 'zip_test_' . uniqid();
+ $subDir = $tempDir . DS . 'subdir';
+ $zipFile = TMP . 'test_archive.zip';
+
+ mkdir($tempDir, 0755, true);
+ mkdir($subDir, 0755, true);
+
+ file_put_contents($tempDir . DS . 'file1.txt', 'Content of file 1');
+ file_put_contents($subDir . DS . 'file2.txt', 'Content of file 2');
+
+ $this->BcZip->create($tempDir, $zipFile);
+
+ //check zip file
+ $this->assertFileExists($zipFile);
+
+ //check content of zip file
+ $zip = new ZipArchive();
+ $this->assertTrue($zip->open($zipFile));
+
+ // 3 files: file1.txt, subdir/file2.txt, subdir
+ $this->assertEquals(3, $zip->numFiles);
+
+ $this->assertTrue($zip->locateName('file1.txt') !== false);
+ $this->assertTrue($zip->locateName('subdir/file2.txt') !== false);
+
+ $fileContent1 = $zip->getFromName('file1.txt');
+ $fileContent2 = $zip->getFromName('subdir/file2.txt');
+
+ $this->assertEquals('Content of file 1', $fileContent1);
+ $this->assertEquals('Content of file 2', $fileContent2);
+
+ $zip->close();
+
+ //clean up
+ unlink($zipFile);
+ $folder = new BcFolder($tempDir);
+ $folder->delete();
+ }
+}
diff --git a/plugins/baser-core/tests/TestCase/Utility/assets/composer-5.1.1.json b/plugins/baser-core/tests/TestCase/Utility/assets/composer-5.1.1.json
new file mode 100644
index 0000000000..92dbb3dc6e
--- /dev/null
+++ b/plugins/baser-core/tests/TestCase/Utility/assets/composer-5.1.1.json
@@ -0,0 +1,130 @@
+{
+ "name": "baserproject/basercms",
+ "description": "baserCMS plugin for CakePHP",
+ "homepage": "https://basercms.net",
+ "license": "MIT",
+ "type": "project",
+ "require": {
+ "php": ">=8.1",
+ "ext-gd": "*",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "ext-pdo": "*",
+ "ext-sqlite3": "*",
+ "ext-zip": "*",
+ "cakephp/authentication": "^3.0",
+ "cakephp/cakephp": "5.0.*",
+ "cakephp/migrations": "^4.0.0",
+ "cakephp/plugin-installer": "^2.0",
+ "doctrine/annotations": "^1.12",
+ "firebase/php-jwt": "6.1.0",
+ "mobiledetect/mobiledetectlib": "^3.74"
+ },
+ "require-dev": {
+ "ext-xdebug": "*",
+ "cakephp/bake": "^3.0.0",
+ "cakephp/cakephp-codesniffer": "^5.0",
+ "cakephp/debug_kit": "^5.0.0",
+ "josegonzalez/dotenv": "^4.0",
+ "phpunit/phpunit": "10.5.31",
+ "symplify/monorepo-builder": "^11.2",
+ "vierge-noire/cakephp-fixture-factories": "^3.0",
+ "vierge-noire/cakephp-test-suite-light": "^3.0"
+ },
+ "autoload": {
+ "psr-4": {
+ "App\\": "src/",
+ "BaserCore\\": "plugins/baser-core/src",
+ "BcAdminThird\\": "plugins/bc-admin-third/src",
+ "BcBlog\\": "plugins/bc-blog/src/",
+ "BcColumn\\": "plugins/BcColumn/src/",
+ "BcContentLink\\": "plugins/bc-content-link/src/",
+ "BcCustomContent\\": "plugins/bc-custom-content/src/",
+ "BcEditorTemplate\\": "plugins/bc-editor-template/src/",
+ "BcFavorite\\": "plugins/bc-favorite/src/",
+ "BcFront\\": "plugins/bc-front/src/",
+ "BcInstaller\\": "plugins/bc-installer/src/",
+ "BcMail\\": "plugins/bc-mail/src/",
+ "BcPluginSample\\": "plugins/BcPluginSample/src/",
+ "BcSearchIndex\\": "plugins/bc-search-index/src/",
+ "BcThemeConfig\\": "plugins/bc-theme-config/src/",
+ "BcThemeFile\\": "plugins/bc-theme-file/src/",
+ "BcThemeSample\\": "plugins/BcThemeSample/src/",
+ "BcUploader\\": "plugins/bc-uploader/src/",
+ "BcWidgetArea\\": "plugins/bc-widget-area/src/",
+ "Cake\\Routing\\": "plugins/baser-core/src/Routing"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "BaserCore\\Test\\": "plugins/baser-core/tests/",
+ "BcBlog\\Test\\": "plugins/bc-blog/tests/",
+ "BcContentLink\\Test\\": "plugins/bc-content-link/tests/",
+ "BcCustomContent\\Test\\": "plugins/bc-custom-content/tests/",
+ "BcEditorTemplate\\Test\\": "plugins/bc-editor-template/tests/",
+ "BcFavorite\\Test\\": "plugins/bc-favorite/tests/",
+ "BcInstaller\\Test\\": "plugins/bc-installer/tests/",
+ "BcMail\\Test\\": "plugins/bc-mail/tests/",
+ "BcSearchIndex\\Test\\": "plugins/bc-search-index/tests/",
+ "BcThemeConfig\\Test\\": "plugins/bc-theme-config/tests/",
+ "BcThemeFile\\Test\\": "plugins/bc-theme-file/tests/",
+ "BcUploader\\Test\\": "plugins/bc-uploader/tests/",
+ "BcWidgetArea\\Test\\": "plugins/bc-widget-area/tests/"
+ }
+ },
+ "scripts": {
+ "post-install-cmd": "App\\Console\\Installer::postInstall",
+ "post-update-cmd": "App\\Console\\Installer::postInstall",
+ "post-create-project-cmd": "App\\Console\\Installer::postInstall",
+ "check": [
+ "@test",
+ "@cs-check"
+ ],
+ "cs-check": "phpcs --colors -p src/ tests/",
+ "cs-fix": "phpcbf --colors -p src/ tests/",
+ "stan": "phpstan analyse",
+ "install": [
+ "composer install --no-plugins",
+ "bin/cake setup install",
+ "bin/cake install https://localhost foo@example.com baserCMS1234 basercms --host bc-db --username root --password root"
+ ],
+ "test": [
+ "bin/cake setup test",
+ "Composer\\Config::disableProcessTimeout",
+ "vendor/bin/phpunit --colors=always"
+ ]
+ },
+ "suggest": {
+ "markstory/asset_compress": "An asset compression plugin which provides file concatenation and a flexible filter system for preprocessing and minification.",
+ "dereuromark/cakephp-ide-helper": "After baking your code, this keeps your annotations in sync with the code evolving from there on for maximum IDE and PHPStan/Psalm compatibility.",
+ "phpstan/phpstan": "PHPStan focuses on finding errors in your code without actually running it. It catches whole classes of bugs even before you write tests for the code.",
+ "cakephp/repl": "Console tools for a REPL interface for CakePHP applications."
+ },
+ "config": {
+ "sort-packages": true,
+ "allow-plugins": {
+ "cakephp/plugin-installer": true,
+ "dealerdirect/phpcodesniffer-composer-installer": true
+ }
+ },
+ "replace": {
+ "baserproject/baser-core": "5.1.1",
+ "baserproject/bc-admin-third": "5.1.1",
+ "baserproject/bc-blog": "5.1.1",
+ "baserproject/bc-column": "5.1.1",
+ "baserproject/bc-content-link": "5.1.1",
+ "baserproject/bc-custom-content": "5.1.1",
+ "baserproject/bc-editor-template": "5.1.1",
+ "baserproject/bc-favorite": "5.1.1",
+ "baserproject/bc-front": "5.1.1",
+ "baserproject/bc-installer": "5.1.1",
+ "baserproject/bc-mail": "5.1.1",
+ "baserproject/bc-plugin-sample": "5.1.1",
+ "baserproject/bc-search-index": "5.1.1",
+ "baserproject/bc-theme-config": "5.1.1",
+ "baserproject/bc-theme-file": "5.1.1",
+ "baserproject/bc-theme-sample": "5.1.1",
+ "baserproject/bc-uploader": "5.1.1",
+ "baserproject/bc-widget-area": "5.1.1"
+ }
+}
diff --git a/plugins/baser-core/tests/TestCase/Utility/assets/composer-5.1.1.lock b/plugins/baser-core/tests/TestCase/Utility/assets/composer-5.1.1.lock
new file mode 100644
index 0000000000..af06821817
--- /dev/null
+++ b/plugins/baser-core/tests/TestCase/Utility/assets/composer-5.1.1.lock
@@ -0,0 +1,6446 @@
+{
+ "_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": "334c429953fa4a60336caedf9c401d74",
+ "packages": [
+ {
+ "name": "cakephp/authentication",
+ "version": "3.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/authentication.git",
+ "reference": "0fb4ef1a3ee243d46080ce55e4f1c8491c39289e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/authentication/zipball/0fb4ef1a3ee243d46080ce55e4f1c8491c39289e",
+ "reference": "0fb4ef1a3ee243d46080ce55e4f1c8491c39289e",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/http": "^5.0",
+ "laminas/laminas-diactoros": "^3.0",
+ "psr/http-client": "^1.0",
+ "psr/http-message": "^1.1 || ^2.0",
+ "psr/http-server-handler": "^1.0",
+ "psr/http-server-middleware": "^1.0"
+ },
+ "require-dev": {
+ "cakephp/cakephp": "^5.0",
+ "cakephp/cakephp-codesniffer": "^5.0",
+ "firebase/php-jwt": "^6.2",
+ "phpunit/phpunit": "^10.1.0"
+ },
+ "suggest": {
+ "cakephp/cakephp": "Install full core to use \"CookieAuthenticator\".",
+ "cakephp/orm": "To use \"OrmResolver\" (Not needed separately if using full CakePHP framework).",
+ "cakephp/utility": "Provides CakePHP security methods. Required for the JWT adapter and Legacy password hasher.",
+ "ext-ldap": "Make sure this php extension is installed and enabled on your system if you want to use the built-in LDAP adapter for \"LdapIdentifier\".",
+ "firebase/php-jwt": "If you want to use the JWT adapter add this dependency"
+ },
+ "type": "cakephp-plugin",
+ "autoload": {
+ "psr-4": {
+ "Authentication\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/authentication/graphs/contributors"
+ }
+ ],
+ "description": "Authentication plugin for CakePHP",
+ "homepage": "https://cakephp.org",
+ "keywords": [
+ "Authentication",
+ "auth",
+ "cakephp",
+ "middleware"
+ ],
+ "support": {
+ "docs": "https://book.cakephp.org/authentication/3/en/",
+ "forum": "https://discourse.cakephp.org/",
+ "issues": "https://github.com/cakephp/authentication/issues",
+ "source": "https://github.com/cakephp/authentication"
+ },
+ "time": "2024-07-28T23:56:56+00:00"
+ },
+ {
+ "name": "cakephp/cakephp",
+ "version": "5.0.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/cakephp.git",
+ "reference": "f0b88ba6cc42e319fd012a32e96af7b3826fefdc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/cakephp/zipball/f0b88ba6cc42e319fd012a32e96af7b3826fefdc",
+ "reference": "f0b88ba6cc42e319fd012a32e96af7b3826fefdc",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/chronos": "^3.0.2",
+ "composer/ca-bundle": "^1.2",
+ "ext-intl": "*",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "laminas/laminas-diactoros": "^3.0",
+ "laminas/laminas-httphandlerrunner": "^2.6",
+ "league/container": "^4.2",
+ "php": ">=8.1",
+ "psr/container": "^1.1 || ^2.0",
+ "psr/http-client": "^1.0.2",
+ "psr/http-factory": "^1.0.2",
+ "psr/http-message": "^1.1 || ^2.0",
+ "psr/http-server-handler": "^1.0.2",
+ "psr/http-server-middleware": "^1.0.2",
+ "psr/log": "^3.0",
+ "psr/simple-cache": "^2.0 || ^3.0"
+ },
+ "provide": {
+ "psr/container-implementation": "^2.0",
+ "psr/http-client-implementation": "^1.0",
+ "psr/http-factory-implementation": "^1.0",
+ "psr/http-server-handler-implementation": "^1.0",
+ "psr/http-server-middleware-implementation": "^1.0",
+ "psr/log-implementation": "^3.0",
+ "psr/simple-cache-implementation": "^3.0"
+ },
+ "replace": {
+ "cakephp/cache": "self.version",
+ "cakephp/collection": "self.version",
+ "cakephp/console": "self.version",
+ "cakephp/core": "self.version",
+ "cakephp/database": "self.version",
+ "cakephp/datasource": "self.version",
+ "cakephp/event": "self.version",
+ "cakephp/form": "self.version",
+ "cakephp/http": "self.version",
+ "cakephp/i18n": "self.version",
+ "cakephp/log": "self.version",
+ "cakephp/orm": "self.version",
+ "cakephp/utility": "self.version",
+ "cakephp/validation": "self.version"
+ },
+ "require-dev": {
+ "cakephp/cakephp-codesniffer": "^5.0",
+ "http-interop/http-factory-tests": "^2.0",
+ "mikey179/vfsstream": "^1.6.10",
+ "mockery/mockery": "^1.6",
+ "paragonie/csp-builder": "^2.3 || ^3.0",
+ "phpstan/extension-installer": "^1.3",
+ "phpstan/phpstan": "1.11.*",
+ "phpunit/phpunit": "^10.1.0 <=10.5.3",
+ "symplify/phpstan-rules": "^12.4"
+ },
+ "suggest": {
+ "ext-curl": "To enable more efficient network calls in Http\\Client.",
+ "ext-openssl": "To use Security::encrypt() or have secure CSRF token generation.",
+ "lib-ICU": "To use locale-aware features in the I18n and Database packages",
+ "paragonie/csp-builder": "CSP builder, to use the CSP Middleware"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/Core/functions.php",
+ "src/Error/functions.php",
+ "src/Collection/functions.php",
+ "src/I18n/functions.php",
+ "src/ORM/bootstrap.php",
+ "src/Routing/functions.php",
+ "src/Utility/bootstrap.php"
+ ],
+ "psr-4": {
+ "Cake\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/cakephp/graphs/contributors"
+ }
+ ],
+ "description": "The CakePHP framework",
+ "homepage": "https://cakephp.org",
+ "keywords": [
+ "conventions over configuration",
+ "dry",
+ "form",
+ "framework",
+ "mvc",
+ "orm",
+ "psr-7",
+ "rapid-development",
+ "validation"
+ ],
+ "support": {
+ "forum": "https://discourse.cakephp.org/",
+ "issues": "https://github.com/cakephp/cakephp/issues",
+ "source": "https://github.com/cakephp/cakephp"
+ },
+ "time": "2024-07-28T16:58:12+00:00"
+ },
+ {
+ "name": "cakephp/chronos",
+ "version": "3.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/chronos.git",
+ "reference": "786d69e1ee4b735765cbdb5521b9603e9b98d650"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/chronos/zipball/786d69e1ee4b735765cbdb5521b9603e9b98d650",
+ "reference": "786d69e1ee4b735765cbdb5521b9603e9b98d650",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "psr/clock": "^1.0"
+ },
+ "provide": {
+ "psr/clock-implementation": "1.0"
+ },
+ "require-dev": {
+ "cakephp/cakephp-codesniffer": "^5.0",
+ "phpunit/phpunit": "^10.1.0 || ^11.1.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Cake\\Chronos\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Brian Nesbitt",
+ "email": "brian@nesbot.com",
+ "homepage": "http://nesbot.com"
+ },
+ {
+ "name": "The CakePHP Team",
+ "homepage": "https://cakephp.org"
+ }
+ ],
+ "description": "A simple API extension for DateTime.",
+ "homepage": "https://cakephp.org",
+ "keywords": [
+ "date",
+ "datetime",
+ "time"
+ ],
+ "support": {
+ "issues": "https://github.com/cakephp/chronos/issues",
+ "source": "https://github.com/cakephp/chronos"
+ },
+ "time": "2024-07-18T03:18:04+00:00"
+ },
+ {
+ "name": "cakephp/migrations",
+ "version": "4.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/migrations.git",
+ "reference": "6047ee0033bb0f4c5f7a3afceb2e8d85d319c9f0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/migrations/zipball/6047ee0033bb0f4c5f7a3afceb2e8d85d319c9f0",
+ "reference": "6047ee0033bb0f4c5f7a3afceb2e8d85d319c9f0",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/cache": "^5.0",
+ "cakephp/orm": "^5.0",
+ "php": ">=8.1",
+ "robmorgan/phinx": "^0.16.0"
+ },
+ "require-dev": {
+ "cakephp/bake": "dev-3.next",
+ "cakephp/cakephp": "dev-5.next as 5.1.0",
+ "cakephp/cakephp-codesniffer": "^5.0",
+ "phpunit/phpunit": "^10.5.5 || ^11.1.3"
+ },
+ "suggest": {
+ "cakephp/bake": "If you want to generate migrations.",
+ "dereuromark/cakephp-ide-helper": "If you want to have IDE suggest/autocomplete when creating migrations."
+ },
+ "type": "cakephp-plugin",
+ "autoload": {
+ "psr-4": {
+ "Migrations\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/migrations/graphs/contributors"
+ }
+ ],
+ "description": "Database Migration plugin for CakePHP based on Phinx",
+ "homepage": "https://github.com/cakephp/migrations",
+ "keywords": [
+ "cakephp",
+ "migrations"
+ ],
+ "support": {
+ "forum": "https://stackoverflow.com/tags/cakephp",
+ "irc": "irc://irc.freenode.org/cakephp",
+ "issues": "https://github.com/cakephp/migrations/issues",
+ "source": "https://github.com/cakephp/migrations"
+ },
+ "time": "2024-08-21T20:03:33+00:00"
+ },
+ {
+ "name": "cakephp/plugin-installer",
+ "version": "2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/plugin-installer.git",
+ "reference": "5420701fd47d82fe81805ebee34fbbcef34c52ba"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/plugin-installer/zipball/5420701fd47d82fe81805ebee34fbbcef34c52ba",
+ "reference": "5420701fd47d82fe81805ebee34fbbcef34c52ba",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "^2.0",
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "cakephp/cakephp-codesniffer": "^5.0",
+ "composer/composer": "^2.0",
+ "phpunit/phpunit": "^10.1.0"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "Cake\\Composer\\Plugin"
+ },
+ "autoload": {
+ "psr-4": {
+ "Cake\\Composer\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://cakephp.org"
+ }
+ ],
+ "description": "A composer installer for CakePHP 3.0+ plugins.",
+ "support": {
+ "issues": "https://github.com/cakephp/plugin-installer/issues",
+ "source": "https://github.com/cakephp/plugin-installer/tree/2.0.1"
+ },
+ "time": "2023-09-10T10:02:44+00:00"
+ },
+ {
+ "name": "composer/ca-bundle",
+ "version": "1.5.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/ca-bundle.git",
+ "reference": "063d9aa8696582f5a41dffbbaf3c81024f0a604a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/063d9aa8696582f5a41dffbbaf3c81024f0a604a",
+ "reference": "063d9aa8696582f5a41dffbbaf3c81024f0a604a",
+ "shasum": ""
+ },
+ "require": {
+ "ext-openssl": "*",
+ "ext-pcre": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.10",
+ "psr/log": "^1.0 || ^2.0 || ^3.0",
+ "symfony/phpunit-bridge": "^4.2 || ^5",
+ "symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\CaBundle\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
+ "keywords": [
+ "cabundle",
+ "cacert",
+ "certificate",
+ "ssl",
+ "tls"
+ ],
+ "support": {
+ "irc": "irc://irc.freenode.org/composer",
+ "issues": "https://github.com/composer/ca-bundle/issues",
+ "source": "https://github.com/composer/ca-bundle/tree/1.5.1"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-07-08T15:28:20+00:00"
+ },
+ {
+ "name": "doctrine/annotations",
+ "version": "1.14.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/annotations.git",
+ "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af",
+ "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/lexer": "^1 || ^2",
+ "ext-tokenizer": "*",
+ "php": "^7.1 || ^8.0",
+ "psr/cache": "^1 || ^2 || ^3"
+ },
+ "require-dev": {
+ "doctrine/cache": "^1.11 || ^2.0",
+ "doctrine/coding-standard": "^9 || ^10",
+ "phpstan/phpstan": "~1.4.10 || ^1.8.0",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "symfony/cache": "^4.4 || ^5.4 || ^6",
+ "vimeo/psalm": "^4.10"
+ },
+ "suggest": {
+ "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "Docblock Annotations Parser",
+ "homepage": "https://www.doctrine-project.org/projects/annotations.html",
+ "keywords": [
+ "annotations",
+ "docblock",
+ "parser"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/annotations/issues",
+ "source": "https://github.com/doctrine/annotations/tree/1.14.3"
+ },
+ "time": "2023-02-01T09:20:38+00:00"
+ },
+ {
+ "name": "doctrine/deprecations",
+ "version": "1.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/deprecations.git",
+ "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
+ "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9",
+ "phpstan/phpstan": "1.4.10 || 1.10.15",
+ "phpstan/phpstan-phpunit": "^1.0",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "psalm/plugin-phpunit": "0.18.4",
+ "psr/log": "^1 || ^2 || ^3",
+ "vimeo/psalm": "4.30.0 || 5.12.0"
+ },
+ "suggest": {
+ "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
+ "homepage": "https://www.doctrine-project.org/",
+ "support": {
+ "issues": "https://github.com/doctrine/deprecations/issues",
+ "source": "https://github.com/doctrine/deprecations/tree/1.1.3"
+ },
+ "time": "2024-01-30T19:34:25+00:00"
+ },
+ {
+ "name": "doctrine/lexer",
+ "version": "2.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/lexer.git",
+ "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6",
+ "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/deprecations": "^1.0",
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9 || ^12",
+ "phpstan/phpstan": "^1.3",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6",
+ "psalm/plugin-phpunit": "^0.18.3",
+ "vimeo/psalm": "^4.11 || ^5.21"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Lexer\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
+ "homepage": "https://www.doctrine-project.org/projects/lexer.html",
+ "keywords": [
+ "annotations",
+ "docblock",
+ "lexer",
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/lexer/issues",
+ "source": "https://github.com/doctrine/lexer/tree/2.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-02-05T11:35:39+00:00"
+ },
+ {
+ "name": "firebase/php-jwt",
+ "version": "v6.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/firebase/php-jwt.git",
+ "reference": "fbb2967a3a68b07e37678c00c0cf51165051495f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/firebase/php-jwt/zipball/fbb2967a3a68b07e37678c00c0cf51165051495f",
+ "reference": "fbb2967a3a68b07e37678c00c0cf51165051495f",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1||^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.5||9.5"
+ },
+ "suggest": {
+ "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Firebase\\JWT\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Neuman Vong",
+ "email": "neuman+pear@twilio.com",
+ "role": "Developer"
+ },
+ {
+ "name": "Anant Narayanan",
+ "email": "anant@php.net",
+ "role": "Developer"
+ }
+ ],
+ "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
+ "homepage": "https://github.com/firebase/php-jwt",
+ "keywords": [
+ "jwt",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/firebase/php-jwt/issues",
+ "source": "https://github.com/firebase/php-jwt/tree/v6.1.0"
+ },
+ "time": "2022-03-23T18:26:04+00:00"
+ },
+ {
+ "name": "laminas/laminas-diactoros",
+ "version": "3.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laminas/laminas-diactoros.git",
+ "reference": "74cfb9a7522ffd2a161d1ebe10db2fc2abb9df45"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/74cfb9a7522ffd2a161d1ebe10db2fc2abb9df45",
+ "reference": "74cfb9a7522ffd2a161d1ebe10db2fc2abb9df45",
+ "shasum": ""
+ },
+ "require": {
+ "php": "~8.1.0 || ~8.2.0 || ~8.3.0",
+ "psr/http-factory": "^1.0.2",
+ "psr/http-message": "^1.1 || ^2.0"
+ },
+ "provide": {
+ "psr/http-factory-implementation": "^1.1 || ^2.0",
+ "psr/http-message-implementation": "^1.1 || ^2.0"
+ },
+ "require-dev": {
+ "ext-curl": "*",
+ "ext-dom": "*",
+ "ext-gd": "*",
+ "ext-libxml": "*",
+ "http-interop/http-factory-tests": "^0.9.0",
+ "laminas/laminas-coding-standard": "~2.5.0",
+ "php-http/psr7-integration-tests": "^1.3",
+ "phpunit/phpunit": "^9.6.16",
+ "psalm/plugin-phpunit": "^0.18.4",
+ "vimeo/psalm": "^5.22.1"
+ },
+ "type": "library",
+ "extra": {
+ "laminas": {
+ "config-provider": "Laminas\\Diactoros\\ConfigProvider",
+ "module": "Laminas\\Diactoros"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions/create_uploaded_file.php",
+ "src/functions/marshal_headers_from_sapi.php",
+ "src/functions/marshal_method_from_sapi.php",
+ "src/functions/marshal_protocol_version_from_sapi.php",
+ "src/functions/normalize_server.php",
+ "src/functions/normalize_uploaded_files.php",
+ "src/functions/parse_cookie_header.php"
+ ],
+ "psr-4": {
+ "Laminas\\Diactoros\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "description": "PSR HTTP Message implementations",
+ "homepage": "https://laminas.dev",
+ "keywords": [
+ "http",
+ "laminas",
+ "psr",
+ "psr-17",
+ "psr-7"
+ ],
+ "support": {
+ "chat": "https://laminas.dev/chat",
+ "docs": "https://docs.laminas.dev/laminas-diactoros/",
+ "forum": "https://discourse.laminas.dev",
+ "issues": "https://github.com/laminas/laminas-diactoros/issues",
+ "rss": "https://github.com/laminas/laminas-diactoros/releases.atom",
+ "source": "https://github.com/laminas/laminas-diactoros"
+ },
+ "funding": [
+ {
+ "url": "https://funding.communitybridge.org/projects/laminas-project",
+ "type": "community_bridge"
+ }
+ ],
+ "time": "2024-02-16T16:06:16+00:00"
+ },
+ {
+ "name": "laminas/laminas-httphandlerrunner",
+ "version": "2.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laminas/laminas-httphandlerrunner.git",
+ "reference": "35a0ba92e940a2f9533754f5a56187fa321f7693"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laminas/laminas-httphandlerrunner/zipball/35a0ba92e940a2f9533754f5a56187fa321f7693",
+ "reference": "35a0ba92e940a2f9533754f5a56187fa321f7693",
+ "shasum": ""
+ },
+ "require": {
+ "php": "~8.1.0 || ~8.2.0 || ~8.3.0",
+ "psr/http-message": "^1.0 || ^2.0",
+ "psr/http-message-implementation": "^1.0 || ^2.0",
+ "psr/http-server-handler": "^1.0"
+ },
+ "require-dev": {
+ "laminas/laminas-coding-standard": "~2.5.0",
+ "laminas/laminas-diactoros": "^3.3.0",
+ "phpunit/phpunit": "^10.5.5",
+ "psalm/plugin-phpunit": "^0.18.4",
+ "vimeo/psalm": "^5.18"
+ },
+ "type": "library",
+ "extra": {
+ "laminas": {
+ "config-provider": "Laminas\\HttpHandlerRunner\\ConfigProvider"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laminas\\HttpHandlerRunner\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "description": "Execute PSR-15 RequestHandlerInterface instances and emit responses they generate.",
+ "homepage": "https://laminas.dev",
+ "keywords": [
+ "components",
+ "laminas",
+ "mezzio",
+ "psr-15",
+ "psr-7"
+ ],
+ "support": {
+ "chat": "https://laminas.dev/chat",
+ "docs": "https://docs.laminas.dev/laminas-httphandlerrunner/",
+ "forum": "https://discourse.laminas.dev",
+ "issues": "https://github.com/laminas/laminas-httphandlerrunner/issues",
+ "rss": "https://github.com/laminas/laminas-httphandlerrunner/releases.atom",
+ "source": "https://github.com/laminas/laminas-httphandlerrunner"
+ },
+ "funding": [
+ {
+ "url": "https://funding.communitybridge.org/projects/laminas-project",
+ "type": "community_bridge"
+ }
+ ],
+ "time": "2024-01-04T10:50:34+00:00"
+ },
+ {
+ "name": "league/container",
+ "version": "4.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/container.git",
+ "reference": "ff346319ca1ff0e78277dc2311a42107cc1aab88"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/container/zipball/ff346319ca1ff0e78277dc2311a42107cc1aab88",
+ "reference": "ff346319ca1ff0e78277dc2311a42107cc1aab88",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0",
+ "psr/container": "^1.1 || ^2.0"
+ },
+ "provide": {
+ "psr/container-implementation": "^1.0"
+ },
+ "replace": {
+ "orno/di": "~2.0"
+ },
+ "require-dev": {
+ "nette/php-generator": "^3.4",
+ "nikic/php-parser": "^4.10",
+ "phpstan/phpstan": "^0.12.47",
+ "phpunit/phpunit": "^8.5.17",
+ "roave/security-advisories": "dev-latest",
+ "scrutinizer/ocular": "^1.8",
+ "squizlabs/php_codesniffer": "^3.6"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.x-dev",
+ "dev-4.x": "4.x-dev",
+ "dev-3.x": "3.x-dev",
+ "dev-2.x": "2.x-dev",
+ "dev-1.x": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\Container\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Phil Bennett",
+ "email": "mail@philbennett.co.uk",
+ "role": "Developer"
+ }
+ ],
+ "description": "A fast and intuitive dependency injection container.",
+ "homepage": "https://github.com/thephpleague/container",
+ "keywords": [
+ "container",
+ "dependency",
+ "di",
+ "injection",
+ "league",
+ "provider",
+ "service"
+ ],
+ "support": {
+ "issues": "https://github.com/thephpleague/container/issues",
+ "source": "https://github.com/thephpleague/container/tree/4.2.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/philipobenito",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-13T13:12:53+00:00"
+ },
+ {
+ "name": "mobiledetect/mobiledetectlib",
+ "version": "3.74.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/serbanghita/Mobile-Detect.git",
+ "reference": "39582ab62f86b40e4edb698159f895929a29c346"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/39582ab62f86b40e4edb698159f895929a29c346",
+ "reference": "39582ab62f86b40e4edb698159f895929a29c346",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.4"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.14",
+ "phpunit/phpunit": "^9.6",
+ "squizlabs/php_codesniffer": "^3.7"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Detection\\": "src/"
+ },
+ "classmap": [
+ "src/MobileDetect.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Serban Ghita",
+ "email": "serbanghita@gmail.com",
+ "homepage": "https://mobiledetect.net",
+ "role": "Developer"
+ }
+ ],
+ "description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices. It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.",
+ "homepage": "https://github.com/serbanghita/Mobile-Detect",
+ "keywords": [
+ "detect mobile devices",
+ "mobile",
+ "mobile detect",
+ "mobile detector",
+ "php mobile detect"
+ ],
+ "support": {
+ "issues": "https://github.com/serbanghita/Mobile-Detect/issues",
+ "source": "https://github.com/serbanghita/Mobile-Detect/tree/3.74.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/serbanghita",
+ "type": "github"
+ }
+ ],
+ "time": "2023-10-27T16:28:04+00:00"
+ },
+ {
+ "name": "psr/cache",
+ "version": "3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/cache.git",
+ "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
+ "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Cache\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for caching libraries",
+ "keywords": [
+ "cache",
+ "psr",
+ "psr-6"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/cache/tree/3.0.0"
+ },
+ "time": "2021-02-03T23:26:27+00:00"
+ },
+ {
+ "name": "psr/clock",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/clock.git",
+ "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d",
+ "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Psr\\Clock\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for reading the clock.",
+ "homepage": "https://github.com/php-fig/clock",
+ "keywords": [
+ "clock",
+ "now",
+ "psr",
+ "psr-20",
+ "time"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/clock/issues",
+ "source": "https://github.com/php-fig/clock/tree/1.0.0"
+ },
+ "time": "2022-11-25T14:36:26+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/container/issues",
+ "source": "https://github.com/php-fig/container/tree/2.0.2"
+ },
+ "time": "2021-11-05T16:47:00+00:00"
+ },
+ {
+ "name": "psr/http-client",
+ "version": "1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-client.git",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0",
+ "psr/http-message": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Client\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP clients",
+ "homepage": "https://github.com/php-fig/http-client",
+ "keywords": [
+ "http",
+ "http-client",
+ "psr",
+ "psr-18"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-client"
+ },
+ "time": "2023-09-23T14:17:50+00:00"
+ },
+ {
+ "name": "psr/http-factory",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-factory.git",
+ "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
+ "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1",
+ "psr/http-message": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories",
+ "keywords": [
+ "factory",
+ "http",
+ "message",
+ "psr",
+ "psr-17",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-factory"
+ },
+ "time": "2024-04-15T12:06:14+00:00"
+ },
+ {
+ "name": "psr/http-message",
+ "version": "2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-message.git",
+ "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+ "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP messages",
+ "homepage": "https://github.com/php-fig/http-message",
+ "keywords": [
+ "http",
+ "http-message",
+ "psr",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-message/tree/2.0"
+ },
+ "time": "2023-04-04T09:54:51+00:00"
+ },
+ {
+ "name": "psr/http-server-handler",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-server-handler.git",
+ "reference": "84c4fb66179be4caaf8e97bd239203245302e7d4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/84c4fb66179be4caaf8e97bd239203245302e7d4",
+ "reference": "84c4fb66179be4caaf8e97bd239203245302e7d4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0",
+ "psr/http-message": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Server\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP server-side request handler",
+ "keywords": [
+ "handler",
+ "http",
+ "http-interop",
+ "psr",
+ "psr-15",
+ "psr-7",
+ "request",
+ "response",
+ "server"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-server-handler/tree/1.0.2"
+ },
+ "time": "2023-04-10T20:06:20+00:00"
+ },
+ {
+ "name": "psr/http-server-middleware",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-server-middleware.git",
+ "reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/c1481f747daaa6a0782775cd6a8c26a1bf4a3829",
+ "reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0",
+ "psr/http-message": "^1.0 || ^2.0",
+ "psr/http-server-handler": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Server\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP server-side middleware",
+ "keywords": [
+ "http",
+ "http-interop",
+ "middleware",
+ "psr",
+ "psr-15",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/http-server-middleware/issues",
+ "source": "https://github.com/php-fig/http-server-middleware/tree/1.0.2"
+ },
+ "time": "2023-04-11T06:14:47+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "79dff0b268932c640297f5208d6298f71855c03e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/79dff0b268932c640297f5208d6298f71855c03e",
+ "reference": "79dff0b268932c640297f5208d6298f71855c03e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/log/tree/3.0.1"
+ },
+ "time": "2024-08-21T13:31:24+00:00"
+ },
+ {
+ "name": "psr/simple-cache",
+ "version": "3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/simple-cache.git",
+ "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865",
+ "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\SimpleCache\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interfaces for simple caching",
+ "keywords": [
+ "cache",
+ "caching",
+ "psr",
+ "psr-16",
+ "simple-cache"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/simple-cache/tree/3.0.0"
+ },
+ "time": "2021-10-29T13:26:27+00:00"
+ },
+ {
+ "name": "robmorgan/phinx",
+ "version": "0.16.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/phinx.git",
+ "reference": "577908073d3f355ceb47ca9fc6bd978cb1526c70"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/phinx/zipball/577908073d3f355ceb47ca9fc6bd978cb1526c70",
+ "reference": "577908073d3f355ceb47ca9fc6bd978cb1526c70",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/database": "^5.0.2",
+ "composer-runtime-api": "^2.0",
+ "php-64bit": ">=8.1",
+ "psr/container": "^1.1|^2.0",
+ "symfony/config": "^3.4|^4.0|^5.0|^6.0|^7.0",
+ "symfony/console": "^6.0|^7.0"
+ },
+ "require-dev": {
+ "cakephp/cakephp": "^5.0.2",
+ "cakephp/cakephp-codesniffer": "^5.0",
+ "ext-json": "*",
+ "ext-pdo": "*",
+ "phpunit/phpunit": "^9.5.19",
+ "symfony/yaml": "^3.4|^4.0|^5.0|^6.0|^7.0"
+ },
+ "suggest": {
+ "ext-json": "Install if using JSON configuration format",
+ "ext-pdo": "PDO extension is needed",
+ "symfony/yaml": "Install if using YAML configuration format"
+ },
+ "bin": [
+ "bin/phinx"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Phinx\\": "src/Phinx/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Rob Morgan",
+ "email": "robbym@gmail.com",
+ "homepage": "https://robmorgan.id.au",
+ "role": "Lead Developer"
+ },
+ {
+ "name": "Woody Gilk",
+ "email": "woody.gilk@gmail.com",
+ "homepage": "https://shadowhand.me",
+ "role": "Developer"
+ },
+ {
+ "name": "Richard Quadling",
+ "email": "rquadling@gmail.com",
+ "role": "Developer"
+ },
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/phinx/graphs/contributors",
+ "role": "Developer"
+ }
+ ],
+ "description": "Phinx makes it ridiculously easy to manage the database migrations for your PHP app.",
+ "homepage": "https://phinx.org",
+ "keywords": [
+ "database",
+ "database migrations",
+ "db",
+ "migrations",
+ "phinx"
+ ],
+ "support": {
+ "issues": "https://github.com/cakephp/phinx/issues",
+ "source": "https://github.com/cakephp/phinx/tree/0.16.2"
+ },
+ "time": "2024-07-17T21:40:58+00:00"
+ },
+ {
+ "name": "symfony/config",
+ "version": "v6.4.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/config.git",
+ "reference": "12e7e52515ce37191b193cf3365903c4f3951e35"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/config/zipball/12e7e52515ce37191b193cf3365903c4f3951e35",
+ "reference": "12e7e52515ce37191b193cf3365903c4f3951e35",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/filesystem": "^5.4|^6.0|^7.0",
+ "symfony/polyfill-ctype": "~1.8"
+ },
+ "conflict": {
+ "symfony/finder": "<5.4",
+ "symfony/service-contracts": "<2.5"
+ },
+ "require-dev": {
+ "symfony/event-dispatcher": "^5.4|^6.0|^7.0",
+ "symfony/finder": "^5.4|^6.0|^7.0",
+ "symfony/messenger": "^5.4|^6.0|^7.0",
+ "symfony/service-contracts": "^2.5|^3",
+ "symfony/yaml": "^5.4|^6.0|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Config\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/config/tree/v6.4.8"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-05-31T14:49:08+00:00"
+ },
+ {
+ "name": "symfony/console",
+ "version": "v6.4.11",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/console.git",
+ "reference": "42686880adaacdad1835ee8fc2a9ec5b7bd63998"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/console/zipball/42686880adaacdad1835ee8fc2a9ec5b7bd63998",
+ "reference": "42686880adaacdad1835ee8fc2a9ec5b7bd63998",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/service-contracts": "^2.5|^3",
+ "symfony/string": "^5.4|^6.0|^7.0"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<5.4",
+ "symfony/dotenv": "<5.4",
+ "symfony/event-dispatcher": "<5.4",
+ "symfony/lock": "<5.4",
+ "symfony/process": "<5.4"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0|2.0|3.0"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^5.4|^6.0|^7.0",
+ "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+ "symfony/event-dispatcher": "^5.4|^6.0|^7.0",
+ "symfony/http-foundation": "^6.4|^7.0",
+ "symfony/http-kernel": "^6.4|^7.0",
+ "symfony/lock": "^5.4|^6.0|^7.0",
+ "symfony/messenger": "^5.4|^6.0|^7.0",
+ "symfony/process": "^5.4|^6.0|^7.0",
+ "symfony/stopwatch": "^5.4|^6.0|^7.0",
+ "symfony/var-dumper": "^5.4|^6.0|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Console\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Eases the creation of beautiful and testable command line interfaces",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "cli",
+ "command-line",
+ "console",
+ "terminal"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/console/tree/v6.4.11"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-08-15T22:48:29+00:00"
+ },
+ {
+ "name": "symfony/deprecation-contracts",
+ "version": "v3.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/deprecation-contracts.git",
+ "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
+ "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.5-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "files": [
+ "function.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "A generic function and convention to trigger deprecation notices",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-04-18T09:32:20+00:00"
+ },
+ {
+ "name": "symfony/filesystem",
+ "version": "v6.4.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/filesystem.git",
+ "reference": "b51ef8059159330b74a4d52f68e671033c0fe463"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/b51ef8059159330b74a4d52f68e671033c0fe463",
+ "reference": "b51ef8059159330b74a4d52f68e671033c0fe463",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-mbstring": "~1.8"
+ },
+ "require-dev": {
+ "symfony/process": "^5.4|^6.4|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Filesystem\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides basic utilities for the filesystem",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/filesystem/tree/v6.4.9"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-06-28T09:49:33+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.30.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "0424dff1c58f028c451efff2045f5d92410bd540"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540",
+ "reference": "0424dff1c58f028c451efff2045f5d92410bd540",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-ctype": "*"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Gert de Pagter",
+ "email": "BackEndTea@gmail.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for ctype functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "ctype",
+ "polyfill",
+ "portable"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-05-31T15:07:36+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-grapheme",
+ "version": "v1.30.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+ "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/64647a7c30b2283f5d49b874d84a18fc22054b7a",
+ "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's grapheme_* functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "grapheme",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.30.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-05-31T15:07:36+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-normalizer",
+ "version": "v1.30.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+ "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/a95281b0be0d9ab48050ebd988b967875cdb9fdb",
+ "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's Normalizer class and related functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "intl",
+ "normalizer",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.30.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-05-31T15:07:36+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.30.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c",
+ "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-mbstring": "*"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for the Mbstring extension",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-06-19T12:30:46+00:00"
+ },
+ {
+ "name": "symfony/service-contracts",
+ "version": "v3.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f",
+ "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "psr/container": "^1.1|^2.0",
+ "symfony/deprecation-contracts": "^2.5|^3"
+ },
+ "conflict": {
+ "ext-psr": "<1.1|>=2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.5-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Service\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Test/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to writing services",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/service-contracts/tree/v3.5.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-04-18T09:32:20+00:00"
+ },
+ {
+ "name": "symfony/string",
+ "version": "v6.4.11",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/string.git",
+ "reference": "5bc3eb632cf9c8dbfd6529d89be9950d1518883b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/string/zipball/5bc3eb632cf9c8dbfd6529d89be9950d1518883b",
+ "reference": "5bc3eb632cf9c8dbfd6529d89be9950d1518883b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-intl-grapheme": "~1.0",
+ "symfony/polyfill-intl-normalizer": "~1.0",
+ "symfony/polyfill-mbstring": "~1.0"
+ },
+ "conflict": {
+ "symfony/translation-contracts": "<2.5"
+ },
+ "require-dev": {
+ "symfony/error-handler": "^5.4|^6.0|^7.0",
+ "symfony/http-client": "^5.4|^6.0|^7.0",
+ "symfony/intl": "^6.2|^7.0",
+ "symfony/translation-contracts": "^2.5|^3.0",
+ "symfony/var-exporter": "^5.4|^6.0|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\String\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "grapheme",
+ "i18n",
+ "string",
+ "unicode",
+ "utf-8",
+ "utf8"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/string/tree/v6.4.11"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-08-12T09:55:28+00:00"
+ }
+ ],
+ "packages-dev": [
+ {
+ "name": "brick/varexporter",
+ "version": "0.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/brick/varexporter.git",
+ "reference": "2fd038f7c9d12d468130c6e1b3ce06e4160a7dbb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/brick/varexporter/zipball/2fd038f7c9d12d468130c6e1b3ce06e4160a7dbb",
+ "reference": "2fd038f7c9d12d468130c6e1b3ce06e4160a7dbb",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^4.0",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.2",
+ "phpunit/phpunit": "^8.5 || ^9.0",
+ "vimeo/psalm": "5.15.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Brick\\VarExporter\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A powerful alternative to var_export(), which can export closures and objects without __set_state()",
+ "keywords": [
+ "var_export"
+ ],
+ "support": {
+ "issues": "https://github.com/brick/varexporter/issues",
+ "source": "https://github.com/brick/varexporter/tree/0.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/BenMorel",
+ "type": "github"
+ }
+ ],
+ "time": "2023-09-01T21:10:07+00:00"
+ },
+ {
+ "name": "cakephp/bake",
+ "version": "3.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/bake.git",
+ "reference": "2a30ba221859176dbe583783da7299bde95c8956"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/bake/zipball/2a30ba221859176dbe583783da7299bde95c8956",
+ "reference": "2a30ba221859176dbe583783da7299bde95c8956",
+ "shasum": ""
+ },
+ "require": {
+ "brick/varexporter": "^0.4.0",
+ "cakephp/cakephp": "^5.0.3",
+ "cakephp/twig-view": "^2.0.0",
+ "nikic/php-parser": "^4.13.2 || ^5.0.0",
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "cakephp/cakephp-codesniffer": "^5.0.0",
+ "cakephp/debug_kit": "^5.0.0",
+ "phpunit/phpunit": "^10.1.0"
+ },
+ "type": "cakephp-plugin",
+ "autoload": {
+ "psr-4": {
+ "Bake\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/bake/graphs/contributors"
+ }
+ ],
+ "description": "Bake plugin for CakePHP",
+ "homepage": "https://github.com/cakephp/bake",
+ "keywords": [
+ "bake",
+ "cakephp"
+ ],
+ "support": {
+ "forum": "https://stackoverflow.com/tags/cakephp",
+ "issues": "https://github.com/cakephp/bake/issues",
+ "source": "https://github.com/cakephp/bake"
+ },
+ "time": "2024-03-11T17:36:39+00:00"
+ },
+ {
+ "name": "cakephp/cakephp-codesniffer",
+ "version": "5.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/cakephp-codesniffer.git",
+ "reference": "04860c9746810d22d02d014deeb57bc80bf57804"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/cakephp-codesniffer/zipball/04860c9746810d22d02d014deeb57bc80bf57804",
+ "reference": "04860c9746810d22d02d014deeb57bc80bf57804",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1.0",
+ "phpstan/phpdoc-parser": "^1.4.5",
+ "slevomat/coding-standard": "^8.15",
+ "squizlabs/php_codesniffer": "^3.9"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3.4"
+ },
+ "type": "phpcodesniffer-standard",
+ "autoload": {
+ "psr-4": {
+ "CakePHP\\": "CakePHP/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/cakephp-codesniffer/graphs/contributors"
+ }
+ ],
+ "description": "CakePHP CodeSniffer Standards",
+ "homepage": "https://cakephp.org",
+ "keywords": [
+ "codesniffer",
+ "framework"
+ ],
+ "support": {
+ "forum": "https://stackoverflow.com/tags/cakephp",
+ "irc": "irc://irc.freenode.org/cakephp",
+ "issues": "https://github.com/cakephp/cakephp-codesniffer/issues",
+ "source": "https://github.com/cakephp/cakephp-codesniffer"
+ },
+ "time": "2024-08-13T10:21:08+00:00"
+ },
+ {
+ "name": "cakephp/debug_kit",
+ "version": "5.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/debug_kit.git",
+ "reference": "e3af2116c9a94a15d4cdf00835bb496d6f94f709"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/debug_kit/zipball/e3af2116c9a94a15d4cdf00835bb496d6f94f709",
+ "reference": "e3af2116c9a94a15d4cdf00835bb496d6f94f709",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/cakephp": "^5.0",
+ "composer/composer": "^2.0",
+ "doctrine/sql-formatter": "^1.1.3",
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "cakephp/authorization": "^3.0",
+ "cakephp/cakephp-codesniffer": "^5.0",
+ "phpunit/phpunit": "^10.1.0 <=10.5.3"
+ },
+ "suggest": {
+ "ext-pdo_sqlite": "DebugKit needs to store panel data in a database. SQLite is simple and easy to use."
+ },
+ "type": "cakephp-plugin",
+ "autoload": {
+ "psr-4": {
+ "DebugKit\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mark Story",
+ "homepage": "https://mark-story.com",
+ "role": "Author"
+ },
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/debug_kit/graphs/contributors"
+ }
+ ],
+ "description": "CakePHP Debug Kit",
+ "homepage": "https://github.com/cakephp/debug_kit",
+ "keywords": [
+ "cakephp",
+ "debug",
+ "dev",
+ "kit"
+ ],
+ "support": {
+ "forum": "https://stackoverflow.com/tags/cakephp",
+ "irc": "irc://irc.freenode.org/cakephp",
+ "issues": "https://github.com/cakephp/debug_kit/issues",
+ "source": "https://github.com/cakephp/debug_kit"
+ },
+ "time": "2024-03-04T15:03:18+00:00"
+ },
+ {
+ "name": "cakephp/twig-view",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/twig-view.git",
+ "reference": "2bda8f75e97d821b20bda521c4306240241c401b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/twig-view/zipball/2bda8f75e97d821b20bda521c4306240241c401b",
+ "reference": "2bda8f75e97d821b20bda521c4306240241c401b",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/cakephp": "^5.0.0",
+ "jasny/twig-extensions": "^1.3",
+ "twig/markdown-extra": "^3.0",
+ "twig/twig": "^3.10.3"
+ },
+ "conflict": {
+ "wyrihaximus/twig-view": "*"
+ },
+ "require-dev": {
+ "cakephp/cakephp-codesniffer": "^5.0",
+ "cakephp/debug_kit": "^5.0",
+ "cakephp/plugin-installer": "^1.3",
+ "michelf/php-markdown": "^1.9",
+ "mikey179/vfsstream": "^1.6.10",
+ "phpunit/phpunit": "^10.1.0"
+ },
+ "type": "cakephp-plugin",
+ "autoload": {
+ "psr-4": {
+ "Cake\\TwigView\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/cakephp/graphs/contributors"
+ }
+ ],
+ "description": "Twig powered View for CakePHP",
+ "keywords": [
+ "cakephp",
+ "template",
+ "twig",
+ "view"
+ ],
+ "support": {
+ "forum": "https://stackoverflow.com/tags/cakephp",
+ "irc": "irc://irc.freenode.org/cakephp",
+ "issues": "https://github.com/cakephp/twig-view/issues",
+ "source": "https://github.com/cakephp/twig-view"
+ },
+ "time": "2024-07-02T20:42:26+00:00"
+ },
+ {
+ "name": "composer/class-map-generator",
+ "version": "1.3.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/class-map-generator.git",
+ "reference": "b1b3fd0b4eaf3ddf3ee230bc340bf3fff454a1a3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/class-map-generator/zipball/b1b3fd0b4eaf3ddf3ee230bc340bf3fff454a1a3",
+ "reference": "b1b3fd0b4eaf3ddf3ee230bc340bf3fff454a1a3",
+ "shasum": ""
+ },
+ "require": {
+ "composer/pcre": "^2.1 || ^3.1",
+ "php": "^7.2 || ^8.0",
+ "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.6",
+ "phpstan/phpstan-deprecation-rules": "^1",
+ "phpstan/phpstan-phpunit": "^1",
+ "phpstan/phpstan-strict-rules": "^1.1",
+ "symfony/filesystem": "^5.4 || ^6",
+ "symfony/phpunit-bridge": "^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\ClassMapGenerator\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "https://seld.be"
+ }
+ ],
+ "description": "Utilities to scan PHP code and generate class maps.",
+ "keywords": [
+ "classmap"
+ ],
+ "support": {
+ "issues": "https://github.com/composer/class-map-generator/issues",
+ "source": "https://github.com/composer/class-map-generator/tree/1.3.4"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-06-12T14:13:04+00:00"
+ },
+ {
+ "name": "composer/composer",
+ "version": "2.7.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/composer.git",
+ "reference": "e30ccdd665828ae66eb1be78f056e39e1d5f55ab"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/composer/zipball/e30ccdd665828ae66eb1be78f056e39e1d5f55ab",
+ "reference": "e30ccdd665828ae66eb1be78f056e39e1d5f55ab",
+ "shasum": ""
+ },
+ "require": {
+ "composer/ca-bundle": "^1.5",
+ "composer/class-map-generator": "^1.3.3",
+ "composer/metadata-minifier": "^1.0",
+ "composer/pcre": "^2.2 || ^3.2",
+ "composer/semver": "^3.3",
+ "composer/spdx-licenses": "^1.5.7",
+ "composer/xdebug-handler": "^2.0.2 || ^3.0.3",
+ "justinrainbow/json-schema": "^5.3",
+ "php": "^7.2.5 || ^8.0",
+ "psr/log": "^1.0 || ^2.0 || ^3.0",
+ "react/promise": "^3.2",
+ "seld/jsonlint": "^1.4",
+ "seld/phar-utils": "^1.2",
+ "seld/signal-handler": "^2.0",
+ "symfony/console": "^5.4.35 || ^6.3.12 || ^7.0.3",
+ "symfony/filesystem": "^5.4.35 || ^6.3.12 || ^7.0.3",
+ "symfony/finder": "^5.4.35 || ^6.3.12 || ^7.0.3",
+ "symfony/polyfill-php73": "^1.24",
+ "symfony/polyfill-php80": "^1.24",
+ "symfony/polyfill-php81": "^1.24",
+ "symfony/process": "^5.4.35 || ^6.3.12 || ^7.0.3"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.11.8",
+ "phpstan/phpstan-deprecation-rules": "^1.2.0",
+ "phpstan/phpstan-phpunit": "^1.4.0",
+ "phpstan/phpstan-strict-rules": "^1.6.0",
+ "phpstan/phpstan-symfony": "^1.4.0",
+ "symfony/phpunit-bridge": "^6.4.3 || ^7.0.1"
+ },
+ "suggest": {
+ "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
+ "ext-zip": "Enabling the zip extension allows you to unzip archives",
+ "ext-zlib": "Allow gzip compression of HTTP requests"
+ },
+ "bin": [
+ "bin/composer"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.7-dev"
+ },
+ "phpstan": {
+ "includes": [
+ "phpstan/rules.neon"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\": "src/Composer/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nils Adermann",
+ "email": "naderman@naderman.de",
+ "homepage": "https://www.naderman.de"
+ },
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "https://seld.be"
+ }
+ ],
+ "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.",
+ "homepage": "https://getcomposer.org/",
+ "keywords": [
+ "autoload",
+ "dependency",
+ "package"
+ ],
+ "support": {
+ "irc": "ircs://irc.libera.chat:6697/composer",
+ "issues": "https://github.com/composer/composer/issues",
+ "security": "https://github.com/composer/composer/security/policy",
+ "source": "https://github.com/composer/composer/tree/2.7.9"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-04T12:43:28+00:00"
+ },
+ {
+ "name": "composer/metadata-minifier",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/metadata-minifier.git",
+ "reference": "c549d23829536f0d0e984aaabbf02af91f443207"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/metadata-minifier/zipball/c549d23829536f0d0e984aaabbf02af91f443207",
+ "reference": "c549d23829536f0d0e984aaabbf02af91f443207",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.2 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "composer/composer": "^2",
+ "phpstan/phpstan": "^0.12.55",
+ "symfony/phpunit-bridge": "^4.2 || ^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\MetadataMinifier\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "Small utility library that handles metadata minification and expansion.",
+ "keywords": [
+ "composer",
+ "compression"
+ ],
+ "support": {
+ "issues": "https://github.com/composer/metadata-minifier/issues",
+ "source": "https://github.com/composer/metadata-minifier/tree/1.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-04-07T13:37:33+00:00"
+ },
+ {
+ "name": "composer/pcre",
+ "version": "3.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/pcre.git",
+ "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/pcre/zipball/63aaeac21d7e775ff9bc9d45021e1745c97521c4",
+ "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4 || ^8.0"
+ },
+ "conflict": {
+ "phpstan/phpstan": "<1.11.10"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.11.10",
+ "phpstan/phpstan-strict-rules": "^1.1",
+ "phpunit/phpunit": "^8 || ^9"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.x-dev"
+ },
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\Pcre\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "PCRE wrapping library that offers type-safe preg_* replacements.",
+ "keywords": [
+ "PCRE",
+ "preg",
+ "regex",
+ "regular expression"
+ ],
+ "support": {
+ "issues": "https://github.com/composer/pcre/issues",
+ "source": "https://github.com/composer/pcre/tree/3.3.1"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-08-27T18:44:43+00:00"
+ },
+ {
+ "name": "composer/semver",
+ "version": "3.4.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/semver.git",
+ "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6",
+ "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.2 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.4",
+ "symfony/phpunit-bridge": "^4.2 || ^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\Semver\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nils Adermann",
+ "email": "naderman@naderman.de",
+ "homepage": "http://www.naderman.de"
+ },
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ },
+ {
+ "name": "Rob Bast",
+ "email": "rob.bast@gmail.com",
+ "homepage": "http://robbast.nl"
+ }
+ ],
+ "description": "Semver library that offers utilities, version constraint parsing and validation.",
+ "keywords": [
+ "semantic",
+ "semver",
+ "validation",
+ "versioning"
+ ],
+ "support": {
+ "irc": "ircs://irc.libera.chat:6697/composer",
+ "issues": "https://github.com/composer/semver/issues",
+ "source": "https://github.com/composer/semver/tree/3.4.2"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-07-12T11:35:52+00:00"
+ },
+ {
+ "name": "composer/spdx-licenses",
+ "version": "1.5.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/spdx-licenses.git",
+ "reference": "560bdcf8deb88ae5d611c80a2de8ea9d0358cc0a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/560bdcf8deb88ae5d611c80a2de8ea9d0358cc0a",
+ "reference": "560bdcf8deb88ae5d611c80a2de8ea9d0358cc0a",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.2 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^0.12.55",
+ "symfony/phpunit-bridge": "^4.2 || ^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\Spdx\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nils Adermann",
+ "email": "naderman@naderman.de",
+ "homepage": "http://www.naderman.de"
+ },
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ },
+ {
+ "name": "Rob Bast",
+ "email": "rob.bast@gmail.com",
+ "homepage": "http://robbast.nl"
+ }
+ ],
+ "description": "SPDX licenses list and validation library.",
+ "keywords": [
+ "license",
+ "spdx",
+ "validator"
+ ],
+ "support": {
+ "irc": "ircs://irc.libera.chat:6697/composer",
+ "issues": "https://github.com/composer/spdx-licenses/issues",
+ "source": "https://github.com/composer/spdx-licenses/tree/1.5.8"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-11-20T07:44:33+00:00"
+ },
+ {
+ "name": "composer/xdebug-handler",
+ "version": "3.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/xdebug-handler.git",
+ "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef",
+ "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef",
+ "shasum": ""
+ },
+ "require": {
+ "composer/pcre": "^1 || ^2 || ^3",
+ "php": "^7.2.5 || ^8.0",
+ "psr/log": "^1 || ^2 || ^3"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.0",
+ "phpstan/phpstan-strict-rules": "^1.1",
+ "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Composer\\XdebugHandler\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "John Stevenson",
+ "email": "john-stevenson@blueyonder.co.uk"
+ }
+ ],
+ "description": "Restarts a process without Xdebug.",
+ "keywords": [
+ "Xdebug",
+ "performance"
+ ],
+ "support": {
+ "irc": "ircs://irc.libera.chat:6697/composer",
+ "issues": "https://github.com/composer/xdebug-handler/issues",
+ "source": "https://github.com/composer/xdebug-handler/tree/3.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-05-06T16:37:16+00:00"
+ },
+ {
+ "name": "dealerdirect/phpcodesniffer-composer-installer",
+ "version": "v1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPCSStandards/composer-installer.git",
+ "reference": "4be43904336affa5c2f70744a348312336afd0da"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/4be43904336affa5c2f70744a348312336afd0da",
+ "reference": "4be43904336affa5c2f70744a348312336afd0da",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "^1.0 || ^2.0",
+ "php": ">=5.4",
+ "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0"
+ },
+ "require-dev": {
+ "composer/composer": "*",
+ "ext-json": "*",
+ "ext-zip": "*",
+ "php-parallel-lint/php-parallel-lint": "^1.3.1",
+ "phpcompatibility/php-compatibility": "^9.0",
+ "yoast/phpunit-polyfills": "^1.0"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin"
+ },
+ "autoload": {
+ "psr-4": {
+ "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Franck Nijhof",
+ "email": "franck.nijhof@dealerdirect.com",
+ "homepage": "http://www.frenck.nl",
+ "role": "Developer / IT Manager"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/PHPCSStandards/composer-installer/graphs/contributors"
+ }
+ ],
+ "description": "PHP_CodeSniffer Standards Composer Installer Plugin",
+ "homepage": "http://www.dealerdirect.com",
+ "keywords": [
+ "PHPCodeSniffer",
+ "PHP_CodeSniffer",
+ "code quality",
+ "codesniffer",
+ "composer",
+ "installer",
+ "phpcbf",
+ "phpcs",
+ "plugin",
+ "qa",
+ "quality",
+ "standard",
+ "standards",
+ "style guide",
+ "stylecheck",
+ "tests"
+ ],
+ "support": {
+ "issues": "https://github.com/PHPCSStandards/composer-installer/issues",
+ "source": "https://github.com/PHPCSStandards/composer-installer"
+ },
+ "time": "2023-01-05T11:28:13+00:00"
+ },
+ {
+ "name": "doctrine/sql-formatter",
+ "version": "1.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/sql-formatter.git",
+ "reference": "7f83911cc5eba870de7ebb11283972483f7e2891"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/7f83911cc5eba870de7ebb11283972483f7e2891",
+ "reference": "7f83911cc5eba870de7ebb11283972483f7e2891",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^12",
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^10.5",
+ "vimeo/psalm": "^5.24"
+ },
+ "bin": [
+ "bin/sql-formatter"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\SqlFormatter\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jeremy Dorn",
+ "email": "jeremy@jeremydorn.com",
+ "homepage": "https://jeremydorn.com/"
+ }
+ ],
+ "description": "a PHP SQL highlighting library",
+ "homepage": "https://github.com/doctrine/sql-formatter/",
+ "keywords": [
+ "highlight",
+ "sql"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/sql-formatter/issues",
+ "source": "https://github.com/doctrine/sql-formatter/tree/1.4.1"
+ },
+ "time": "2024-08-05T20:32:22+00:00"
+ },
+ {
+ "name": "fakerphp/faker",
+ "version": "v1.23.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/FakerPHP/Faker.git",
+ "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b",
+ "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4 || ^8.0",
+ "psr/container": "^1.0 || ^2.0",
+ "symfony/deprecation-contracts": "^2.2 || ^3.0"
+ },
+ "conflict": {
+ "fzaninotto/faker": "*"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.4.1",
+ "doctrine/persistence": "^1.3 || ^2.0",
+ "ext-intl": "*",
+ "phpunit/phpunit": "^9.5.26",
+ "symfony/phpunit-bridge": "^5.4.16"
+ },
+ "suggest": {
+ "doctrine/orm": "Required to use Faker\\ORM\\Doctrine",
+ "ext-curl": "Required by Faker\\Provider\\Image to download images.",
+ "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.",
+ "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.",
+ "ext-mbstring": "Required for multibyte Unicode string functionality."
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Faker\\": "src/Faker/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "François Zaninotto"
+ }
+ ],
+ "description": "Faker is a PHP library that generates fake data for you.",
+ "keywords": [
+ "data",
+ "faker",
+ "fixtures"
+ ],
+ "support": {
+ "issues": "https://github.com/FakerPHP/Faker/issues",
+ "source": "https://github.com/FakerPHP/Faker/tree/v1.23.1"
+ },
+ "time": "2024-01-02T13:46:09+00:00"
+ },
+ {
+ "name": "jasny/twig-extensions",
+ "version": "v1.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/jasny/twig-extensions.git",
+ "reference": "8a5ca5f49317bf421a519556ad2e876820d41e01"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/jasny/twig-extensions/zipball/8a5ca5f49317bf421a519556ad2e876820d41e01",
+ "reference": "8a5ca5f49317bf421a519556ad2e876820d41e01",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.4.0",
+ "twig/twig": "^2.7 | ^3.0"
+ },
+ "require-dev": {
+ "ext-intl": "*",
+ "ext-json": "*",
+ "ext-pcre": "*",
+ "phpstan/phpstan": "^1.12.0",
+ "phpunit/phpunit": "^9.6",
+ "squizlabs/php_codesniffer": "^3.10"
+ },
+ "suggest": {
+ "ext-intl": "Required for the use of the LocalDate Twig extension",
+ "ext-pcre": "Required for the use of the PCRE Twig extension"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Jasny\\Twig\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Arnold Daniels",
+ "email": "arnold@jasny.net",
+ "homepage": "http://www.jasny.net"
+ }
+ ],
+ "description": "A set of useful Twig filters",
+ "homepage": "http://github.com/jasny/twig-extensions#README",
+ "keywords": [
+ "PCRE",
+ "array",
+ "date",
+ "datetime",
+ "preg",
+ "regex",
+ "templating",
+ "text",
+ "time"
+ ],
+ "support": {
+ "issues": "https://github.com/jasny/twig-extensions/issues",
+ "source": "https://github.com/jasny/twig-extensions"
+ },
+ "time": "2024-09-03T09:04:53+00:00"
+ },
+ {
+ "name": "josegonzalez/dotenv",
+ "version": "4.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/josegonzalez/php-dotenv.git",
+ "reference": "e97dbd3db53508dcd536e73ec787a7f11458d41d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/josegonzalez/php-dotenv/zipball/e97dbd3db53508dcd536e73ec787a7f11458d41d",
+ "reference": "e97dbd3db53508dcd536e73ec787a7f11458d41d",
+ "shasum": ""
+ },
+ "require": {
+ "m1/env": "2.*",
+ "php": ">=5.5.0"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "~2.0",
+ "php-mock/php-mock-phpunit": "~1.1||~2.0",
+ "squizlabs/php_codesniffer": "~2.9||~3.7"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "josegonzalez\\Dotenv": [
+ "src",
+ "tests"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jose Diaz-Gonzalez",
+ "email": "dotenv@josegonzalez.com",
+ "homepage": "http://josediazgonzalez.com",
+ "role": "Maintainer"
+ }
+ ],
+ "description": "dotenv file parsing for PHP",
+ "homepage": "https://github.com/josegonzalez/php-dotenv",
+ "keywords": [
+ "configuration",
+ "dotenv",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/josegonzalez/php-dotenv/issues",
+ "source": "https://github.com/josegonzalez/php-dotenv/tree/4.0.0"
+ },
+ "time": "2023-05-29T22:49:26+00:00"
+ },
+ {
+ "name": "justinrainbow/json-schema",
+ "version": "5.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/jsonrainbow/json-schema.git",
+ "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8",
+ "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1",
+ "json-schema/json-schema-test-suite": "1.2.0",
+ "phpunit/phpunit": "^4.8.35"
+ },
+ "bin": [
+ "bin/validate-json"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "JsonSchema\\": "src/JsonSchema/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bruno Prieto Reis",
+ "email": "bruno.p.reis@gmail.com"
+ },
+ {
+ "name": "Justin Rainbow",
+ "email": "justin.rainbow@gmail.com"
+ },
+ {
+ "name": "Igor Wiedler",
+ "email": "igor@wiedler.ch"
+ },
+ {
+ "name": "Robert Schönthal",
+ "email": "seroscho@googlemail.com"
+ }
+ ],
+ "description": "A library to validate a json schema.",
+ "homepage": "https://github.com/justinrainbow/json-schema",
+ "keywords": [
+ "json",
+ "schema"
+ ],
+ "support": {
+ "issues": "https://github.com/jsonrainbow/json-schema/issues",
+ "source": "https://github.com/jsonrainbow/json-schema/tree/5.3.0"
+ },
+ "time": "2024-07-06T21:00:26+00:00"
+ },
+ {
+ "name": "m1/env",
+ "version": "2.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/m1/Env.git",
+ "reference": "5c296e3e13450a207e12b343f3af1d7ab569f6f3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/m1/Env/zipball/5c296e3e13450a207e12b343f3af1d7ab569f6f3",
+ "reference": "5c296e3e13450a207e12b343f3af1d7ab569f6f3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.*",
+ "scrutinizer/ocular": "~1.1",
+ "squizlabs/php_codesniffer": "^2.3"
+ },
+ "suggest": {
+ "josegonzalez/dotenv": "For loading of .env",
+ "m1/vars": "For loading of configs"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "M1\\Env\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Miles Croxford",
+ "email": "hello@milescroxford.com",
+ "homepage": "http://milescroxford.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "Env is a lightweight library bringing .env file parser compatibility to PHP. In short - it enables you to read .env files with PHP.",
+ "homepage": "https://github.com/m1/Env",
+ "keywords": [
+ ".env",
+ "config",
+ "dotenv",
+ "env",
+ "loader",
+ "m1",
+ "parser",
+ "support"
+ ],
+ "support": {
+ "issues": "https://github.com/m1/Env/issues",
+ "source": "https://github.com/m1/Env/tree/2.2.0"
+ },
+ "time": "2020-02-19T09:02:13+00:00"
+ },
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.12.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c",
+ "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/collections": "<1.6.8",
+ "doctrine/common": "<2.13.3 || >=3 <3.2.2"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.6.8",
+ "doctrine/common": "^2.13.3 || ^3.2.2",
+ "phpspec/prophecy": "^1.10",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ],
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "support": {
+ "issues": "https://github.com/myclabs/DeepCopy/issues",
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0"
+ },
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-06-12T14:39:25+00:00"
+ },
+ {
+ "name": "nikic/php-parser",
+ "version": "v4.19.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/PHP-Parser.git",
+ "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b",
+ "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "ircmaxell/php-yacc": "^0.0.7",
+ "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
+ },
+ "bin": [
+ "bin/php-parse"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpParser\\": "lib/PhpParser"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov"
+ }
+ ],
+ "description": "A PHP parser written in PHP",
+ "keywords": [
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1"
+ },
+ "time": "2024-03-17T08:10:35+00:00"
+ },
+ {
+ "name": "phar-io/manifest",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-phar": "*",
+ "ext-xmlwriter": "*",
+ "phar-io/version": "^3.0.1",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+ "support": {
+ "issues": "https://github.com/phar-io/manifest/issues",
+ "source": "https://github.com/phar-io/manifest/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-03T12:33:53+00:00"
+ },
+ {
+ "name": "phar-io/version",
+ "version": "3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Library for handling version information and constraints",
+ "support": {
+ "issues": "https://github.com/phar-io/version/issues",
+ "source": "https://github.com/phar-io/version/tree/3.2.1"
+ },
+ "time": "2022-02-21T01:04:05+00:00"
+ },
+ {
+ "name": "phpstan/phpdoc-parser",
+ "version": "1.30.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpstan/phpdoc-parser.git",
+ "reference": "5ceb0e384997db59f38774bf79c2a6134252c08f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/5ceb0e384997db59f38774bf79c2a6134252c08f",
+ "reference": "5ceb0e384997db59f38774bf79c2a6134252c08f",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/annotations": "^2.0",
+ "nikic/php-parser": "^4.15",
+ "php-parallel-lint/php-parallel-lint": "^1.2",
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "^1.5",
+ "phpstan/phpstan-phpunit": "^1.1",
+ "phpstan/phpstan-strict-rules": "^1.0",
+ "phpunit/phpunit": "^9.5",
+ "symfony/process": "^5.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "PHPStan\\PhpDocParser\\": [
+ "src/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "PHPDoc parser with support for nullable, intersection and generic types",
+ "support": {
+ "issues": "https://github.com/phpstan/phpdoc-parser/issues",
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.30.0"
+ },
+ "time": "2024-08-29T09:54:52+00:00"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "10.1.16",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "7e308268858ed6baedc8704a304727d20bc07c77"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77",
+ "reference": "7e308268858ed6baedc8704a304727d20bc07c77",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-xmlwriter": "*",
+ "nikic/php-parser": "^4.19.1 || ^5.1.0",
+ "php": ">=8.1",
+ "phpunit/php-file-iterator": "^4.1.0",
+ "phpunit/php-text-template": "^3.0.1",
+ "sebastian/code-unit-reverse-lookup": "^3.0.0",
+ "sebastian/complexity": "^3.2.0",
+ "sebastian/environment": "^6.1.0",
+ "sebastian/lines-of-code": "^2.0.2",
+ "sebastian/version": "^4.0.1",
+ "theseer/tokenizer": "^1.2.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^10.1"
+ },
+ "suggest": {
+ "ext-pcov": "PHP extension that provides line coverage",
+ "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "10.1.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+ "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-08-22T04:31:57+00:00"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "4.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c",
+ "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^10.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+ "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-08-31T06:24:48+00:00"
+ },
+ {
+ "name": "phpunit/php-invoker",
+ "version": "4.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-invoker.git",
+ "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7",
+ "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "ext-pcntl": "*",
+ "phpunit/phpunit": "^10.0"
+ },
+ "suggest": {
+ "ext-pcntl": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Invoke callables with a timeout",
+ "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+ "keywords": [
+ "process"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T06:56:09+00:00"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748",
+ "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^10.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+ "security": "https://github.com/sebastianbergmann/php-text-template/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-08-31T14:07:24+00:00"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "6.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d",
+ "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^10.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T06:57:52+00:00"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "10.5.31",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "43e7c3e6a484e538453f89dfa6a6f308c32792da"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/43e7c3e6a484e538453f89dfa6a6f308c32792da",
+ "reference": "43e7c3e6a484e538453f89dfa6a6f308c32792da",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "ext-xmlwriter": "*",
+ "myclabs/deep-copy": "^1.12.0",
+ "phar-io/manifest": "^2.0.4",
+ "phar-io/version": "^3.2.1",
+ "php": ">=8.1",
+ "phpunit/php-code-coverage": "^10.1.16",
+ "phpunit/php-file-iterator": "^4.1.0",
+ "phpunit/php-invoker": "^4.0.0",
+ "phpunit/php-text-template": "^3.0.1",
+ "phpunit/php-timer": "^6.0.0",
+ "sebastian/cli-parser": "^2.0.1",
+ "sebastian/code-unit": "^2.0.0",
+ "sebastian/comparator": "^5.0.2",
+ "sebastian/diff": "^5.1.1",
+ "sebastian/environment": "^6.1.0",
+ "sebastian/exporter": "^5.1.2",
+ "sebastian/global-state": "^6.0.2",
+ "sebastian/object-enumerator": "^5.0.0",
+ "sebastian/recursion-context": "^5.0.0",
+ "sebastian/type": "^4.0.0",
+ "sebastian/version": "^4.0.1"
+ },
+ "suggest": {
+ "ext-soap": "To be able to generate mocks based on WSDL files"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "10.5-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Framework/Assert/Functions.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+ "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.31"
+ },
+ "funding": [
+ {
+ "url": "https://phpunit.de/sponsors.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-03T11:57:55+00:00"
+ },
+ {
+ "name": "react/promise",
+ "version": "v3.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/promise.git",
+ "reference": "8a164643313c71354582dc850b42b33fa12a4b63"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63",
+ "reference": "8a164643313c71354582dc850b42b33fa12a4b63",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "1.10.39 || 1.4.10",
+ "phpunit/phpunit": "^9.6 || ^7.5"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "React\\Promise\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com",
+ "homepage": "https://sorgalla.com/"
+ },
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering",
+ "homepage": "https://clue.engineering/"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "reactphp@ceesjankiewiet.nl",
+ "homepage": "https://wyrihaximus.net/"
+ },
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "homepage": "https://cboden.dev/"
+ }
+ ],
+ "description": "A lightweight implementation of CommonJS Promises/A for PHP",
+ "keywords": [
+ "promise",
+ "promises"
+ ],
+ "support": {
+ "issues": "https://github.com/reactphp/promise/issues",
+ "source": "https://github.com/reactphp/promise/tree/v3.2.0"
+ },
+ "funding": [
+ {
+ "url": "https://opencollective.com/reactphp",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2024-05-24T10:39:05+00:00"
+ },
+ {
+ "name": "sebastian/cli-parser",
+ "version": "2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/cli-parser.git",
+ "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084",
+ "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^10.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for parsing CLI options",
+ "homepage": "https://github.com/sebastianbergmann/cli-parser",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
+ "security": "https://github.com/sebastianbergmann/cli-parser/security/policy",
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-02T07:12:49+00:00"
+ },
+ {
+ "name": "sebastian/code-unit",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit.git",
+ "reference": "a81fee9eef0b7a76af11d121767abc44c104e503"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503",
+ "reference": "a81fee9eef0b7a76af11d121767abc44c104e503",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^10.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/code-unit",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T06:58:43+00:00"
+ },
+ {
+ "name": "sebastian/code-unit-reverse-lookup",
+ "version": "3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+ "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d",
+ "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^10.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Looks up which function or method a line of code belongs to",
+ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T06:59:15+00:00"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "5.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53",
+ "reference": "2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-mbstring": "*",
+ "php": ">=8.1",
+ "sebastian/diff": "^5.0",
+ "sebastian/exporter": "^5.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^10.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
+ "security": "https://github.com/sebastianbergmann/comparator/security/policy",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-08-12T06:03:08+00:00"
+ },
+ {
+ "name": "sebastian/complexity",
+ "version": "3.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/complexity.git",
+ "reference": "68ff824baeae169ec9f2137158ee529584553799"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799",
+ "reference": "68ff824baeae169ec9f2137158ee529584553799",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^4.18 || ^5.0",
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^10.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for calculating the complexity of PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/complexity",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/complexity/issues",
+ "security": "https://github.com/sebastianbergmann/complexity/security/policy",
+ "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-12-21T08:37:17+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "5.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e",
+ "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^10.0",
+ "symfony/process": "^6.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
+ "security": "https://github.com/sebastianbergmann/diff/security/policy",
+ "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-02T07:15:17+00:00"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "6.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "8074dbcd93529b357029f5cc5058fd3e43666984"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984",
+ "reference": "8074dbcd93529b357029f5cc5058fd3e43666984",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^10.0"
+ },
+ "suggest": {
+ "ext-posix": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "https://github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
+ "security": "https://github.com/sebastianbergmann/environment/security/policy",
+ "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-23T08:47:14+00:00"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "5.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "955288482d97c19a372d3f31006ab3f37da47adf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf",
+ "reference": "955288482d97c19a372d3f31006ab3f37da47adf",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "php": ">=8.1",
+ "sebastian/recursion-context": "^5.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^10.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "https://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
+ "security": "https://github.com/sebastianbergmann/exporter/security/policy",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-02T07:17:12+00:00"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "6.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9",
+ "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "sebastian/object-reflector": "^3.0",
+ "sebastian/recursion-context": "^5.0"
+ },
+ "require-dev": {
+ "ext-dom": "*",
+ "phpunit/phpunit": "^10.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "https://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/global-state/issues",
+ "security": "https://github.com/sebastianbergmann/global-state/security/policy",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-02T07:19:19+00:00"
+ },
+ {
+ "name": "sebastian/lines-of-code",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+ "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0",
+ "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^4.18 || ^5.0",
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^10.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for counting the lines of code in PHP source code",
+ "homepage": "https://github.com/sebastianbergmann/lines-of-code",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
+ "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy",
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-12-21T08:38:20+00:00"
+ },
+ {
+ "name": "sebastian/object-enumerator",
+ "version": "5.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906",
+ "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "sebastian/object-reflector": "^3.0",
+ "sebastian/recursion-context": "^5.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^10.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T07:08:32+00:00"
+ },
+ {
+ "name": "sebastian/object-reflector",
+ "version": "3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "24ed13d98130f0e7122df55d06c5c4942a577957"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957",
+ "reference": "24ed13d98130f0e7122df55d06c5c4942a577957",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^10.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Allows reflection of object attributes, including inherited and non-public ones",
+ "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T07:06:18+00:00"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "5.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "05909fb5bc7df4c52992396d0116aed689f93712"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712",
+ "reference": "05909fb5bc7df4c52992396d0116aed689f93712",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^10.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "https://github.com/sebastianbergmann/recursion-context",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T07:05:40+00:00"
+ },
+ {
+ "name": "sebastian/type",
+ "version": "4.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/type.git",
+ "reference": "462699a16464c3944eefc02ebdd77882bd3925bf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf",
+ "reference": "462699a16464c3944eefc02ebdd77882bd3925bf",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^10.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the types of the PHP type system",
+ "homepage": "https://github.com/sebastianbergmann/type",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/type/issues",
+ "source": "https://github.com/sebastianbergmann/type/tree/4.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T07:10:45+00:00"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "4.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17",
+ "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/version/issues",
+ "source": "https://github.com/sebastianbergmann/version/tree/4.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-07T11:34:05+00:00"
+ },
+ {
+ "name": "seld/jsonlint",
+ "version": "1.11.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/jsonlint.git",
+ "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/1748aaf847fc731cfad7725aec413ee46f0cc3a2",
+ "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.11",
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13"
+ },
+ "bin": [
+ "bin/jsonlint"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Seld\\JsonLint\\": "src/Seld/JsonLint/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "https://seld.be"
+ }
+ ],
+ "description": "JSON Linter",
+ "keywords": [
+ "json",
+ "linter",
+ "parser",
+ "validator"
+ ],
+ "support": {
+ "issues": "https://github.com/Seldaek/jsonlint/issues",
+ "source": "https://github.com/Seldaek/jsonlint/tree/1.11.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/Seldaek",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-07-11T14:55:45+00:00"
+ },
+ {
+ "name": "seld/phar-utils",
+ "version": "1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/phar-utils.git",
+ "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/ea2f4014f163c1be4c601b9b7bd6af81ba8d701c",
+ "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Seld\\PharUtils\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be"
+ }
+ ],
+ "description": "PHAR file format utilities, for when PHP phars you up",
+ "keywords": [
+ "phar"
+ ],
+ "support": {
+ "issues": "https://github.com/Seldaek/phar-utils/issues",
+ "source": "https://github.com/Seldaek/phar-utils/tree/1.2.1"
+ },
+ "time": "2022-08-31T10:31:18+00:00"
+ },
+ {
+ "name": "seld/signal-handler",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/signal-handler.git",
+ "reference": "04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/signal-handler/zipball/04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98",
+ "reference": "04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1",
+ "phpstan/phpstan-deprecation-rules": "^1.0",
+ "phpstan/phpstan-phpunit": "^1",
+ "phpstan/phpstan-strict-rules": "^1.3",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23",
+ "psr/log": "^1 || ^2 || ^3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Seld\\Signal\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "Simple unix signal handler that silently fails where signals are not supported for easy cross-platform development",
+ "keywords": [
+ "posix",
+ "sigint",
+ "signal",
+ "sigterm",
+ "unix"
+ ],
+ "support": {
+ "issues": "https://github.com/Seldaek/signal-handler/issues",
+ "source": "https://github.com/Seldaek/signal-handler/tree/2.0.2"
+ },
+ "time": "2023-09-03T09:24:00+00:00"
+ },
+ {
+ "name": "slevomat/coding-standard",
+ "version": "8.15.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/slevomat/coding-standard.git",
+ "reference": "7d1d957421618a3803b593ec31ace470177d7817"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/7d1d957421618a3803b593ec31ace470177d7817",
+ "reference": "7d1d957421618a3803b593ec31ace470177d7817",
+ "shasum": ""
+ },
+ "require": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.0",
+ "php": "^7.2 || ^8.0",
+ "phpstan/phpdoc-parser": "^1.23.1",
+ "squizlabs/php_codesniffer": "^3.9.0"
+ },
+ "require-dev": {
+ "phing/phing": "2.17.4",
+ "php-parallel-lint/php-parallel-lint": "1.3.2",
+ "phpstan/phpstan": "1.10.60",
+ "phpstan/phpstan-deprecation-rules": "1.1.4",
+ "phpstan/phpstan-phpunit": "1.3.16",
+ "phpstan/phpstan-strict-rules": "1.5.2",
+ "phpunit/phpunit": "8.5.21|9.6.8|10.5.11"
+ },
+ "type": "phpcodesniffer-standard",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "SlevomatCodingStandard\\": "SlevomatCodingStandard/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.",
+ "keywords": [
+ "dev",
+ "phpcs"
+ ],
+ "support": {
+ "issues": "https://github.com/slevomat/coding-standard/issues",
+ "source": "https://github.com/slevomat/coding-standard/tree/8.15.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/kukulich",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-03-09T15:20:58+00:00"
+ },
+ {
+ "name": "squizlabs/php_codesniffer",
+ "version": "3.10.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
+ "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/86e5f5dd9a840c46810ebe5ff1885581c42a3017",
+ "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017",
+ "shasum": ""
+ },
+ "require": {
+ "ext-simplexml": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4"
+ },
+ "bin": [
+ "bin/phpcbf",
+ "bin/phpcs"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Greg Sherwood",
+ "role": "Former lead"
+ },
+ {
+ "name": "Juliette Reinders Folmer",
+ "role": "Current lead"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors"
+ }
+ ],
+ "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
+ "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
+ "keywords": [
+ "phpcs",
+ "standards",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues",
+ "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy",
+ "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
+ "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/PHPCSStandards",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/jrfnl",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/php_codesniffer",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2024-07-21T23:26:44+00:00"
+ },
+ {
+ "name": "symfony/finder",
+ "version": "v6.4.11",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "d7eb6daf8cd7e9ac4976e9576b32042ef7253453"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/d7eb6daf8cd7e9ac4976e9576b32042ef7253453",
+ "reference": "d7eb6daf8cd7e9ac4976e9576b32042ef7253453",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "symfony/filesystem": "^6.0|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Finder\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Finds files and directories via an intuitive fluent interface",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/finder/tree/v6.4.11"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-08-13T14:27:37+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php73",
+ "version": "v1.30.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php73.git",
+ "reference": "ec444d3f3f6505bb28d11afa41e75faadebc10a1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/ec444d3f3f6505bb28d11afa41e75faadebc10a1",
+ "reference": "ec444d3f3f6505bb28d11afa41e75faadebc10a1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php73\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php73/tree/v1.30.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-05-31T15:07:36+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php80",
+ "version": "v1.30.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "77fa7995ac1b21ab60769b7323d600a991a90433"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433",
+ "reference": "77fa7995ac1b21ab60769b7323d600a991a90433",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ion Bazan",
+ "email": "ion.bazan@gmail.com"
+ },
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-05-31T15:07:36+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php81",
+ "version": "v1.30.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php81.git",
+ "reference": "3fb075789fb91f9ad9af537c4012d523085bd5af"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/3fb075789fb91f9ad9af537c4012d523085bd5af",
+ "reference": "3fb075789fb91f9ad9af537c4012d523085bd5af",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php81\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php81/tree/v1.30.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-06-19T12:30:46+00:00"
+ },
+ {
+ "name": "symfony/process",
+ "version": "v6.4.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/process.git",
+ "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/process/zipball/8d92dd79149f29e89ee0f480254db595f6a6a2c5",
+ "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Process\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Executes commands in sub-processes",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/process/tree/v6.4.8"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-05-31T14:49:08+00:00"
+ },
+ {
+ "name": "symplify/monorepo-builder",
+ "version": "11.2.22",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symplify/monorepo-builder.git",
+ "reference": "c913a8524ee276c8c21a09012c137f6913b5dcad"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symplify/monorepo-builder/zipball/c913a8524ee276c8c21a09012c137f6913b5dcad",
+ "reference": "c913a8524ee276c8c21a09012c137f6913b5dcad",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "bin": [
+ "bin/monorepo-builder"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "10.3-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Prefixed version of Not only Composer tools to build a Monorepo.",
+ "support": {
+ "issues": "https://github.com/symplify/monorepo-builder/issues",
+ "source": "https://github.com/symplify/monorepo-builder/tree/11.2.22"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.me/rectorphp",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/tomasvotruba",
+ "type": "github"
+ }
+ ],
+ "time": "2024-08-23T03:19:18+00:00"
+ },
+ {
+ "name": "theseer/tokenizer",
+ "version": "1.2.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/theseer/tokenizer.git",
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+ "support": {
+ "issues": "https://github.com/theseer/tokenizer/issues",
+ "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-03T12:36:25+00:00"
+ },
+ {
+ "name": "twig/markdown-extra",
+ "version": "v3.12.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/twigphp/markdown-extra.git",
+ "reference": "2a94d7902a58147474840c89cbfcd16e68c70499"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/2a94d7902a58147474840c89cbfcd16e68c70499",
+ "reference": "2a94d7902a58147474840c89cbfcd16e68c70499",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "twig/twig": "^3.0"
+ },
+ "require-dev": {
+ "erusev/parsedown": "^1.7",
+ "league/commonmark": "^1.0|^2.0",
+ "league/html-to-markdown": "^4.8|^5.0",
+ "michelf/php-markdown": "^1.8|^2.0",
+ "symfony/phpunit-bridge": "^6.4|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions.php"
+ ],
+ "psr-4": {
+ "Twig\\Extra\\Markdown\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com",
+ "homepage": "http://fabien.potencier.org",
+ "role": "Lead Developer"
+ }
+ ],
+ "description": "A Twig extension for Markdown",
+ "homepage": "https://twig.symfony.com",
+ "keywords": [
+ "html",
+ "markdown",
+ "twig"
+ ],
+ "support": {
+ "source": "https://github.com/twigphp/markdown-extra/tree/v3.12.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/twig/twig",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-08-10T10:32:24+00:00"
+ },
+ {
+ "name": "twig/twig",
+ "version": "v3.12.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/twigphp/Twig.git",
+ "reference": "4d19472d4ac1838e0b1f0e029ce1fa4040eb34ea"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/twigphp/Twig/zipball/4d19472d4ac1838e0b1f0e029ce1fa4040eb34ea",
+ "reference": "4d19472d4ac1838e0b1f0e029ce1fa4040eb34ea",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-ctype": "^1.8",
+ "symfony/polyfill-mbstring": "^1.3",
+ "symfony/polyfill-php81": "^1.29"
+ },
+ "require-dev": {
+ "psr/container": "^1.0|^2.0",
+ "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/Resources/core.php",
+ "src/Resources/debug.php",
+ "src/Resources/escaper.php",
+ "src/Resources/string_loader.php"
+ ],
+ "psr-4": {
+ "Twig\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com",
+ "homepage": "http://fabien.potencier.org",
+ "role": "Lead Developer"
+ },
+ {
+ "name": "Twig Team",
+ "role": "Contributors"
+ },
+ {
+ "name": "Armin Ronacher",
+ "email": "armin.ronacher@active-4.com",
+ "role": "Project Founder"
+ }
+ ],
+ "description": "Twig, the flexible, fast, and secure template language for PHP",
+ "homepage": "https://twig.symfony.com",
+ "keywords": [
+ "templating"
+ ],
+ "support": {
+ "issues": "https://github.com/twigphp/Twig/issues",
+ "source": "https://github.com/twigphp/Twig/tree/v3.12.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/twig/twig",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-08-29T09:51:12+00:00"
+ },
+ {
+ "name": "vierge-noire/cakephp-fixture-factories",
+ "version": "v3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/vierge-noire/cakephp-fixture-factories.git",
+ "reference": "5d3bfe54e74d60ed04f24fa9770c0264f41beefb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/vierge-noire/cakephp-fixture-factories/zipball/5d3bfe54e74d60ed04f24fa9770c0264f41beefb",
+ "reference": "5d3bfe54e74d60ed04f24fa9770c0264f41beefb",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/orm": "^5.0",
+ "fakerphp/faker": "^1.23",
+ "php": ">=8.1",
+ "vierge-noire/cakephp-test-suite-light": "^3.0"
+ },
+ "require-dev": {
+ "cakephp/bake": "^3.0.0",
+ "cakephp/cakephp-codesniffer": "^5.1",
+ "cakephp/migrations": "^4.0.0",
+ "josegonzalez/dotenv": "^4.0.0",
+ "phpstan/phpstan": "^1.0",
+ "phpunit/phpunit": "^10.1",
+ "vimeo/psalm": "^5.0"
+ },
+ "type": "cakephp-plugin",
+ "autoload": {
+ "psr-4": {
+ "CakephpFixtureFactories\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Masson",
+ "email": "nicolas@b-projects.tech"
+ },
+ {
+ "name": "Juan Pablo Ramìrez",
+ "email": "pabloelcolombiano@gmail.com"
+ }
+ ],
+ "description": "CakePHP Dynamic Fixtures",
+ "keywords": [
+ "cakephp",
+ "dynamic",
+ "fixtures",
+ "tests"
+ ],
+ "support": {
+ "issues": "https://github.com/vierge-noire/cakephp-fixture-factories/issues",
+ "source": "https://github.com/vierge-noire/cakephp-fixture-factories/tree/v3.0.2"
+ },
+ "time": "2024-02-08T15:27:18+00:00"
+ },
+ {
+ "name": "vierge-noire/cakephp-test-suite-light",
+ "version": "v3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/vierge-noire/cakephp-test-suite-light.git",
+ "reference": "079ee3c420bcda768906c879df8ed49d2cbef5b7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/vierge-noire/cakephp-test-suite-light/zipball/079ee3c420bcda768906c879df8ed49d2cbef5b7",
+ "reference": "079ee3c420bcda768906c879df8ed49d2cbef5b7",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/cakephp": "^5.0",
+ "ext-pdo": "*",
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "cakephp/migrations": "4.x-dev",
+ "josegonzalez/dotenv": "^4.0.0",
+ "phpunit/phpunit": "^10.1"
+ },
+ "type": "cakephp-plugin",
+ "autoload": {
+ "psr-4": {
+ "CakephpTestSuiteLight\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Masson",
+ "email": "nicolas@b-projects.tech"
+ },
+ {
+ "name": "Juan Pablo Ramìrez",
+ "email": "pabloelcolombiano@gmail.com"
+ }
+ ],
+ "description": "A test suite for CakePHP application based on Sql queries",
+ "keywords": [
+ "cakephp",
+ "test"
+ ],
+ "support": {
+ "issues": "https://github.com/vierge-noire/cakephp-test-suite-light/issues",
+ "source": "https://github.com/vierge-noire/cakephp-test-suite-light/tree/v3.0"
+ },
+ "time": "2023-10-09T18:13:40+00:00"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": [],
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": {
+ "php": ">=8.1",
+ "ext-gd": "*",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "ext-pdo": "*",
+ "ext-sqlite3": "*",
+ "ext-zip": "*"
+ },
+ "platform-dev": {
+ "ext-xdebug": "*"
+ },
+ "plugin-api-version": "2.3.0"
+}
diff --git a/plugins/baser-core/tests/TestCase/View/Helper/BcAdminHelperTest.php b/plugins/baser-core/tests/TestCase/View/Helper/BcAdminHelperTest.php
index 46686d307d..cb6e987d1d 100644
--- a/plugins/baser-core/tests/TestCase/View/Helper/BcAdminHelperTest.php
+++ b/plugins/baser-core/tests/TestCase/View/Helper/BcAdminHelperTest.php
@@ -13,6 +13,7 @@
use BaserCore\Middleware\BcAdminMiddleware;
use BaserCore\Service\Admin\BcAdminAppServiceInterface;
+use BaserCore\Test\Factory\ContentFactory;
use BaserCore\Test\Factory\SiteFactory;
use BaserCore\Test\Factory\UserFactory;
use BaserCore\Test\Scenario\InitAppScenario;
@@ -395,6 +396,69 @@ public function testExistsPublishLink()
$this->assertEquals(true, $this->BcAdmin->existsPublishLink());
}
+ /**
+ * test existsAddLink
+ */
+ public function testExistsAddLink()
+ {
+ //データを生成
+ $this->loadFixtureScenario(InitAppScenario::class);
+ ContentFactory::make(['type' => 'ContentFolder', 'url' => '/service'])->persist();
+ ContentFactory::make(['type' => 'ContentLink', 'url' => '/service-1'])->persist();
+
+ //isAdminSystem = true, return false
+ $request = $this->loginAdmin($this->getRequest('/baser/admin/baser-core/pages/edit/2'));
+ $this->BcAdmin->getView()->setRequest($request);
+ $this->assertFalse($this->BcAdmin->existsAddLink());
+
+ //isAdminSystem = false, return false
+ $this->BcAdmin->getView()->setRequest($this->getRequest('/'));
+ $this->assertFalse($this->BcAdmin->existsAddLink());
+
+ //isAdminSystem = true && type !== ContentFolder, return false
+ $request = $this->loginAdmin($this->getRequest('/service-1'));
+ $request->getSession()->write('AuthAdmin', UserFactory::get(1));
+ $this->BcAdmin->getView()->setRequest($request);
+ $this->assertFalse($this->BcAdmin->existsAddLink());
+
+ //isAdminSystem = true && type == ContentFolder, return true
+ $request = $this->loginAdmin($this->getRequest('/service'));
+ $request->getSession()->write('AuthAdmin', UserFactory::get(1));
+ $this->BcAdmin->getView()->setRequest($request);
+ $this->assertTrue($this->BcAdmin->existsAddLink());
+ }
+
+ /**
+ * test addLink
+ */
+ public function testAddLink()
+ {
+ //データを生成
+ $this->loadFixtureScenario(InitAppScenario::class);
+ ContentFactory::make(['type' => 'ContentFolder', 'url' => '/service'])->persist();
+
+ //isAdminSystem = true, return ''
+ $this->BcAdmin->getView()->setRequest($this->loginAdmin($this->getRequest('/baser/admin/baser-core/pages/edit/2')));
+ ob_start();
+ $this->BcAdmin->addLink();
+ $actualEmpty = ob_get_clean();
+ $this->assertEmpty($actualEmpty);
+
+ //$content == null, return ''
+ $this->BcAdmin->getView()->setRequest($this->getRequest('/service-1'));
+ ob_start();
+ $this->BcAdmin->addLink();
+ $actualEmpty = ob_get_clean();
+ $this->assertEmpty($actualEmpty);
+
+ //$content != null, 固定ページ新規追加画面へのリンクを出力する
+ $this->BcAdmin->getView()->setRequest($this->getRequest('/service'));
+ ob_start();
+ $this->BcAdmin->addLink();
+ $actualEmpty = ob_get_clean();
+ $this->assertTextContains('新規ページ追加', $actualEmpty);
+ }
+
/**
* 編集画面へのリンクを出力する
*
@@ -446,6 +510,27 @@ public function testPublishLink()
$this->assertEquals('', $result);
}
+ /**
+ * test firstAccess
+ */
+ public function testFirstAccess()
+ {
+ //controller == installations, return ''
+ $request = $this->getRequest('/')->withParam('controller', 'installations');
+ $this->BcAdmin->getView()->setRequest($request);
+ ob_start();
+ $this->BcAdmin->firstAccess();
+ $actualEmpty = ob_get_clean();
+ $this->assertEmpty($actualEmpty);
+
+ //controller != installations, 初回アクセス時のメッセージ表示
+ $this->BcAdmin->getView()->setRequest($this->getRequest('/baser/admin/baser-core/pages/edit/2'))->set('firstAccess', true);
+ ob_start();
+ $this->BcAdmin->firstAccess();
+ $actualEmpty = ob_get_clean();
+ $this->assertTextContains('baserCMSへようこそ', $actualEmpty);
+ }
+
/**
* test getTitle
* @return void
diff --git a/plugins/baser-core/tests/TestCase/View/Helper/BcAuthHelperTest.php b/plugins/baser-core/tests/TestCase/View/Helper/BcAuthHelperTest.php
index 701c41ac45..5d5a369f71 100644
--- a/plugins/baser-core/tests/TestCase/View/Helper/BcAuthHelperTest.php
+++ b/plugins/baser-core/tests/TestCase/View/Helper/BcAuthHelperTest.php
@@ -293,6 +293,44 @@ public static function isAdminUserDataProvider()
];
}
+ /**
+ * Test isSuperUser
+ * @dataProvider isSupperUserDataProvider
+ * @param $id
+ * @param $expected
+ * @return void
+ */
+ public function testIsSuperUser($id, $expected)
+ {
+ //データー生成
+ $this->loadFixtureScenario(InitAppScenario::class);
+ UserFactory::make(['id' => 2])->persist();
+ UserFactory::make(['id' => 3])->persist();
+ //特権ユーザを設定
+ Configure::write('BcApp.superUserId', 2);
+
+ if ($id) {
+ $this->loginAdmin($this->getRequest('/baser/admin'), $id);
+ }
+
+ $result = $this->BcAuth->isSuperUser();
+ $this->assertEquals($result, $expected);
+ }
+
+ public static function isSupperUserDataProvider()
+ {
+ return [
+ // ログインしない場合
+ [null, false],
+ // システム管理者の場合
+ [1, false],
+ // 特権ユーザでのログインの場合
+ [2, true],
+ // サイト運営者などそれ以外の場合
+ [3, false],
+ ];
+ }
+
/**
* Test isAgentUser
* @return void
diff --git a/plugins/baser-core/tests/TestCase/View/Helper/BcBaserHelperTest.php b/plugins/baser-core/tests/TestCase/View/Helper/BcBaserHelperTest.php
index 041ffa87af..488484c6d7 100644
--- a/plugins/baser-core/tests/TestCase/View/Helper/BcBaserHelperTest.php
+++ b/plugins/baser-core/tests/TestCase/View/Helper/BcBaserHelperTest.php
@@ -21,7 +21,9 @@
use BaserCore\Test\Scenario\InitAppScenario;
use BaserCore\Utility\BcUtil;
use BaserCore\View\Helper\BcContentsHelper;
+use Cake\Datasource\Paging\PaginatedResultSet;
use Cake\Http\Exception\NotFoundException;
+use Cake\ORM\ResultSet;
use Cake\View\View;
use CakephpFixtureFactories\Scenario\ScenarioAwareTrait;
use BaserCore\Utility\BcFile;
@@ -1087,21 +1089,17 @@ public function testFooter()
*/
public function testPagination()
{
- $this->markTestIncomplete('このテストは、まだ実装されていません。');
-
- $this->expectOutputRegex('/
diff --git a/plugins/bc-admin-third/templates/Admin/element/Users/form.php b/plugins/bc-admin-third/templates/Admin/element/Users/form.php
index 9a2c3ceab0..04eef4d10e 100755
--- a/plugins/bc-admin-third/templates/Admin/element/Users/form.php
+++ b/plugins/bc-admin-third/templates/Admin/element/Users/form.php
@@ -150,6 +150,7 @@ class="col-head bca-form-table__label">BcAdminForm->label('use
+isSuper()): ?>
BcAdminForm->label('status', __d('baser_core', '利用状態')) ?>
@@ -167,6 +168,7 @@ class="col-head bca-form-table__label">BcAdminForm->label('use
|
+
BcAdminForm->dispatchAfterForm() ?>
diff --git a/plugins/bc-admin-third/templates/plugin/BcSearchIndex/Admin/element/SearchIndexes/index_row.php b/plugins/bc-admin-third/templates/plugin/BcSearchIndex/Admin/element/SearchIndexes/index_row.php
index c9edcb3cb1..5cd5905df3 100755
--- a/plugins/bc-admin-third/templates/plugin/BcSearchIndex/Admin/element/SearchIndexes/index_row.php
+++ b/plugins/bc-admin-third/templates/plugin/BcSearchIndex/Admin/element/SearchIndexes/index_row.php
@@ -47,7 +47,9 @@
\BaserCore\Utility\BcUtil::siteUrl() . preg_replace('/^\//', '', $searchIndex->url), ['target' => '_blank', 'escape' => true]
) ?>
- Text->truncate($searchIndex->detail, 50)) ?> |
+
+ Text->truncate($searchIndex->detail?? '', 50)) ?>
+ |
BcText->booleanMark($searchIndex->status); ?>
|
diff --git a/plugins/bc-blog/src/Model/Table/BlogPostsTable.php b/plugins/bc-blog/src/Model/Table/BlogPostsTable.php
index 91b1d4605f..959d727f2e 100755
--- a/plugins/bc-blog/src/Model/Table/BlogPostsTable.php
+++ b/plugins/bc-blog/src/Model/Table/BlogPostsTable.php
@@ -19,6 +19,7 @@
use BaserCore\Model\Entity\Content;
use BaserCore\Model\Table\UsersTable;
use BaserCore\Utility\BcUtil;
+use BcBlog\Model\Entity\BlogPost;
use Cake\Core\Plugin;
use Cake\Database\Driver\Mysql;
use Cake\Database\Driver\Postgres;
@@ -642,13 +643,13 @@ public function createSearchIndex($post)
* コピーする
*
* @param int $id
- * @param array $data
+ * @param BlogPost $data
* @return mixed page Or false
* @checked
* @noTodo
* @unitTest
*/
- public function copy($id = null, $data = [])
+ public function copy($id = null, BlogPost $data = null)
{
if ($id) $data = $this->find()->where(['BlogPosts.id' => $id])->contain('BlogTags')->first();
$oldData = clone $data;
@@ -671,6 +672,8 @@ public function copy($id = null, $data = [])
$data->id = null;
$data->created = null;
$data->modified = null;
+ $data->publish_begin = null;
+ $data->publish_end = null;
// 一旦退避(afterSaveでリネームされてしまうのを避ける為)
$eyeCatch = $data->eye_catch;
$data->eye_catch = null;
diff --git a/plugins/bc-blog/src/View/Helper/BlogHelper.php b/plugins/bc-blog/src/View/Helper/BlogHelper.php
index ba30e0e509..f81a896a1c 100755
--- a/plugins/bc-blog/src/View/Helper/BlogHelper.php
+++ b/plugins/bc-blog/src/View/Helper/BlogHelper.php
@@ -454,9 +454,9 @@ public function postLink($post, $title, $options = [])
public function postContent(
BlogPost $post,
bool $moreText = true,
- bool $moreLink = false,
+ mixed $moreLink = false,
mixed $cut = false,
- bool $lastText = false
+ mixed $lastText = false
)
{
echo $this->getPostContent($post, $moreText, $moreLink, $cut, $lastText);
@@ -482,7 +482,7 @@ public function getPostContent(
bool $moreText = true,
mixed $moreLink = false,
mixed $cut = false,
- bool $lastText = false
+ mixed $lastText = false
)
{
if ($cut) {
diff --git a/plugins/bc-front/src/css/common/_bge.scss b/plugins/bc-front/src/css/common/_bge.scss
index 41af58c655..a94b041402 100755
--- a/plugins/bc-front/src/css/common/_bge.scss
+++ b/plugins/bc-front/src/css/common/_bge.scss
@@ -1,5 +1,8 @@
/**
* BurgerEditor StyleSheet Style
+ *
+ * bc-front テーマ側でコンパイルした際は、bge_style.css を
+ * BcThemeSample テーマ側にコピーする必要がある
*/
.bgt-box__caption {
@@ -240,7 +243,6 @@
&-ctrl {
top: 50%;
- opacity: 0;
transition: opacity 200ms ease-in;
&__prev,
@@ -298,6 +300,9 @@
margin: 0 5px;
width: $thumb-size;
height: $thumb-size;
+ &::before {
+ display: none;
+ }
}
}
}
diff --git a/plugins/bc-front/webroot/css/bge_style.css b/plugins/bc-front/webroot/css/bge_style.css
index 5d2ece29dc..2f0d4cf519 100755
--- a/plugins/bc-front/webroot/css/bge_style.css
+++ b/plugins/bc-front/webroot/css/bge_style.css
@@ -734,6 +734,9 @@
* ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- **/
/**
* BurgerEditor StyleSheet Style
+ *
+ * bc-front テーマ側でコンパイルした際は、bge_style.css を
+ * BcThemeSample テーマ側にコピーする必要がある
*/
.bgt-box__caption {
text-align: left;
@@ -941,7 +944,6 @@
}
[data-bgt=gallery] .bgt-gallery-ctrl {
top: 50%;
- opacity: 0;
transition: opacity 200ms ease-in;
}
[data-bgt=gallery] .bgt-gallery-ctrl__prev, [data-bgt=gallery] .bgt-gallery-ctrl__next {
@@ -989,6 +991,9 @@
width: 60px;
height: 60px;
}
+[data-bgt=gallery] [data-gallery-marker=thumbs] + .bgt-gallery-marker li::before {
+ display: none;
+}
[data-bgt=gallery] [data-gallery-marker=dot] + .bgt-gallery-marker {
margin-top: 10px;
}
@@ -1019,4 +1024,4 @@
display: block;
}
}
-/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNzcy9iZ2Vfc3R5bGUuY3NzIiwiY3NzL2JnZV9zdHlsZS5zY3NzIiwiY3NzL2NvbW1vbi9fZWRpdG9yLnNjc3MiLCJjc3MvY29tbW9uL19iZ2Vfc2V0dGluZy5zY3NzIiwiY3NzL2NvbW1vbi9fYmdlLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCO0FDQ2hCOzs7Ozs7OztFQUFBO0FBVUE7OztFQUFBO0FDWEE7O0VBQUE7QUFNQTtFQUNFLGFBQUE7QUZZRjtBRVRBO2lEQUFBO0FBR0E7OztFQUdFLCtGQUFBO0VBQ0EsV0FBQTtBRldGO0FFVEU7OztFQUNFLGVBQUE7RUFDQSxtQkFBQTtFQUNBLGlCQUFBO0FGYUo7QUVWRTs7O0VBQ0Usd0xBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBQ0EsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxnQkFBQTtBRmNKO0FFYkk7OztFQUNFLGFBQUE7QUZpQk47QUViRTs7O0VBQ0UscUJBQUE7RUFDQSx1QkFBQTtFQUNBLGVBQUE7RUFDQSxnQkFBQTtFQUNBLG1CQUFBO0VBQ0EsbUJBQUE7RUFDQSxtQkFBQTtFQUNBLGdCQUFBO0FGaUJKO0FFZkk7OztFQUNFLGFBQUE7QUZtQk47QUVmRTs7O0VBQ0UsOEJBQUE7RUFDQSxlQUFBO0VBQ0Esb0JBQUE7RUFDQSxpQkFBQTtFQUNBLGVBQUE7RUFDQSxxQkFBQTtFQUNBLGdCQUFBO0VBQ0Esa0JBQUE7QUZtQko7QUVqQkk7OztFQUNFLGFBQUE7QUZxQk47QUVqQkU7OztFQUNFLGdCQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtFQUNBLGFBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0FGcUJKO0FFbkJJOzs7RUFDRSxhQUFBO0FGdUJOO0FFbkJFOzs7RUFDRSxjQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtFQUNBLGFBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxn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LHNCQUFBO0FKZ3NCVjtBSXhyQkEsZ0JBQUE7QUFDQTtFQUNFLGNBQUE7QUoyckJGO0FJenJCRTtFQUhGO0lBSUksYUFBQTtFSjRyQkY7QUFDRjtBSXpyQkE7RUFDRSxhQUFBO0FKNHJCRjtBSTFyQkU7RUFIRjtJQUlJLGNBQUE7RUo2ckJGO0FBQ0YiLCJmaWxlIjoiY3NzL2JnZV9zdHlsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIGJhc2VyQ01TIDogIEJhc2VkIFdlYnNpdGUgRGV2ZWxvcG1lbnQgUHJvamVjdCA8aHR0cHM6Ly9iYXNlcmNtcy5uZXQ+XG4gKiBDb3B5cmlnaHQgKGMpIE5QTyBiYXNlciBmb3VuZGF0aW9uIDxodHRwczovL2Jhc2VyZm91bmRhdGlvbi5vcmcvPlxuICpcbiAqIEBjb3B5cmlnaHQgICAgIENvcHlyaWdodCAoYykgTlBPIGJhc2VyIGZvdW5kYXRpb25cbiAqIEBsaW5rICAgICAgICAgIGh0dHBzOi8vYmFzZXJjbXMubmV0IGJhc2VyQ01TIFByb2plY3RcbiAqIEBzaW5jZSAgICAgICAgIDUuMC4wXG4gKiBAbGljZW5zZSAgICAgICBodHRwczovL2Jhc2VyY21zLm5ldC9saWNlbnNlL2luZGV4Lmh0bWwgTUlUIExpY2Vuc2VcbiAqL1xuLyoqXG4gKiDjg5Djg7zjgqzjg7zjgqjjg4fjgqPjgr/jg7zjgrnjgr/jgqTjg6tcbiAqIOeuoeeQhueUu+mdouOBp+OCguWRvOOBs+WHuuOBleOCjOOCi1xuICovXG4vKipcbiAqIOOCqOODh+OCo+OCv+ODvOeUqENTU1xuICovXG4uY2tlX2VkaXRhYmxlIHtcbiAgcGFkZGluZzogMTVweDtcbn1cblxuLyogRWRpdG9yIFBhcnRzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLmJzLW1haW4tY29udGVudHMsXG4uYmdlLWNvbnRlbnRzLFxuLmNrZV9lZGl0YWJsZSB7XG4gIGZvbnQtZmFtaWx5OiBBcmlhbCwgVmVyZGFuYSwgXCLmuLjjgrTjgrfjg4Pjgq9cIiwgWXVHb3RoaWMsIFwiSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvTlwiLCBNZWlyeW8sIHNhbnMtc2VyaWY7XG4gIGNvbG9yOiAjMDAwO1xufVxuLmJzLW1haW4tY29udGVudHMgaDEsXG4uYmdlLWNvbnRlbnRzIGgxLFxuLmNrZV9lZGl0YWJsZSBoMSB7XG4gIGZvbnQtc2l6ZTogNDBweDtcbiAgbWFyZ2luLWJvdHRvbTogNDBweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4uYnMtbWFpbi1jb250ZW50cyBoMixcbi5iZ2UtY29udGVudHMgaDIsXG4uY2tlX2VkaXRhYmxlIGgyIHtcbiAgZm9udC1mYW1pbHk6IFwiU0YgUHJvIEpQXCIsIFwiU0YgUHJvIFRleHRcIiwgXCJTRiBQcm8gSWNvbnNcIiwgXCJIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm9cIiwgXCLjg5Ljg6njgq7jg47op5LjgrQgUHJvIFczXCIsIFwi44Oh44Kk44Oq44KqXCIsIFwiTWVpcnlvXCIsIFwi77yt77yzIO+8sOOCtOOCt+ODg+OCr1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIFwiSGVsdmV0aWNhXCIsIFwiQXJpYWxcIiwgXCJzYW5zLXNlcmlmXCI7XG4gIGxldHRlci1zcGFjaW5nOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBmb250LXNpemU6IDIuMmVtO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgbWFyZ2luOiAwLjZlbSAwO1xuICBwYWRkaW5nOiAwLjNlbSAwO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBiYWNrZ3JvdW5kOiBub25lO1xufVxuLmJzLW1haW4tY29udGVudHMgaDI6Zmlyc3QtY2hpbGQsXG4uYmdlLWNvbnRlbnRzIGgyOmZpcnN0LWNoaWxkLFxuLmNrZV9lZGl0YWJsZSBoMjpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4uYnMtbWFpbi1jb250ZW50cyBoMyxcbi5iZ2UtY29udGVudHMgaDMsXG4uY2tlX2VkaXRhYmxlIGgzIHtcbiAgbWFyZ2luOiA1NnB4IDAgMjBweCAwO1xuICBwYWRkaW5nOiAxM3B4IDI4cHggMTJweDtcbiAgZm9udC1zaXplOiAyMXB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICBsaW5lLWhlaWdodDogNDguM3B4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmJzLW1haW4tY29udGVudHMgaDM6Zmlyc3QtY2hpbGQsXG4uYmdlLWNvbnRlbnRzIGgzOmZpcnN0LWNoaWxkLFxuLmNrZV9lZGl0YWJsZSBoMzpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4uYnMtbWFpbi1jb250ZW50cyBoNCxcbi5iZ2UtY29udGVudHMgaDQsXG4uY2tlX2VkaXRhYmxlIGg0IHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4ICNDQ0MgZG90dGVkO1xuICBmb250LXNpemU6IDIycHg7XG4gIHBhZGRpbmctYm90dG9tOiAxMnB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBtYXJnaW46IDUwcHggMCAxN3B4IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGg0OmZpcnN0LWNoaWxkLFxuLmJnZS1jb250ZW50cyBoNDpmaXJzdC1jaGlsZCxcbi5ja2VfZWRpdGFibGUgaDQ6Zmlyc3QtY2hpbGQge1xuICBtYXJnaW4tdG9wOiAwO1xufVxuLmJzLW1haW4tY29udGVudHMgaDUsXG4uYmdlLWNvbnRlbnRzIGg1LFxuLmNrZV9lZGl0YWJsZSBoNSB7XG4gIGZvbnQtc2l6ZTogMS4yZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBsaW5lLWhlaWdodDogMS4yO1xuICBtYXJnaW46IDFlbSAwO1xuICBwYWRkaW5nOiAwLjNlbSAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmJzLW1haW4tY29udGVudHMgaDU6Zmlyc3QtY2hpbGQsXG4uYmdlLWNvbnRlbnRzIGg1OmZpcnN0LWNoaWxkLFxuLmNrZV9lZGl0YWJsZSBoNTpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4uYnMtbWFpbi1jb250ZW50cyBoNixcbi5iZ2UtY29udGVudHMgaDYsXG4uY2tlX2VkaXRhYmxlIGg2IHtcbiAgZm9udC1zaXplOiAxZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBsaW5lLWhlaWdodDogMS4yO1xuICBtYXJnaW46IDFlbSAwO1xuICBib3JkZXI6IG5vbmU7XG4gIHBhZGRpbmc6IDAuM2VtIDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uYnMtbWFpbi1jb250ZW50cyBoNjpmaXJzdC1jaGlsZCxcbi5iZ2UtY29udGVudHMgaDY6Zmlyc3QtY2hpbGQsXG4uY2tlX2VkaXRhYmxlIGg2OmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHN0cm9uZyxcbi5iZ2UtY29udGVudHMgc3Ryb25nLFxuLmNrZV9lZGl0YWJsZSBzdHJvbmcge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4uYnMtbWFpbi1jb250ZW50cyB1LFxuLmJnZS1jb250ZW50cyB1LFxuLmNrZV9lZGl0YWJsZSB1IHtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHMsXG4uYmdlLWNvbnRlbnRzIHMsXG4uY2tlX2VkaXRhYmxlIHMge1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO1xufVxuLmJzLW1haW4tY29udGVudHMgZW0sXG4uYmdlLWNvbnRlbnRzIGVtLFxuLmNrZV9lZGl0YWJsZSBlbSB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cbi5icy1tYWluLWNvbnRlbnRzIGhyLFxuLmJnZS1jb250ZW50cyBocixcbi5ja2VfZWRpdGFibGUgaHIge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxcHg7XG4gIGNvbG9yOiAjZGRkO1xuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgbWFyZ2luOiA1MHB4IGF1dG87XG59XG4uYnMtbWFpbi1jb250ZW50cyBocjpmaXJzdC1jaGlsZCxcbi5iZ2UtY29udGVudHMgaHI6Zmlyc3QtY2hpbGQsXG4uY2tlX2VkaXRhYmxlIGhyOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHVsLFxuLmJnZS1jb250ZW50cyB1bCxcbi5ja2VfZWRpdGFibGUgdWwge1xuICBtYXJnaW46IDIwcHggMCAzNnB4IDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjY7XG4gIGxldHRlci1zcGFjaW5nOiAwLjA1cmVtO1xufVxuLmJzLW1haW4tY29udGVudHMgdWw6Zmlyc3QtY2hpbGQsXG4uYmdlLWNvbnRlbnRzIHVsOmZpcnN0LWNoaWxkLFxuLmNrZV9lZGl0YWJsZSB1bDpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4uYnMtbWFpbi1jb250ZW50cyB1bCBsaSxcbi5iZ2UtY29udGVudHMgdWwgbGksXG4uY2tlX2VkaXRhYmxlIHVsIGxpIHtcbiAgbGlzdC1zdHlsZS1wb3NpdGlvbjogaW5zaWRlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6IDAgMCAwIDI1cHg7XG4gIG1hcmdpbjogMC41ZW0gMCAwLjVlbSAwO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG59XG4uYnMtbWFpbi1jb250ZW50cyB1bCBsaSBhLFxuLmJnZS1jb250ZW50cyB1bCBsaSBhLFxuLmNrZV9lZGl0YWJsZSB1bCBsaSBhIHtcbiAgem9vbTogMTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHVsIGxpOmJlZm9yZSxcbi5iZ2UtY29udGVudHMgdWwgbGk6YmVmb3JlLFxuLmNrZV9lZGl0YWJsZSB1bCBsaTpiZWZvcmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDlweDtcbiAgbGVmdDogMXB4O1xuICB3aWR0aDogNnB4O1xuICBoZWlnaHQ6IDZweDtcbiAgYmFja2dyb3VuZDogIzE4MTgxODtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xufVxuLmJzLW1haW4tY29udGVudHMgdWwgdWwsXG4uYmdlLWNvbnRlbnRzIHVsIHVsLFxuLmNrZV9lZGl0YWJsZSB1bCB1bCB7XG4gIG1hcmdpbjogMCAwIDAgMS44ZW07XG59XG4uYnMtbWFpbi1jb250ZW50cyB1bCB1bDpmaXJzdC1jaGlsZCxcbi5iZ2UtY29udGVudHMgdWwgdWw6Zmlyc3QtY2hpbGQsXG4uY2tlX2VkaXRhYmxlIHVsIHVsOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5icy1tYWluLWNvbnRlbnRzIG9sLFxuLmJnZS1jb250ZW50cyBvbCxcbi5ja2VfZWRpdGFibGUgb2wge1xuICBtYXJnaW46IDIwcHggMCAzNnB4IDEuOGVtO1xuICBsaW5lLWhlaWdodDogMS42O1xuICBsZXR0ZXItc3BhY2luZzogMC4wNXJlbTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIG9sIG9sLFxuLmJnZS1jb250ZW50cyBvbCBvbCxcbi5ja2VfZWRpdGFibGUgb2wgb2wge1xuICBtYXJnaW46IDIwcHg7XG59XG4uYnMtbWFpbi1jb250ZW50cyBvbCBsaSxcbi5iZ2UtY29udGVudHMgb2wgbGksXG4uY2tlX2VkaXRhYmxlIG9sIGxpIHtcbiAgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsLWxlYWRpbmctemVybztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAwIDAgMCAwO1xuICBtYXJnaW46IDAuNWVtIDAgMC41ZW0gMDtcbiAgbGluZS1oZWlnaHQ6IDEuNjtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHAsXG4uYmdlLWNvbnRlbnRzIHAsXG4uY2tlX2VkaXRhYmxlIHAge1xuICBtYXJnaW46IDFlbSAwO1xuICBsZXR0ZXItc3BhY2luZzogMC4wNXJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgbGluZS1oZWlnaHQ6IDIuMztcbn1cbi5icy1tYWluLWNvbnRlbnRzIHRhYmxlLFxuLmJnZS1jb250ZW50cyB0YWJsZSxcbi5ja2VfZWRpdGFibGUgdGFibGUge1xuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICBib3JkZXItc3BhY2luZzogMDtcbiAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2UxZTFlMTtcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2UxZTFlMTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlMWUxZTE7XG4gIG1hcmdpbjogMjBweCAwIDIwcHggMDtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIC5icy1tYWluLWNvbnRlbnRzIHRhYmxlLFxuICAuYmdlLWNvbnRlbnRzIHRhYmxlLFxuICAuY2tlX2VkaXRhYmxlIHRhYmxlIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuLmJzLW1haW4tY29udGVudHMgdGFibGU6Zmlyc3QtY2hpbGQsXG4uYmdlLWNvbnRlbnRzIHRhYmxlOmZpcnN0LWNoaWxkLFxuLmNrZV9lZGl0YWJsZSB0YWJsZTpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4uYnMtbWFpbi1jb250ZW50cyB0YWJsZSBjYXB0aW9uLFxuLmJnZS1jb250ZW50cyB0YWJsZSBjYXB0aW9uLFxuLmNrZV9lZGl0YWJsZSB0YWJsZSBjYXB0aW9uIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkge1xuICAuYnMtbWFpbi1jb250ZW50cyB0YWJsZSBjYXB0aW9uLFxuICAuYmdlLWNvbnRlbnRzIHRhYmxlIGNhcHRpb24sXG4gIC5ja2VfZWRpdGFibGUgdGFibGUgY2FwdGlvbiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIC5icy1tYWluLWNvbnRlbnRzIHRhYmxlIHRib2R5LFxuICAuYnMtbWFpbi1jb250ZW50cyB0YWJsZSB0Zm9vdCxcbiAgLmJnZS1jb250ZW50cyB0YWJsZSB0Ym9keSxcbiAgLmJnZS1jb250ZW50cyB0YWJsZSB0Zm9vdCxcbiAgLmNrZV9lZGl0YWJsZSB0YWJsZSB0Ym9keSxcbiAgLmNrZV9lZGl0YWJsZSB0YWJsZSB0Zm9vdCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cbi5icy1tYWluLWNvbnRlbnRzIHRhYmxlIHRyLFxuLmJnZS1jb250ZW50cyB0YWJsZSB0cixcbi5ja2VfZWRpdGFibGUgdGFibGUgdHIge1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2UxZTFlMTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIC5icy1tYWluLWNvbnRlbnRzIHRhYmxlIHRyLFxuICAuYmdlLWNvbnRlbnRzIHRhYmxlIHRyLFxuICAuY2tlX2VkaXRhYmxlIHRhYmxlIHRyIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tdG9wOiAtMXB4O1xuICB9XG59XG4uYnMtbWFpbi1jb250ZW50cyB0YWJsZSB0cjpudGgtY2hpbGQob2RkKSB0ZCxcbi5iZ2UtY29udGVudHMgdGFibGUgdHI6bnRoLWNoaWxkKG9kZCkgdGQsXG4uY2tlX2VkaXRhYmxlIHRhYmxlIHRyOm50aC1jaGlsZChvZGQpIHRkIHtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHRhYmxlIHRyIHRoLFxuLmJzLW1haW4tY29udGVudHMgdGFibGUgdHIgdGQsXG4uYmdlLWNvbnRlbnRzIHRhYmxlIHRyIHRoLFxuLmJnZS1jb250ZW50cyB0YWJsZSB0ciB0ZCxcbi5ja2VfZWRpdGFibGUgdGFibGUgdHIgdGgsXG4uY2tlX2VkaXRhYmxlIHRhYmxlIHRyIHRkIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgcGFkZGluZzogMjZweCAyNHB4O1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNlMWUxZTE7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkge1xuICAuYnMtbWFpbi1jb250ZW50cyB0YWJsZSB0ciB0aCxcbiAgLmJzLW1haW4tY29udGVudHMgdGFibGUgdHIgdGQsXG4gIC5iZ2UtY29udGVudHMgdGFibGUgdHIgdGgsXG4gIC5iZ2UtY29udGVudHMgdGFibGUgdHIgdGQsXG4gIC5ja2VfZWRpdGFibGUgdGFibGUgdHIgdGgsXG4gIC5ja2VfZWRpdGFibGUgdGFibGUgdHIgdGQge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG4uYnMtbWFpbi1jb250ZW50cyB0YWJsZSB0ciB0aCxcbi5iZ2UtY29udGVudHMgdGFibGUgdHIgdGgsXG4uY2tlX2VkaXRhYmxlIHRhYmxlIHRyIHRoIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGZvbnQtZmFtaWx5OiBcIlNGIFBybyBKUFwiLCBcIlNGIFBybyBUZXh0XCIsIFwiU0YgUHJvIEljb25zXCIsIFwiSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvXCIsIFwi44OS44Op44Ku44OO6KeS44K0IFBybyBXM1wiLCBcIuODoeOCpOODquOCqlwiLCBcIk1laXJ5b1wiLCBcIu+8re+8syDvvLDjgrTjgrfjg4Pjgq9cIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBcIkhlbHZldGljYVwiLCBcIkFyaWFsXCIsIFwic2Fucy1zZXJpZlwiO1xuICBiYWNrZ3JvdW5kOiAjZjNmM2YzO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLmJzLW1haW4tY29udGVudHMgdGFibGUgdHIgdGgsXG4gIC5iZ2UtY29udGVudHMgdGFibGUgdHIgdGgsXG4gIC5ja2VfZWRpdGFibGUgdGFibGUgdHIgdGgge1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gIH1cbn1cbi5icy1tYWluLWNvbnRlbnRzIHRhYmxlIHRyIHRkLFxuLmJnZS1jb250ZW50cyB0YWJsZSB0ciB0ZCxcbi5ja2VfZWRpdGFibGUgdGFibGUgdHIgdGQge1xuICBmb250LXdlaWdodDogbm9ybWFsO1xufVxuLmJzLW1haW4tY29udGVudHMgdGFibGUgdHIgdGQgdWwsXG4uYmdlLWNvbnRlbnRzIHRhYmxlIHRyIHRkIHVsLFxuLmNrZV9lZGl0YWJsZSB0YWJsZSB0ciB0ZCB1bCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGZpZWxkc2V0LFxuLmJnZS1jb250ZW50cyBmaWVsZHNldCxcbi5ja2VfZWRpdGFibGUgZmllbGRzZXQge1xuICBib3JkZXI6IDA7XG59XG4uYnMtbWFpbi1jb250ZW50cyBpbWcsXG4uYmdlLWNvbnRlbnRzIGltZyxcbi5ja2VfZWRpdGFibGUgaW1nIHtcbiAgYm9yZGVyOiAwO1xuICBtYXJnaW46IGF1dG87XG59XG4uYnMtbWFpbi1jb250ZW50cyBhZGRyZXNzLCAuYnMtbWFpbi1jb250ZW50cyBidXR0b24sIC5icy1tYWluLWNvbnRlbnRzIGNhcHRpb24sIC5icy1tYWluLWNvbnRlbnRzIGNpdGUsIC5icy1tYWluLWNvbnRlbnRzIGNvZGUsIC5icy1tYWluLWNvbnRlbnRzIGRmbiwgLmJzLW1haW4tY29udGVudHMgZW0sIC5icy1tYWluLWNvbnRlbnRzIGlucHV0LCAuYnMtbWFpbi1jb250ZW50cyBvcHRncm91cCwgLmJzLW1haW4tY29udGVudHMgb3B0aW9uLCAuYnMtbWFpbi1jb250ZW50cyBzZWxlY3QsIC5icy1tYWluLWNvbnRlbnRzIHN0cm9uZywgLmJzLW1haW4tY29udGVudHMgdGV4dGFyZWEsIC5icy1tYWluLWNvbnRlbnRzIHRoLCAuYnMtbWFpbi1jb250ZW50cyB2YXIsXG4uYmdlLWNvbnRlbnRzIGFkZHJlc3MsXG4uYmdlLWNvbnRlbnRzIGJ1dHRvbixcbi5iZ2UtY29udGVudHMgY2FwdGlvbixcbi5iZ2UtY29udGVudHMgY2l0ZSxcbi5iZ2UtY29udGVudHMgY29kZSxcbi5iZ2UtY29udGVudHMgZGZuLFxuLmJnZS1jb250ZW50cyBlbSxcbi5iZ2UtY29udGVudHMgaW5wdXQsXG4uYmdlLWNvbnRlbnRzIG9wdGdyb3VwLFxuLmJnZS1jb250ZW50cyBvcHRpb24sXG4uYmdlLWNvbnRlbnRzIHNlbGVjdCxcbi5iZ2UtY29udGVudHMgc3Ryb25nLFxuLmJnZS1jb250ZW50cyB0ZXh0YXJlYSxcbi5iZ2UtY29udGVudHMgdGgsXG4uYmdlLWNvbnRlbnRzIHZhcixcbi5ja2VfZWRpdGFibGUgYWRkcmVzcyxcbi5ja2VfZWRpdGFibGUgYnV0dG9uLFxuLmNrZV9lZGl0YWJsZSBjYXB0aW9uLFxuLmNrZV9lZGl0YWJsZSBjaXRlLFxuLmNrZV9lZGl0YWJsZSBjb2RlLFxuLmNrZV9lZGl0YWJsZSBkZm4sXG4uY2tlX2VkaXRhYmxlIGVtLFxuLmNrZV9lZGl0YWJsZSBpbnB1dCxcbi5ja2VfZWRpdGFibGUgb3B0Z3JvdXAsXG4uY2tlX2VkaXRhYmxlIG9wdGlvbixcbi5ja2VfZWRpdGFibGUgc2VsZWN0LFxuLmNrZV9lZGl0YWJsZSBzdHJvbmcsXG4uY2tlX2VkaXRhYmxlIHRleHRhcmVhLFxuLmNrZV9lZGl0YWJsZSB0aCxcbi5ja2VfZWRpdGFibGUgdmFyIHtcbiAgZm9udDogaW5oZXJpdDtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHNtYWxsLFxuLmJnZS1jb250ZW50cyBzbWFsbCxcbi5ja2VfZWRpdGFibGUgc21hbGwge1xuICBjb2xvcjogIzY2Njtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGRlbCwgLmJzLW1haW4tY29udGVudHMgaW5zLFxuLmJnZS1jb250ZW50cyBkZWwsXG4uYmdlLWNvbnRlbnRzIGlucyxcbi5ja2VfZWRpdGFibGUgZGVsLFxuLmNrZV9lZGl0YWJsZSBpbnMge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4uYnMtbWFpbi1jb250ZW50cyBhOmxpbmssIC5icy1tYWluLWNvbnRlbnRzIGE6dmlzaXRlZCxcbi5iZ2UtY29udGVudHMgYTpsaW5rLFxuLmJnZS1jb250ZW50cyBhOnZpc2l0ZWQsXG4uY2tlX2VkaXRhYmxlIGE6bGluayxcbi5ja2VfZWRpdGFibGUgYTp2aXNpdGVkIHtcbiAgY29sb3I6ICMyYjdiYjk7XG59XG4uYnMtbWFpbi1jb250ZW50cyBhOmhvdmVyLFxuLmJnZS1jb250ZW50cyBhOmhvdmVyLFxuLmNrZV9lZGl0YWJsZSBhOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLmJzLW1haW4tY29udGVudHMgY2FwdGlvbiwgLmJzLW1haW4tY29udGVudHMgdGgsXG4uYmdlLWNvbnRlbnRzIGNhcHRpb24sXG4uYmdlLWNvbnRlbnRzIHRoLFxuLmNrZV9lZGl0YWJsZSBjYXB0aW9uLFxuLmNrZV9lZGl0YWJsZSB0aCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4uYnMtbWFpbi1jb250ZW50cyBxOmJlZm9yZSwgLmJzLW1haW4tY29udGVudHMgcTphZnRlcixcbi5iZ2UtY29udGVudHMgcTpiZWZvcmUsXG4uYmdlLWNvbnRlbnRzIHE6YWZ0ZXIsXG4uY2tlX2VkaXRhYmxlIHE6YmVmb3JlLFxuLmNrZV9lZGl0YWJsZSBxOmFmdGVyIHtcbiAgY29udGVudDogXCJcIjtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGFiYnIsIC5icy1tYWluLWNvbnRlbnRzIGFjcm9ueW0sXG4uYmdlLWNvbnRlbnRzIGFiYnIsXG4uYmdlLWNvbnRlbnRzIGFjcm9ueW0sXG4uY2tlX2VkaXRhYmxlIGFiYnIsXG4uY2tlX2VkaXRhYmxlIGFjcm9ueW0ge1xuICBib3JkZXI6IDA7XG4gIGZvbnQtdmFyaWFudDogbm9ybWFsO1xufVxuLmJzLW1haW4tY29udGVudHMgc3ViLFxuLmJnZS1jb250ZW50cyBzdWIsXG4uY2tlX2VkaXRhYmxlIHN1YiB7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB2ZXJ0aWNhbC1hbGlnbjogc3ViO1xufVxuLmJzLW1haW4tY29udGVudHMgc3VwLFxuLmJnZS1jb250ZW50cyBzdXAsXG4uY2tlX2VkaXRhYmxlIHN1cCB7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB2ZXJ0aWNhbC1hbGlnbjogc3VwZXI7XG59XG4uYnMtbWFpbi1jb250ZW50cyBsZWdlbmQsXG4uYmdlLWNvbnRlbnRzIGxlZ2VuZCxcbi5ja2VfZWRpdGFibGUgbGVnZW5kIHtcbiAgY29sb3I6ICMwMDA7XG59XG4uYnMtbWFpbi1jb250ZW50cyBwcmUsXG4uYmdlLWNvbnRlbnRzIHByZSxcbi5ja2VfZWRpdGFibGUgcHJlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0YzRjNGMztcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgcGFkZGluZzogMTBweCAyMHB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBvdmVyZmxvdzogYXV0bztcbiAgYm9yZGVyOiAxcHggc29saWQgI0UyRTJFMjtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGJsb2NrcXVvdGUsXG4uYmdlLWNvbnRlbnRzIGJsb2NrcXVvdGUsXG4uY2tlX2VkaXRhYmxlIGJsb2NrcXVvdGUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbjogMWVtIDA7XG4gIHBhZGRpbmc6IDFweCAyLjVlbTtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBib3JkZXI6IDJweCBzb2xpZCAjY2NjO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjb2xvcjogIzg4ODtcbiAgZm9udC1zaXplOiAwLjllbTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGJsb2NrcXVvdGU6Zmlyc3QtY2hpbGQsXG4uYmdlLWNvbnRlbnRzIGJsb2NrcXVvdGU6Zmlyc3QtY2hpbGQsXG4uY2tlX2VkaXRhYmxlIGJsb2NrcXVvdGU6Zmlyc3QtY2hpbGQge1xuICBtYXJnaW4tdG9wOiAwO1xufVxuLmJzLW1haW4tY29udGVudHMgYmxvY2txdW90ZTo6YmVmb3JlLFxuLmJnZS1jb250ZW50cyBibG9ja3F1b3RlOjpiZWZvcmUsXG4uY2tlX2VkaXRhYmxlIGJsb2NrcXVvdGU6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi4oCcXCI7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LWZhbWlseTogc2VyaWY7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwLjNlbTtcbiAgbGVmdDogMC4yNWVtO1xuICB6LWluZGV4OiAwO1xuICBjb2xvcjogI2NjYztcbiAgZm9udC1zaXplOiAzZW07XG59XG4uYnMtbWFpbi1jb250ZW50cyBibG9ja3F1b3RlOjphZnRlcixcbi5iZ2UtY29udGVudHMgYmxvY2txdW90ZTo6YWZ0ZXIsXG4uY2tlX2VkaXRhYmxlIGJsb2NrcXVvdGU6OmFmdGVyIHtcbiAgY29udGVudDogXCLigJ1cIjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtZmFtaWx5OiBzZXJpZjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IC0wLjNlbTtcbiAgcmlnaHQ6IDAuMjVlbTtcbiAgei1pbmRleDogMDtcbiAgY29sb3I6ICNjY2M7XG4gIGZvbnQtc2l6ZTogM2VtO1xufVxuXG4vKiBGb3JtIFBhcnRzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLmJzLW1haW4tY29udGVudHMgZm9ybSxcbi5iZ2UtY29udGVudHMgZm9ybSxcbi5ja2VfZWRpdGFibGUgZm9ybSxcbi5icy1zdWItY29udGVudHMgZm9ybSB7XG4gIGRpc3BsYXk6IGlubGluZTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGlucHV0LCAuYnMtbWFpbi1jb250ZW50cyB0ZXh0YXJlYSwgLmJzLW1haW4tY29udGVudHMgc2VsZWN0LCAuYnMtbWFpbi1jb250ZW50cyBvcHRpb24sXG4uYmdlLWNvbnRlbnRzIGlucHV0LFxuLmJnZS1jb250ZW50cyB0ZXh0YXJlYSxcbi5iZ2UtY29udGVudHMgc2VsZWN0LFxuLmJnZS1jb250ZW50cyBvcHRpb24sXG4uY2tlX2VkaXRhYmxlIGlucHV0LFxuLmNrZV9lZGl0YWJsZSB0ZXh0YXJlYSxcbi5ja2VfZWRpdGFibGUgc2VsZWN0LFxuLmNrZV9lZGl0YWJsZSBvcHRpb24sXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0LFxuLmJzLXN1Yi1jb250ZW50cyB0ZXh0YXJlYSxcbi5icy1zdWItY29udGVudHMgc2VsZWN0LFxuLmJzLXN1Yi1jb250ZW50cyBvcHRpb24ge1xuICBmb250LWZhbWlseTogXCJTRiBQcm8gSlBcIiwgXCJTRiBQcm8gVGV4dFwiLCBcIlNGIFBybyBJY29uc1wiLCBcIkhpcmFnaW5vIEtha3UgR290aGljIFByb1wiLCBcIuODkuODqeOCruODjuinkuOCtCBQcm8gVzNcIiwgXCLjg6HjgqTjg6rjgqpcIiwgXCJNZWlyeW9cIiwgXCLvvK3vvLMg77yw44K044K344OD44KvXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgXCJIZWx2ZXRpY2FcIiwgXCJBcmlhbFwiLCBcInNhbnMtc2VyaWZcIjtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdLFxuLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT10ZXh0XSxcbi5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9ZW1haWxdLFxuLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT10ZWxdLFxuLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT1udW1iZXJdLFxuLmJzLW1haW4tY29udGVudHMgdGV4dGFyZWEsXG4uYnMtbWFpbi1jb250ZW50cyBzZWxlY3QsXG4uYmdlLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPXRleHRdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPWVtYWlsXSxcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT10ZWxdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPW51bWJlcl0sXG4uYmdlLWNvbnRlbnRzIHRleHRhcmVhLFxuLmJnZS1jb250ZW50cyBzZWxlY3QsXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9cGFzc3dvcmRdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPXRleHRdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPWVtYWlsXSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT10ZWxdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPW51bWJlcl0sXG4uY2tlX2VkaXRhYmxlIHRleHRhcmVhLFxuLmNrZV9lZGl0YWJsZSBzZWxlY3QsXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPXRleHRdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPWVtYWlsXSxcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT10ZWxdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPW51bWJlcl0sXG4uYnMtc3ViLWNvbnRlbnRzIHRleHRhcmVhLFxuLmJzLXN1Yi1jb250ZW50cyBzZWxlY3Qge1xuICBtYXJnaW46IDNweCAycHg7XG4gIHBhZGRpbmc6IDhweCAxMHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDtcbiAgLW1vei1ib3JkZXItcmFkaXVzOiAzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9Y2hlY2tib3hdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPWNoZWNrYm94XSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT1jaGVja2JveF0sXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0W3R5cGU9Y2hlY2tib3hdIHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9cmFkaW9dLCAuYnMtbWFpbi1jb250ZW50cyBpbnB1dFt0eXBlPWNoZWNrYm94XSxcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT1yYWRpb10sXG4uYmdlLWNvbnRlbnRzIGlucHV0W3R5cGU9Y2hlY2tib3hdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPXJhZGlvXSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT1jaGVja2JveF0sXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0W3R5cGU9cmFkaW9dLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPWNoZWNrYm94XSB7XG4gIG1hcmdpbi1sZWZ0OiA1cHg7XG4gIG1hcmdpbi1yaWdodDogNXB4O1xufVxuLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT1zdWJtaXRdLCAuYnMtbWFpbi1jb250ZW50cyBpbnB1dFt0eXBlPXJlc2V0XSwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT1idXR0b25dLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPXN1Ym1pdF0sXG4uYmdlLWNvbnRlbnRzIGlucHV0W3R5cGU9cmVzZXRdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPWJ1dHRvbl0sXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9c3VibWl0XSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT1yZXNldF0sXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9YnV0dG9uXSxcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT1zdWJtaXRdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPXJlc2V0XSxcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT1idXR0b25dIHtcbiAgbWFyZ2luOiAzcHggMnB4O1xuICBmb250LWZhbWlseTogXCJTRiBQcm8gSlBcIiwgXCJTRiBQcm8gVGV4dFwiLCBcIlNGIFBybyBJY29uc1wiLCBcIkhpcmFnaW5vIEtha3UgR290aGljIFByb1wiLCBcIuODkuODqeOCruODjuinkuOCtCBQcm8gVzNcIiwgXCLjg6HjgqTjg6rjgqpcIiwgXCJNZWlyeW9cIiwgXCLvvK3vvLMg77yw44K044K344OD44KvXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgXCJIZWx2ZXRpY2FcIiwgXCJBcmlhbFwiLCBcInNhbnMtc2VyaWZcIjtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdLCAuYnMtbWFpbi1jb250ZW50cyBpbnB1dFt0eXBlPXRleHRdLCAuYnMtbWFpbi1jb250ZW50cyBpbnB1dFt0eXBlPWVtYWlsXSwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT10ZWxdLCAuYnMtbWFpbi1jb250ZW50cyBpbnB1dFt0eXBlPW51bWJlcl0sXG4uYmdlLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPXRleHRdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPWVtYWlsXSxcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT10ZWxdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPW51bWJlcl0sXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9cGFzc3dvcmRdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPXRleHRdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPWVtYWlsXSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT10ZWxdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPW51bWJlcl0sXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPXRleHRdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPWVtYWlsXSxcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT10ZWxdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPW51bWJlcl0ge1xuICBmb250LXNpemU6IDFlbTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdOjpwbGFjZWhvbGRlciwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT10ZXh0XTo6cGxhY2Vob2xkZXIsIC5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9ZW1haWxdOjpwbGFjZWhvbGRlciwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT10ZWxdOjpwbGFjZWhvbGRlciwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT1udW1iZXJdOjpwbGFjZWhvbGRlcixcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT1wYXNzd29yZF06OnBsYWNlaG9sZGVyLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPXRleHRdOjpwbGFjZWhvbGRlcixcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT1lbWFpbF06OnBsYWNlaG9sZGVyLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPXRlbF06OnBsYWNlaG9sZGVyLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPW51bWJlcl06OnBsYWNlaG9sZGVyLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPXBhc3N3b3JkXTo6cGxhY2Vob2xkZXIsXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9dGV4dF06OnBsYWNlaG9sZGVyLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPWVtYWlsXTo6cGxhY2Vob2xkZXIsXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9dGVsXTo6cGxhY2Vob2xkZXIsXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9bnVtYmVyXTo6cGxhY2Vob2xkZXIsXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdOjpwbGFjZWhvbGRlcixcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT10ZXh0XTo6cGxhY2Vob2xkZXIsXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0W3R5cGU9ZW1haWxdOjpwbGFjZWhvbGRlcixcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT10ZWxdOjpwbGFjZWhvbGRlcixcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT1udW1iZXJdOjpwbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjY2NjO1xufVxuLmJzLW1haW4tY29udGVudHMgaW5wdXQ6YWN0aXZlLCAuYnMtbWFpbi1jb250ZW50cyBpbnB1dDpmb2N1cyxcbi5iZ2UtY29udGVudHMgaW5wdXQ6YWN0aXZlLFxuLmJnZS1jb250ZW50cyBpbnB1dDpmb2N1cyxcbi5ja2VfZWRpdGFibGUgaW5wdXQ6YWN0aXZlLFxuLmNrZV9lZGl0YWJsZSBpbnB1dDpmb2N1cyxcbi5icy1zdWItY29udGVudHMgaW5wdXQ6YWN0aXZlLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dDpmb2N1cyB7XG4gIGJveC1zaGFkb3c6IDAgMCA1cHggMXB4ICNmYTk2OTY7XG4gIG91dGxpbmU6IG5vbmU7XG59XG4uYnMtbWFpbi1jb250ZW50cyB0ZXh0YXJlYSxcbi5iZ2UtY29udGVudHMgdGV4dGFyZWEsXG4uY2tlX2VkaXRhYmxlIHRleHRhcmVhLFxuLmJzLXN1Yi1jb250ZW50cyB0ZXh0YXJlYSB7XG4gIHdpZHRoOiA5NSU7XG4gIGZvbnQtc2l6ZTogMWVtO1xuICBwYWRkaW5nOiAzcHggM3B4O1xufVxuLmJzLW1haW4tY29udGVudHMgdGV4dGFyZWE6YWN0aXZlLCAuYnMtbWFpbi1jb250ZW50cyB0ZXh0YXJlYTpmb2N1cyxcbi5iZ2UtY29udGVudHMgdGV4dGFyZWE6YWN0aXZlLFxuLmJnZS1jb250ZW50cyB0ZXh0YXJlYTpmb2N1cyxcbi5ja2VfZWRpdGFibGUgdGV4dGFyZWE6YWN0aXZlLFxuLmNrZV9lZGl0YWJsZSB0ZXh0YXJlYTpmb2N1cyxcbi5icy1zdWItY29udGVudHMgdGV4dGFyZWE6YWN0aXZlLFxuLmJzLXN1Yi1jb250ZW50cyB0ZXh0YXJlYTpmb2N1cyB7XG4gIGJveC1zaGFkb3c6IDAgMCA1cHggMXB4ICNmYTk2OTY7XG4gIG91dGxpbmU6IG5vbmU7XG59XG4uYnMtbWFpbi1jb250ZW50cyBpbnB1dFt0eXBlPXBhc3N3b3JkXSwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT10ZXh0XSwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT1lbWFpbF0sIC5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9dGVsXSwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT1udW1iZXJdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPXBhc3N3b3JkXSxcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT10ZXh0XSxcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT1lbWFpbF0sXG4uYmdlLWNvbnRlbnRzIGlucHV0W3R5cGU9dGVsXSxcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT1udW1iZXJdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPXBhc3N3b3JkXSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT10ZXh0XSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT1lbWFpbF0sXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9dGVsXSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT1udW1iZXJdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPXBhc3N3b3JkXSxcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT10ZXh0XSxcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT1lbWFpbF0sXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0W3R5cGU9dGVsXSxcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT1udW1iZXJdIHtcbiAgbGluZS1oZWlnaHQ6IDFlbTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHNlbGVjdCxcbi5iZ2UtY29udGVudHMgc2VsZWN0LFxuLmNrZV9lZGl0YWJsZSBzZWxlY3QsXG4uYnMtc3ViLWNvbnRlbnRzIHNlbGVjdCB7XG4gIGZvbnQtc2l6ZTogMWVtO1xuICBoZWlnaHQ6IDIuNmVtO1xuICBwYWRkaW5nOiAxMHB4IDhweDtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHNlbGVjdDphY3RpdmUsIC5icy1tYWluLWNvbnRlbnRzIHNlbGVjdDpmb2N1cyxcbi5iZ2UtY29udGVudHMgc2VsZWN0OmFjdGl2ZSxcbi5iZ2UtY29udGVudHMgc2VsZWN0OmZvY3VzLFxuLmNrZV9lZGl0YWJsZSBzZWxlY3Q6YWN0aXZlLFxuLmNrZV9lZGl0YWJsZSBzZWxlY3Q6Zm9jdXMsXG4uYnMtc3ViLWNvbnRlbnRzIHNlbGVjdDphY3RpdmUsXG4uYnMtc3ViLWNvbnRlbnRzIHNlbGVjdDpmb2N1cyB7XG4gIGJveC1zaGFkb3c6IDAgMCA1cHggMXB4ICNmYTk2OTY7XG4gIG91dGxpbmU6IG5vbmU7XG59XG4uYnMtbWFpbi1jb250ZW50cyBvcHRncm91cCBvcHRpb24sXG4uYmdlLWNvbnRlbnRzIG9wdGdyb3VwIG9wdGlvbixcbi5ja2VfZWRpdGFibGUgb3B0Z3JvdXAgb3B0aW9uLFxuLmJzLXN1Yi1jb250ZW50cyBvcHRncm91cCBvcHRpb24ge1xuICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG59XG5cbi8qKlxuICog5aSJ5pWwXG4gKi9cbi8qKiAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAqXG4gKlxuICog44OV44Kp44Oz44OI44Gu5a6a576pXG4gKiBGb250IEF3ZXNvbWUgNC42LjMgYnkgQGRhdmVnYW5keSAtIGh0dHA6Ly9mb250YXdlc29tZS5pbyAtIEBmb250YXdlc29tZVxuICogTGljZW5zZSAtIGh0dHA6Ly9mb250YXdlc29tZS5pby9saWNlbnNlIChGb250OiBTSUwgT0ZMIDEuMSwgQ1NTOiBNSVQgTGljZW5zZSlcbiAqXG4gKiAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAqKi9cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogRm9udEF3ZXNvbWU7XG4gIHNyYzogdXJsKFwiLi4vZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC5lb3Q/dj00LjYuM1wiKTtcbiAgc3JjOiB1cmwoXCIuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LmVvdD8jaWVmaXgmdj00LjYuM1wiKSBmb3JtYXQoXCJlbWJlZGRlZC1vcGVudHlwZVwiKSwgdXJsKFwiLi4vZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC53b2ZmMj92PTQuNi4zXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCIuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LndvZmY/dj00LjYuM1wiKSBmb3JtYXQoXCJ3b2ZmXCIpLCB1cmwoXCIuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LnR0Zj92PTQuNi4zXCIpIGZvcm1hdChcInRydWV0eXBlXCIpLCB1cmwoXCIuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LnN2Zz92PTQuNi4zI2ZvbnRhd2Vzb21lcmVndWxhclwiKSBmb3JtYXQoXCJzdmdcIik7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbn1cbi8qKiAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAqXG4gKlxuICog44Oe44Or44OB44Kr44Op44Og44OW44Ot44OD44Kv44Gu44Os44Kk44Ki44Km44OIXG4gKlxuICogLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gKiovXG4vKipcbiAqIEJ1cmdlckVkaXRvciBTdHlsZVNoZWV0IFN0eWxlXG4gKi9cbi5iZ3QtYm94X19jYXB0aW9uIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgcGFkZGluZzogM3B4O1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBmb250LXNpemU6IDAuOGVtO1xufVxuXG4uYmd0LWJ0biB7XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgcGFkZGluZzogMTJweCAxMHB4O1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBtaW4td2lkdGg6IDI4MHB4O1xuICBib3JkZXItcmFkaXVzOiAycHg7XG59XG4uYmd0LWJ0bjphY3RpdmUsIC5iZ3QtYnRuOmZvY3VzIHtcbiAgYm94LXNoYWRvdzogMCAwIDEwcHggMCAjMDU3MGM3LCAwIDAgMTBweCAwICNmZmY7XG59XG5cbi5iZ3QtYnRuLS1saW5rLFxuW2RhdGEtYmd0LWJ1dHRvbi1raW5kPWxpbmtdIC5iZ3QtYnRuIHtcbiAgY29sb3I6ICMzMzM7XG4gIGJvcmRlci1jb2xvcjogI2NjYztcbiAgYmFja2dyb3VuZDogI2ZmZjtcbn1cbi5iZ3QtYnRuLS1saW5rOmhvdmVyLCAuYmd0LWJ0bi0tbGluazphY3RpdmUsIC5iZ3QtYnRuLS1saW5rOmZvY3VzLFxuW2RhdGEtYmd0LWJ1dHRvbi1raW5kPWxpbmtdIC5iZ3QtYnRuOmhvdmVyLFxuW2RhdGEtYmd0LWJ1dHRvbi1raW5kPWxpbmtdIC5iZ3QtYnRuOmFjdGl2ZSxcbltkYXRhLWJndC1idXR0b24ta2luZD1saW5rXSAuYmd0LWJ0bjpmb2N1cyB7XG4gIGJhY2tncm91bmQ6ICNlOWU5ZTk7XG59XG5cbi5iZ3QtYnRuLS1lbSxcbltkYXRhLWJndC1idXR0b24ta2luZD1lbV0gLmJndC1idG4ge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZDogIzMzMztcbn1cbi5iZ3QtYnRuLS1lbTpob3ZlciwgLmJndC1idG4tLWVtOmFjdGl2ZSwgLmJndC1idG4tLWVtOmZvY3VzLFxuW2RhdGEtYmd0LWJ1dHRvbi1raW5kPWVtXSAuYmd0LWJ0bjpob3ZlcixcbltkYXRhLWJndC1idXR0b24ta2luZD1lbV0gLmJndC1idG46YWN0aXZlLFxuW2RhdGEtYmd0LWJ1dHRvbi1raW5kPWVtXSAuYmd0LWJ0bjpmb2N1cyB7XG4gIGJhY2tncm91bmQ6ICM1NTU7XG59XG5cbi5iZ3QtYnRuLS1leHRlcm5hbCxcbltkYXRhLWJndC1idXR0b24ta2luZD1leHRlcm5hbF0gLmJndC1idG4ge1xuICBjb2xvcjogIzMzMztcbiAgYm9yZGVyLWNvbG9yOiAjY2NjO1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xufVxuLmJndC1idG4tLWV4dGVybmFsOmhvdmVyLCAuYmd0LWJ0bi0tZXh0ZXJuYWw6YWN0aXZlLCAuYmd0LWJ0bi0tZXh0ZXJuYWw6Zm9jdXMsXG5bZGF0YS1iZ3QtYnV0dG9uLWtpbmQ9ZXh0ZXJuYWxdIC5iZ3QtYnRuOmhvdmVyLFxuW2RhdGEtYmd0LWJ1dHRvbi1raW5kPWV4dGVybmFsXSAuYmd0LWJ0bjphY3RpdmUsXG5bZGF0YS1iZ3QtYnV0dG9uLWtpbmQ9ZXh0ZXJuYWxdIC5iZ3QtYnRuOmZvY3VzIHtcbiAgYmFja2dyb3VuZDogI2U5ZTllOTtcbn1cbi5iZ3QtYnRuLS1leHRlcm5hbDo6YWZ0ZXIsXG5bZGF0YS1iZ3QtYnV0dG9uLWtpbmQ9ZXh0ZXJuYWxdIC5iZ3QtYnRuOjphZnRlciB7XG4gIGZvbnQtZmFtaWx5OiBGb250QXdlc29tZSwgc2VyaWY7XG4gIHNwZWFrOiBub25lO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtdmFyaWFudDogbm9ybWFsO1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgdGV4dC1yZW5kZXJpbmc6IGF1dG87XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgY29udGVudDogXCJcXGYwOGVcIjtcbiAgZm9udC1zaXplOiAxZW07XG4gIGNvbG9yOiAjOTk5O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYmd0LWJ0bi0tYmFjayxcbltkYXRhLWJndC1idXR0b24ta2luZD1iYWNrXSAuYmd0LWJ0biB7XG4gIGNvbG9yOiAjMzMzO1xuICBib3JkZXItY29sb3I6ICNkZGQ7XG4gIGJhY2tncm91bmQ6ICNkZGQ7XG59XG4uYmd0LWJ0bi0tYmFjazpob3ZlciwgLmJndC1idG4tLWJhY2s6YWN0aXZlLCAuYmd0LWJ0bi0tYmFjazpmb2N1cyxcbltkYXRhLWJndC1idXR0b24ta2luZD1iYWNrXSAuYmd0LWJ0bjpob3ZlcixcbltkYXRhLWJndC1idXR0b24ta2luZD1iYWNrXSAuYmd0LWJ0bjphY3RpdmUsXG5bZGF0YS1iZ3QtYnV0dG9uLWtpbmQ9YmFja10gLmJndC1idG46Zm9jdXMge1xuICBiYWNrZ3JvdW5kOiAjZTllOWU5O1xufVxuLmJndC1idG4tLWJhY2sgc3BhbixcbltkYXRhLWJndC1idXR0b24ta2luZD1iYWNrXSAuYmd0LWJ0biBzcGFuIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJndC1idG4tLWJhY2s6OmJlZm9yZSxcbltkYXRhLWJndC1idXR0b24ta2luZD1iYWNrXSAuYmd0LWJ0bjo6YmVmb3JlIHtcbiAgZm9udC1mYW1pbHk6IEZvbnRBd2Vzb21lLCBzZXJpZjtcbiAgc3BlYWs6IG5vbmU7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC12YXJpYW50OiBub3JtYWw7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICB0ZXh0LXJlbmRlcmluZzogYXV0bztcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICBjb250ZW50OiBcIlxcZjA1M1wiO1xuICBmb250LXNpemU6IDFlbTtcbiAgbWFyZ2luLXRvcDogLTJweDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYmd0LWhyIHtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG5cbltkYXRhLWJndC1oci1raW5kPWRhc2hlZF0gLmJndC1ociB7XG4gIGhlaWdodDogMDtcbiAgYm9yZGVyOiBub25lO1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBib3JkZXItYm90dG9tOiAycHggZGFzaGVkIGN1cnJlbnRDb2xvcjtcbn1cblxuLmJndC1oci0tYm9sZCxcbltkYXRhLWJndC1oci1raW5kPWJvbGRdIC5iZ3QtaHIge1xuICBoZWlnaHQ6IDVweDtcbn1cblxuLmJndC1oci0tbmFycm93LFxuW2RhdGEtYmd0LWhyLWtpbmQ9bmFycm93XSAuYmd0LWhyIHtcbiAgaGVpZ2h0OiAxcHg7XG59XG5cbi5iZ3QtaHItLXNob3J0LFxuW2RhdGEtYmd0LWhyLWtpbmQ9c2hvcnRdIC5iZ3QtaHIge1xuICB3aWR0aDogNjAlO1xuICBoZWlnaHQ6IDFweDtcbn1cblxuLmJndC1kb3dubG9hZC1maWxlX19saW5rIHtcbiAgY29sb3I6ICMzMzM7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGZvbnQtc2l6ZTogMS4wOGVtO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAwLjdlbSAxZW07XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5iZ3QtZG93bmxvYWQtZmlsZV9fbGluazpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWU7XG59XG4uYmd0LWRvd25sb2FkLWZpbGVfX2xpbms6YWN0aXZlLCAuYmd0LWRvd25sb2FkLWZpbGVfX2xpbms6Zm9jdXMge1xuICBib3gtc2hhZG93OiAwIDAgNXB4IDFweCAjMDU3MGM3O1xuICBvdXRsaW5lOiBub25lO1xufVxuXG4uYmd0LWxpbmtfX3NpemUge1xuICBjb2xvcjogIzgwODA4MDtcbiAgZm9udC1zaXplOiAwLjhlbTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLmJndC1nb29nbGUtbWFwcy1saW5rIHtcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgIHBhZGRpbmc6IDFlbTtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgY29sb3I6ICMzMzM7XG4gICAgYm9yZGVyOiBzb2xpZCAxcHggIzk5OTtcbiAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG4gIC5iZ3QtZ29vZ2xlLW1hcHMtbGluayBzcGFuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAuYmd0LWdvb2dsZS1tYXBzLWxpbms6OmFmdGVyIHtcbiAgICBmb250LWZhbWlseTogRm9udEF3ZXNvbWUsIHNlcmlmO1xuICAgIHNwZWFrOiBub25lO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtdmFyaWFudDogbm9ybWFsO1xuICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgIHRleHQtcmVuZGVyaW5nOiBhdXRvO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gICAgY29udGVudDogXCJcXGYwOGVcIjtcbiAgICBmb250LXNpemU6IDFlbTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG59XG5cbltkYXRhLWJndD1nYWxsZXJ5XSAuYmd0LWdhbGxlcnkge1xuICBwYWRkaW5nLXRvcDogNTQlO1xufVxuW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeTpob3ZlciBbZGF0YS1iZ3Q9Z2FsbGVyeV0gLmJndC1nYWxsZXJ5LWN0cmwge1xuICBvcGFjaXR5OiAxO1xufVxuW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeV9faW1nIGltZyB7XG4gIG9iamVjdC1maXQ6IGNvdmVyO1xufVxuW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeV9fY2FwdGlvbiB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNik7XG4gIHBhZGRpbmc6IDAuN2VtIDFlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeS1jdHJsIHtcbiAgdG9wOiA1MCU7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXMgZWFzZS1pbjtcbn1cbltkYXRhLWJndD1nYWxsZXJ5XSAuYmd0LWdhbGxlcnktY3RybF9fcHJldiwgW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeS1jdHJsX19uZXh0IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG4gIG1hcmdpbjogLTIwcHggMCAwO1xuICBwYWRkaW5nOiAwO1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBib3JkZXI6IG5vbmU7XG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7XG59XG5bZGF0YS1iZ3Q9Z2FsbGVyeV0gLmJndC1nYWxsZXJ5LWN0cmxfX3ByZXY6aG92ZXIsIFtkYXRhLWJndD1nYWxsZXJ5XSAuYmd0LWdhbGxlcnktY3RybF9fbmV4dDpob3ZlciB7XG4gIG9wYWNpdHk6IDAuNTtcbn1cbltkYXRhLWJndD1nYWxsZXJ5XSAuYmd0LWdhbGxlcnktY3RybF9fcHJldjpmb2N1cywgW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeS1jdHJsX19uZXh0OmZvY3VzIHtcbiAgb3V0bGluZTogbm9uZTtcbn1cbltkYXRhLWJndD1nYWxsZXJ5XSAuYmd0LWdhbGxlcnktY3RybF9fcHJldiBzcGFuLCBbZGF0YS1iZ3Q9Z2FsbGVyeV0gLmJndC1nYWxsZXJ5LWN0cmxfX25leHQgc3BhbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xufVxuW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeS1jdHJsX19wcmV2OjphZnRlciwgW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeS1jdHJsX19uZXh0OjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXI6IHNvbGlkICNmZmY7XG4gIGJvcmRlci13aWR0aDogNXB4IDVweCAwIDA7XG59XG5bZGF0YS1iZ3Q9Z2FsbGVyeV0gLmJndC1nYWxsZXJ5LWN0cmxfX3ByZXYge1xuICBsZWZ0OiAyMHB4O1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTM1ZGVnKTtcbn1cbltkYXRhLWJndD1nYWxsZXJ5XSAuYmd0LWdhbGxlcnktY3RybF9fbmV4dCB7XG4gIHJpZ2h0OiAyMHB4O1xuICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG59XG5bZGF0YS1iZ3Q9Z2FsbGVyeV0gW2RhdGEtZ2FsbGVyeS1tYXJrZXI9dGh1bWJzXSArIC5iZ3QtZ2FsbGVyeS1tYXJrZXIge1xuICBtYXJnaW4tdG9wOiAxMHB4O1xufVxuW2RhdGEtYmd0PWdhbGxlcnldIFtkYXRhLWdhbGxlcnktbWFya2VyPXRodW1ic10gKyAuYmd0LWdhbGxlcnktbWFya2VyIGxpIHtcbiAgbWFyZ2luOiAwIDVweDtcbiAgd2lkdGg6IDYwcHg7XG4gIGhlaWdodDogNjBweDtcbn1cbltkYXRhLWJndD1nYWxsZXJ5XSBbZGF0YS1nYWxsZXJ5LW1hcmtlcj1kb3RdICsgLmJndC1nYWxsZXJ5LW1hcmtlciB7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG59XG5bZGF0YS1iZ3Q9Z2FsbGVyeV0gW2RhdGEtZ2FsbGVyeS1tYXJrZXI9ZG90XSArIC5iZ3QtZ2FsbGVyeS1tYXJrZXIgbGkge1xuICBtYXJnaW46IDAgMnB4O1xuICB3aWR0aDogMTBweDtcbiAgaGVpZ2h0OiAxMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTk5O1xuICBib3JkZXItcmFkaXVzOiAxMDAlO1xufVxuW2RhdGEtYmd0PWdhbGxlcnldIFtkYXRhLWdhbGxlcnktbWFya2VyPWRvdF0gKyAuYmd0LWdhbGxlcnktbWFya2VyIGxpLmN1cnJlbnQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xufVxuXG4vKiDjg4fjg5DjgqTjgrnkvp3lrZjmsY7nlKjjgq/jg6njgrkgKi9cbi5wYy1vbmx5IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkge1xuICAucGMtb25seSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4uc3Atb25seSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkge1xuICAuc3Atb25seSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn0iLCJAY2hhcnNldCBcInV0Zi04XCI7XG4vKipcbiAqIGJhc2VyQ01TIDogIEJhc2VkIFdlYnNpdGUgRGV2ZWxvcG1lbnQgUHJvamVjdCA8aHR0cHM6Ly9iYXNlcmNtcy5uZXQ+XG4gKiBDb3B5cmlnaHQgKGMpIE5QTyBiYXNlciBmb3VuZGF0aW9uIDxodHRwczovL2Jhc2VyZm91bmRhdGlvbi5vcmcvPlxuICpcbiAqIEBjb3B5cmlnaHQgICAgIENvcHlyaWdodCAoYykgTlBPIGJhc2VyIGZvdW5kYXRpb25cbiAqIEBsaW5rICAgICAgICAgIGh0dHBzOi8vYmFzZXJjbXMubmV0IGJhc2VyQ01TIFByb2plY3RcbiAqIEBzaW5jZSAgICAgICAgIDUuMC4wXG4gKiBAbGljZW5zZSAgICAgICBodHRwczovL2Jhc2VyY21zLm5ldC9saWNlbnNlL2luZGV4Lmh0bWwgTUlUIExpY2Vuc2VcbiAqL1xuXG4vKipcbiAqIOODkOODvOOCrOODvOOCqOODh+OCo+OCv+ODvOOCueOCv+OCpOODq1xuICog566h55CG55S76Z2i44Gn44KC5ZG844Gz5Ye644GV44KM44KLXG4gKi9cblxuQGltcG9ydCBcImNvbW1vbi9lZGl0b3JcIjtcbkBpbXBvcnQgXCJjb21tb24vYmdlX3NldHRpbmdcIjtcbkBpbXBvcnQgXCJjb21tb24vYmdlXCI7XG5cbiIsIi8qKlxuICog44Ko44OH44Kj44K/44O855SoQ1NTXG4gKi9cblxuJGJyZWFrUG9pbnQ6IDc2OHB4O1xuXG4uY2tlX2VkaXRhYmxlIHtcbiAgcGFkZGluZzogMTVweDtcbn1cblxuLyogRWRpdG9yIFBhcnRzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4uYnMtbWFpbi1jb250ZW50cyxcbi5iZ2UtY29udGVudHMsXG4uY2tlX2VkaXRhYmxlIHtcbiAgZm9udC1mYW1pbHk6IEFyaWFsLCBWZXJkYW5hLCBcIua4uOOCtOOCt+ODg+OCr1wiLCBZdUdvdGhpYywgXCJIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm9OXCIsIE1laXJ5bywgc2Fucy1zZXJpZjtcbiAgY29sb3I6ICMwMDA7XG5cbiAgaDEge1xuICAgIGZvbnQtc2l6ZTogNDBweDtcbiAgICBtYXJnaW4tYm90dG9tOiA0MHB4O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgaDIge1xuICAgIGZvbnQtZmFtaWx5OiBcIlNGIFBybyBKUFwiLCBcIlNGIFBybyBUZXh0XCIsIFwiU0YgUHJvIEljb25zXCIsIFwiSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvXCIsIFwi44OS44Op44Ku44OO6KeS44K0IFBybyBXM1wiLCBcIuODoeOCpOODquOCqlwiLCBcIk1laXJ5b1wiLCBcIu+8re+8syDvvLDjgrTjgrfjg4Pjgq9cIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBcIkhlbHZldGljYVwiLCBcIkFyaWFsXCIsIFwic2Fucy1zZXJpZlwiO1xuICAgIGxldHRlci1zcGFjaW5nOiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgZm9udC1zaXplOiAyLjJlbTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBsaW5lLWhlaWdodDogMS4yO1xuICAgIG1hcmdpbjogMC42ZW0gMDtcbiAgICBwYWRkaW5nOiAwLjNlbSAwO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgfVxuICB9XG5cbiAgaDMge1xuICAgIG1hcmdpbjogNTZweCAwIDIwcHggMDtcbiAgICBwYWRkaW5nOiAxM3B4IDI4cHggMTJweDtcbiAgICBmb250LXNpemU6IDIxcHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgbGluZS1oZWlnaHQ6IDQ4LjNweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgIH1cbiAgfVxuXG4gIGg0IHtcbiAgICBib3JkZXItYm90dG9tOiAxcHggI0NDQyBkb3R0ZWQ7XG4gICAgZm9udC1zaXplOiAyMnB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxMnB4O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBtYXJnaW46IDUwcHggMCAxN3B4IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgfVxuICB9XG5cbiAgaDUge1xuICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgICBtYXJnaW46IDFlbSAwO1xuICAgIHBhZGRpbmc6IDAuM2VtIDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG4gIH1cblxuICBoNiB7XG4gICAgZm9udC1zaXplOiAxZW07XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgICBtYXJnaW46IDFlbSAwO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBwYWRkaW5nOiAwLjNlbSAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgfVxuICB9XG5cbiAgc3Ryb25nIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB9XG5cbiAgdSB7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIH1cblxuICBzIHtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcbiAgfVxuXG4gIGVtIHtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIH1cblxuICBociB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxcHg7XG4gICAgY29sb3I6ICNkZGQ7XG4gICAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgICBtYXJnaW46IDUwcHggYXV0bztcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG4gIH1cblxuICB1bCB7XG4gICAgbWFyZ2luOiAyMHB4IDAgMzZweCAwO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjY7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC4wNXJlbTtcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG5cbiAgICBsaSB7XG4gICAgICBsaXN0LXN0eWxlLXBvc2l0aW9uOiBpbnNpZGU7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBwYWRkaW5nOiAwIDAgMCAyNXB4O1xuICAgICAgbWFyZ2luOiAwLjVlbSAwIDAuNWVtIDA7XG4gICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDtcblxuICAgICAgYSB7XG4gICAgICAgIHpvb206IDE7XG4gICAgICB9XG5cbiAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogOXB4O1xuICAgICAgICBsZWZ0OiAxcHg7XG4gICAgICAgIHdpZHRoOiA2cHg7XG4gICAgICAgIGhlaWdodDogNnB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMTgxODE4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdWwge1xuICAgICAgbWFyZ2luOiAwIDAgMCAxLjhlbTtcblxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb2wge1xuICAgIG1hcmdpbjogMjBweCAwIDM2cHggMS44ZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgICBsZXR0ZXItc3BhY2luZzogLjA1cmVtO1xuXG4gICAgb2wge1xuICAgICAgbWFyZ2luOiAyMHB4O1xuICAgIH1cblxuICAgIGxpIHtcbiAgICAgIGxpc3Qtc3R5bGUtdHlwZTogZGVjaW1hbC1sZWFkaW5nLXplcm87XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBwYWRkaW5nOiAwIDAgMCAwO1xuICAgICAgbWFyZ2luOiAwLjVlbSAwIDAuNWVtIDA7XG4gICAgICBsaW5lLWhlaWdodDogMS42O1xuICAgIH1cbiAgfVxuXG4gIHAge1xuICAgIG1hcmdpbjogMWVtIDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC4wNXJlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyLjM7XG4gIH1cblxuICB0YWJsZSB7XG4gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICBib3JkZXItc3BhY2luZzogMDtcbiAgICB0YWJsZS1sYXlvdXQ6IGZpeGVkO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2UxZTFlMTtcbiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZTFlMWUxO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTFlMWUxO1xuICAgIG1hcmdpbjogMjBweCAwIDIwcHggMDtcblxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRicmVha1BvaW50KSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG5cbiAgICBjYXB0aW9uIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcblxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGJvZHksXG4gICAgdGZvb3Qge1xuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHIge1xuICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlMWUxZTE7XG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWFyZ2luLXRvcDogLTFweDtcbiAgICAgIH1cblxuICAgICAgJjpudGgtY2hpbGQob2RkKSB0ZCB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XG4gICAgICB9XG5cbiAgICAgIHRoLFxuICAgICAgdGQge1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICBwYWRkaW5nOiAyNnB4IDI0cHg7XG4gICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2UxZTFlMTtcblxuICAgICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIlNGIFBybyBKUFwiLCBcIlNGIFBybyBUZXh0XCIsIFwiU0YgUHJvIEljb25zXCIsIFwiSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvXCIsIFwi44OS44Op44Ku44OO6KeS44K0IFBybyBXM1wiLCBcIuODoeOCpOODquOCqlwiLCBcIk1laXJ5b1wiLCBcIu+8re+8syDvvLDjgrTjgrfjg4Pjgq9cIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBcIkhlbHZldGljYVwiLCBcIkFyaWFsXCIsIFwic2Fucy1zZXJpZlwiO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZjNmM2YzO1xuICAgICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGQge1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuXG4gICAgICAgIHVsIHtcbiAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpZWxkc2V0IHtcbiAgICBib3JkZXI6IDA7XG4gIH1cblxuICBpbWcge1xuICAgIGJvcmRlcjogMDtcbiAgICBtYXJnaW46IGF1dG87XG4gIH1cblxuICBhZGRyZXNzLCBidXR0b24sIGNhcHRpb24sIGNpdGUsIGNvZGUsIGRmbiwgZW0sIGlucHV0LCBvcHRncm91cCwgb3B0aW9uLCBzZWxlY3QsIHN0cm9uZywgdGV4dGFyZWEsIHRoLCB2YXIge1xuICAgIGZvbnQ6IGluaGVyaXQ7XG4gIH1cblxuICBzbWFsbCB7XG4gICAgY29sb3I6ICM2NjY7XG4gIH1cblxuICBkZWwsIGlucyB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB9XG5cbiAgYSB7XG4gICAgJjpsaW5rLCAmOnZpc2l0ZWQge1xuICAgICAgY29sb3I6ICMyYjdiYjk7XG4gICAgfVxuXG4gICAgJjpob3ZlciB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgY2FwdGlvbiwgdGgge1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gIH1cblxuICBxIHtcbiAgICAmOmJlZm9yZSwgJjphZnRlciB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICB9XG4gIH1cblxuICBhYmJyLCBhY3JvbnltIHtcbiAgICBib3JkZXI6IDA7XG4gICAgZm9udC12YXJpYW50OiBub3JtYWw7XG4gIH1cblxuICBzdWIge1xuICAgIGZvbnQtc2l6ZTogMC44ZW07XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIHZlcnRpY2FsLWFsaWduOiBzdWI7XG4gIH1cblxuICBzdXAge1xuICAgIGZvbnQtc2l6ZTogMC44ZW07XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIHZlcnRpY2FsLWFsaWduOiBzdXBlcjtcbiAgfVxuXG4gIGxlZ2VuZCB7XG4gICAgY29sb3I6ICMwMDA7XG4gIH1cblxuICBwcmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNGM0YzRjM7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjRTJFMkUyO1xuICB9XG5cbiAgYmxvY2txdW90ZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogMWVtIDA7XG4gICAgcGFkZGluZzogMXB4IDIuNWVtO1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICNjY2M7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBjb2xvcjogIzg4ODtcbiAgICBmb250LXNpemU6IDAuOWVtO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgIH1cblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAn4oCcJztcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgZm9udC1mYW1pbHk6IHNlcmlmO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwLjNlbTtcbiAgICAgIGxlZnQ6IDAuMjVlbTtcbiAgICAgIHotaW5kZXg6IDA7XG4gICAgICBjb2xvcjogI2NjYztcbiAgICAgIGZvbnQtc2l6ZTogM2VtO1xuICAgIH1cblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICfigJ0nO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBmb250LWZhbWlseTogc2VyaWY7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206IC0wLjNlbTtcbiAgICAgIHJpZ2h0OiAwLjI1ZW07XG4gICAgICB6LWluZGV4OiAwO1xuICAgICAgY29sb3I6ICNjY2M7XG4gICAgICBmb250LXNpemU6IDNlbTtcbiAgICB9XG4gIH1cblxufVxuXG4vKiBGb3JtIFBhcnRzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4uYnMtbWFpbi1jb250ZW50cyxcbi5iZ2UtY29udGVudHMsXG4uY2tlX2VkaXRhYmxlLFxuLmJzLXN1Yi1jb250ZW50cyB7XG4gIGZvcm0ge1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgfVxuXG4gIGlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBvcHRpb24ge1xuICAgIGZvbnQtZmFtaWx5OiBcIlNGIFBybyBKUFwiLCBcIlNGIFBybyBUZXh0XCIsIFwiU0YgUHJvIEljb25zXCIsIFwiSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvXCIsIFwi44OS44Op44Ku44OO6KeS44K0IFBybyBXM1wiLCBcIuODoeOCpOODquOCqlwiLCBcIk1laXJ5b1wiLCBcIu+8re+8syDvvLDjgrTjgrfjg4Pjgq9cIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBcIkhlbHZldGljYVwiLCBcIkFyaWFsXCIsIFwic2Fucy1zZXJpZlwiO1xuICB9XG5cbiAgaW5wdXRbdHlwZT1wYXNzd29yZF0sXG4gIGlucHV0W3R5cGU9dGV4dF0sXG4gIGlucHV0W3R5cGU9ZW1haWxdLFxuICBpbnB1dFt0eXBlPXRlbF0sXG4gIGlucHV0W3R5cGU9bnVtYmVyXSxcbiAgdGV4dGFyZWEsXG4gIHNlbGVjdCB7XG4gICAgbWFyZ2luOiAzcHggMnB4O1xuICAgIHBhZGRpbmc6IDhweCAxMHB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgLW1vei1ib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICB9XG5cbiAgaW5wdXQge1xuICAgICZbdHlwZT1jaGVja2JveF0ge1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG5cbiAgICAmW3R5cGU9cmFkaW9dLCAmW3R5cGU9Y2hlY2tib3hdIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgICB9XG5cbiAgICAmW3R5cGU9c3VibWl0XSwgJlt0eXBlPXJlc2V0XSwgJlt0eXBlPWJ1dHRvbl0ge1xuICAgICAgbWFyZ2luOiAzcHggMnB4O1xuICAgICAgZm9udC1mYW1pbHk6IFwiU0YgUHJvIEpQXCIsIFwiU0YgUHJvIFRleHRcIiwgXCJTRiBQcm8gSWNvbnNcIiwgXCJIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm9cIiwgXCLjg5Ljg6njgq7jg47op5LjgrQgUHJvIFczXCIsIFwi44Oh44Kk44Oq44KqXCIsIFwiTWVpcnlvXCIsIFwi77yt77yzIO+8sOOCtOOCt+ODg+OCr1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIFwiSGVsdmV0aWNhXCIsIFwiQXJpYWxcIiwgXCJzYW5zLXNlcmlmXCI7XG4gICAgfVxuXG4gICAgJlt0eXBlPXBhc3N3b3JkXSxcbiAgICAmW3R5cGU9dGV4dF0sXG4gICAgJlt0eXBlPWVtYWlsXSxcbiAgICAmW3R5cGU9dGVsXSxcbiAgICAmW3R5cGU9bnVtYmVyXVxuICAgIHtcbiAgICAgIGZvbnQtc2l6ZTogMWVtO1xuXG4gICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgIGNvbG9yOiAjY2NjO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6YWN0aXZlLFxuICAgICY6Zm9jdXMge1xuICAgICAgYm94LXNoYWRvdzogMCAwIDVweCAxcHggI2ZhOTY5NjtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgdGV4dGFyZWEge1xuICAgIHdpZHRoOiA5NSU7XG4gICAgZm9udC1zaXplOiAxZW07XG4gICAgcGFkZGluZzogM3B4IDNweDtcblxuICAgICY6YWN0aXZlLFxuICAgICY6Zm9jdXMge1xuICAgICAgYm94LXNoYWRvdzogMCAwIDVweCAxcHggI2ZhOTY5NjtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgaW5wdXQge1xuICAgICZbdHlwZT1wYXNzd29yZF0sXG4gICAgJlt0eXBlPXRleHRdLFxuICAgICZbdHlwZT1lbWFpbF0sXG4gICAgJlt0eXBlPXRlbF0sXG4gICAgJlt0eXBlPW51bWJlcl1cbiAgICB7XG4gICAgICBsaW5lLWhlaWdodDogMWVtO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdCB7XG4gICAgZm9udC1zaXplOiAxZW07XG4gICAgaGVpZ2h0OiAyLjZlbTtcbiAgICBwYWRkaW5nOiAxMHB4IDhweDtcblxuICAgICY6YWN0aXZlLFxuICAgICY6Zm9jdXMge1xuICAgICAgYm94LXNoYWRvdzogMCAwIDVweCAxcHggI2ZhOTY5NjtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgb3B0Z3JvdXAgb3B0aW9uIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gIH1cbn1cbiIsIi8qKlxuICog5aSJ5pWwXG4gKi9cbkB1c2UgXCJzYXNzOm1hdGhcIjtcblxuLy8gUldE44Gu44OW44Os44O844Kv44Od44Kk44Oz44OIXG4kYnJlYWtQb2ludDogNzY4cHg7XG5cbi8vIOOCq+ODqeODoOmWk+OBruODnuODvOOCuOODs1xuJG11bHRpQ29sdW1uR3JpZE1hcmdpbjogMjBweDtcblxuLy8gUldE44Gn44Kr44Op44Og44GM6JC944Gh44Gf5pmC44Gu5LiL44Oe44O844K444OzXG4kbXVsdGlDb2x1bW5HcmlkTWFyZ2luQm90dG9tV2hlbkNsZWFyZWRGbG9hdDogMjBweDtcblxuLy8g44Oc44K/44Oz44Gu44OV44Kp44O844Kr44K55pmC44Gu44Kr44Op44O8XG4kYnRuR2xvd0NvbG9yOiAjMDU3MGM3O1xuXG4vLyDjg4jjg6rjg6DnlLvlg4/jg5bjg63jg4Pjgq/jga7nuKbmqKrmr5RcbiR0cmltSW1hZ2VBc3BlY3RSYXRpbzogMTsgLy8gNDoz44Gu5aC05ZCI44GvMy80XG5cbi8qKiAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAqXG4gKlxuICog44OV44Kp44Oz44OI44Gu5a6a576pXG4gKiBGb250IEF3ZXNvbWUgNC42LjMgYnkgQGRhdmVnYW5keSAtIGh0dHA6Ly9mb250YXdlc29tZS5pbyAtIEBmb250YXdlc29tZVxuICogTGljZW5zZSAtIGh0dHA6Ly9mb250YXdlc29tZS5pby9saWNlbnNlIChGb250OiBTSUwgT0ZMIDEuMSwgQ1NTOiBNSVQgTGljZW5zZSlcbiAqXG4gKiAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAqKi9cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogRm9udEF3ZXNvbWU7XG4gIHNyYzogdXJsKCcuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LmVvdD92PTQuNi4zJyk7XG4gIHNyYzogdXJsKCcuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LmVvdD8jaWVmaXgmdj00LjYuMycpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSxcbiAgdXJsKCcuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LndvZmYyP3Y9NC42LjMnKSBmb3JtYXQoJ3dvZmYyJyksXG4gIHVybCgnLi4vZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC53b2ZmP3Y9NC42LjMnKSBmb3JtYXQoJ3dvZmYnKSxcbiAgdXJsKCcuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LnR0Zj92PTQuNi4zJykgZm9ybWF0KCd0cnVldHlwZScpLFxuICB1cmwoJy4uL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQuc3ZnP3Y9NC42LjMjZm9udGF3ZXNvbWVyZWd1bGFyJykgZm9ybWF0KCdzdmcnKTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuXG4vLyAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAvXG4vLyDjgrDjg6rjg4Pjg4njgrfjgrnjg4bjg6Bcbi8vXG4vLyDnt6jpm4bpnZ7mjqjlpahcbi8vXG4vLyAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAvXG4kc3BhbjE6IDguMzMzMyU7XG4kc3BhbjI6IDE2LjY2NjYlO1xuJHNwYW4zOiAyNSU7XG4kc3BhbjQ6IDMzLjMzMzMlO1xuJHNwYW41OiA0MS42NjY2JTtcbiRzcGFuNjogNTAlO1xuJHNwYW43OiA1OC4zMzMzJTtcbiRzcGFuODogNjYuNjY2NiU7XG4kc3Bhbjk6IDc1JTtcbiRzcGFuMTA6IDgzLjMzMzMlO1xuJHNwYW4xMTogOTEuNjY2NiU7XG4kc3BhbjEyOiAxMDAlO1xuJGRpdmlkZTU6IDIwJTsgLy8gMTLjgrDjg6rjg4Pjg4njgrfjgrnjg4bjg6Djgafjga/lho3nj77jgafjgY3jgarjgYQ15YiG5YmyXG5cbi8vIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC9cbi8vXG4vLyDjg5/jg4Pjgq/jgrnjgqTjg7Ncbi8vXG4vLyAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAvXG5AbWl4aW4gYmdlLWljb24ge1xuICBmb250LWZhbWlseTogRm9udEF3ZXNvbWUsIHNlcmlmO1xuICBzcGVhazogbm9uZTtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXZhcmlhbnQ6IG5vcm1hbDtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gIHRleHQtcmVuZGVyaW5nOiBhdXRvO1xuICBsaW5lLWhlaWdodDogMTtcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG59XG5cbi8qKiAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAqXG4gKlxuICog44Oe44Or44OB44Kr44Op44Og44OW44Ot44OD44Kv44Gu44Os44Kk44Ki44Km44OIXG4gKlxuICogLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gKiovXG5cbiVjb2x1bW4yLWxheW91dCB7XG4gIC8qIDLliJfjg5bjg63jg4Pjgq8gKi9cbiAgLmJndC1ncmlkIHtcbiAgICAvKiAy5YiX44OW44Ot44OD44Kv5YaFIOODrOOCpOOCouOCpuODiOeUqOOCs+ODs+ODhuODiiAqL1xuICAgIHdpZHRoOiAkc3BhbjY7XG4gICAgZmxvYXQ6IGxlZnQ7XG5cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBmbG9hdDogbm9uZTtcblxuICAgICAgW2RhdGEtYmd0XSA+IDpsYXN0LWNoaWxkIHtcbiAgICAgICAgLyog5LiL44Oe44O844K444Oz44Gv44OW44Ot44OD44Kv5YaF44Gu44K/44Kk44OX44Gu6KaB57Sg44Gr5a++44GX44Gm5oyH5a6a44GZ44KLICjnqbrnlLvlg4/lr77nrZYpICovXG4gICAgICAgIG1hcmdpbi1ib3R0b206ICRtdWx0aUNvbHVtbkdyaWRNYXJnaW5Cb3R0b21XaGVuQ2xlYXJlZEZsb2F0O1xuXG4gICAgICAgICZbZGF0YS1iZ2UtZW1wdHk9JzEnXSB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQsXG4gICAgICAmW2NsYXNzKj0nYmd0LXNwLWdyaWQnXSB7XG4gICAgICAgIFtkYXRhLWJndF0gPiA6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICY6bnRoLWNoaWxkKDEpIHtcbiAgICAgIC8qIDLliJfjg5bjg63jg4Pjgq/lhoUg44Os44Kk44Ki44Km44OI55So5pyA5Yid44Gu44Kz44Oz44OG44OKICovXG4gICAgICBwYWRkaW5nLXJpZ2h0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luLCAyKTtcblxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm50aC1jaGlsZCgyKSB7XG4gICAgICAvKiAy5YiX44OW44Ot44OD44Kv5YaFIOODrOOCpOOCouOCpuODiOeUqOacgOW+jOOBruOCs+ODs+ODhuODiiAqL1xuICAgICAgcGFkZGluZy1sZWZ0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luLCAyKTtcblxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4lY29sdW1uMy1sYXlvdXQge1xuICAvKiAz5YiX44OW44Ot44OD44KvICovXG4gIC5iZ3QtZ3JpZCB7XG4gICAgLyogM+WIl+ODluODreODg+OCr+WGhSDjg6zjgqTjgqLjgqbjg4jnlKjjgrPjg7Pjg4bjg4ogKi9cbiAgICB3aWR0aDogJHNwYW40O1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIHBhZGRpbmctbGVmdDogbWF0aC5kaXYoJG11bHRpQ29sdW1uR3JpZE1hcmdpbiAqIDEsIDMpO1xuICAgIHBhZGRpbmctcmlnaHQ6IG1hdGguZGl2KCRtdWx0aUNvbHVtbkdyaWRNYXJnaW4gKiAxLCAzKTtcblxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRicmVha1BvaW50KSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGZsb2F0OiBub25lO1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcblxuICAgICAgW2RhdGEtYmd0XSA+IDpsYXN0LWNoaWxkIHtcbiAgICAgICAgLyog5LiL44Oe44O844K444Oz44Gv44OW44Ot44OD44Kv5YaF44Gu44K/44Kk44OX44Gu6KaB57Sg44Gr5a++44GX44Gm5oyH5a6a44GZ44KLICjnqbrnlLvlg4/lr77nrZYpICovXG4gICAgICAgIG1hcmdpbi1ib3R0b206ICRtdWx0aUNvbHVtbkdyaWRNYXJnaW5Cb3R0b21XaGVuQ2xlYXJlZEZsb2F0O1xuXG4gICAgICAgICZbZGF0YS1iZ2UtZW1wdHk9JzEnXSB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQsXG4gICAgICAmW2NsYXNzKj0nYmd0LXNwLWdyaWQnXSB7XG4gICAgICAgIFtkYXRhLWJndF0gPiA6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICY6bnRoLWNoaWxkKDEpIHtcbiAgICAgIC8qIDPliJfjg5bjg63jg4Pjgq/lhoUg44Os44Kk44Ki44Km44OI55So5pyA5Yid44Gu44Kz44Oz44OG44OKICovXG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luICogMiwgMyk7XG5cbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRicmVha1BvaW50KSB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpudGgtY2hpbGQoMykge1xuICAgICAgLyogM+WIl+ODluODreODg+OCr+WGhSDjg6zjgqTjgqLjgqbjg4jnlKjmnIDliJ3jga7jgrPjg7Pjg4bjg4ogKi9cbiAgICAgIHBhZGRpbmctbGVmdDogbWF0aC5kaXYoJG11bHRpQ29sdW1uR3JpZE1hcmdpbiAqIDIsIDMpO1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcblxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4lY29sdW1uNC1sYXlvdXQge1xuICAvKiA05YiX44OW44Ot44OD44KvICovXG4gIC5iZ3QtZ3JpZCB7XG4gICAgLyogNOWIl+ODluODreODg+OCr+WGhSDjg6zjgqTjgqLjgqbjg4jnlKjjgrPjg7Pjg4bjg4ogKi9cbiAgICB3aWR0aDogJHNwYW4zO1xuICAgIGZsb2F0OiBsZWZ0O1xuXG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgZmxvYXQ6IG5vbmU7XG5cbiAgICAgIFtkYXRhLWJndF0gPiA6bGFzdC1jaGlsZCB7XG4gICAgICAgIC8qIOS4i+ODnuODvOOCuOODs+OBr+ODluODreODg+OCr+WGheOBruOCv+OCpOODl+OBruimgee0oOOBq+WvvuOBl+OBpuaMh+WumuOBmeOCiyAo56m655S75YOP5a++562WKSAqL1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAkbXVsdGlDb2x1bW5HcmlkTWFyZ2luQm90dG9tV2hlbkNsZWFyZWRGbG9hdDtcblxuICAgICAgICAmW2RhdGEtYmdlLWVtcHR5PScxJ10ge1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkLFxuICAgICAgJltjbGFzcyo9J2JndC1zcC1ncmlkJ10ge1xuICAgICAgICBbZGF0YS1iZ3RdID4gOmxhc3QtY2hpbGQge1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm50aC1jaGlsZCgxKSB7XG4gICAgICAvKiA05YiX44OW44Ot44OD44Kv5YaF44Gu44Kz44Oz44OG44OKICovXG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luICogMywgNCk7XG5cbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRicmVha1BvaW50KSB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm50aC1jaGlsZCgyKSB7XG4gICAgICAvKiA05YiX44OW44Ot44OD44Kv5YaF44Gu44Kz44Oz44OG44OKICovXG4gICAgICBwYWRkaW5nLWxlZnQ6IG1hdGguZGl2KCRtdWx0aUNvbHVtbkdyaWRNYXJnaW4gKiAxLCA0KTtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IG1hdGguZGl2KCRtdWx0aUNvbHVtbkdyaWRNYXJnaW4gKiAyLCA0KTtcblxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6bnRoLWNoaWxkKDMpIHtcbiAgICAgIC8qIDTliJfjg5bjg63jg4Pjgq/lhoXjga7jgrPjg7Pjg4bjg4ogKi9cbiAgICAgIHBhZGRpbmctbGVmdDogbWF0aC5kaXYoJG11bHRpQ29sdW1uR3JpZE1hcmdpbiAqIDIsIDQpO1xuICAgICAgcGFkZGluZy1yaWdodDogbWF0aC5kaXYoJG11bHRpQ29sdW1uR3JpZE1hcmdpbiAqIDEsIDQpO1xuXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpudGgtY2hpbGQoNCkge1xuICAgICAgLyogNOWIl+ODluODreODg+OCr+WGheOBruOCs+ODs+ODhuODiiAqL1xuICAgICAgcGFkZGluZy1sZWZ0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luICogMywgNCk7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbiVjb2x1bW41LWxheW91dCB7XG4gIC8qIDXliJfjg5bjg63jg4Pjgq8gKi9cbiAgLmJndC1ncmlkIHtcbiAgICAvKiA15YiX44OW44Ot44OD44Kv5YaFIOODrOOCpOOCouOCpuODiOeUqOOCs+ODs+ODhuODiiAqL1xuICAgIHdpZHRoOiAkZGl2aWRlNTtcbiAgICBmbG9hdDogbGVmdDtcblxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRicmVha1BvaW50KSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGZsb2F0OiBub25lO1xuXG4gICAgICBbZGF0YS1iZ3RdID4gOmxhc3QtY2hpbGQge1xuICAgICAgICAvKiDkuIvjg57jg7zjgrjjg7Pjga/jg5bjg63jg4Pjgq/lhoXjga7jgr/jgqTjg5fjga7opoHntKDjgavlr77jgZfjgabmjIflrprjgZnjgosgKOepuueUu+WDj+WvvuetlikgKi9cbiAgICAgICAgbWFyZ2luLWJvdHRvbTogJG11bHRpQ29sdW1uR3JpZE1hcmdpbkJvdHRvbVdoZW5DbGVhcmVkRmxvYXQ7XG5cbiAgICAgICAgJltkYXRhLWJnZS1lbXB0eT0nMSddIHtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCxcbiAgICAgICZbY2xhc3MqPSdiZ3Qtc3AtZ3JpZCddIHtcbiAgICAgICAgW2RhdGEtYmd0XSA+IDpsYXN0LWNoaWxkIHtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpudGgtY2hpbGQoMSkge1xuICAgICAgLyogNOWIl+ODluODreODg+OCr+WGheOBruOCs+ODs+ODhuODiiAqL1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgcGFkZGluZy1yaWdodDogbWF0aC5kaXYoJG11bHRpQ29sdW1uR3JpZE1hcmdpbiAqIDQsIDUpO1xuXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpudGgtY2hpbGQoMikge1xuICAgICAgLyogNOWIl+ODluODreODg+OCr+WGheOBruOCs+ODs+ODhuODiiAqL1xuICAgICAgcGFkZGluZy1sZWZ0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luICogMSwgNSk7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luICogMywgNSk7XG5cbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRicmVha1BvaW50KSB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm50aC1jaGlsZCgzKSB7XG4gICAgICAvKiA05YiX44OW44Ot44OD44Kv5YaF44Gu44Kz44Oz44OG44OKICovXG4gICAgICBwYWRkaW5nLWxlZnQ6IG1hdGguZGl2KCRtdWx0aUNvbHVtbkdyaWRNYXJnaW4gKiAyLCA1KTtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IG1hdGguZGl2KCRtdWx0aUNvbHVtbkdyaWRNYXJnaW4gKiAyLCA1KTtcblxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6bnRoLWNoaWxkKDQpIHtcbiAgICAgIC8qIDTliJfjg5bjg63jg4Pjgq/lhoXjga7jgrPjg7Pjg4bjg4ogKi9cbiAgICAgIHBhZGRpbmctbGVmdDogbWF0aC5kaXYoJG11bHRpQ29sdW1uR3JpZE1hcmdpbiAqIDMsIDUpO1xuICAgICAgcGFkZGluZy1yaWdodDogbWF0aC5kaXYoJG11bHRpQ29sdW1uR3JpZE1hcmdpbiAqIDEsIDUpO1xuXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpudGgtY2hpbGQoNSkge1xuICAgICAgLyogNOWIl+ODluODreODg+OCr+WGheOBruOCs+ODs+ODhuODiiAqL1xuICAgICAgcGFkZGluZy1sZWZ0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luICogNCwgNSk7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIEJ1cmdlckVkaXRvciBTdHlsZVNoZWV0IFN0eWxlXG4gKi9cblxuLmJndC1ib3hfX2NhcHRpb24ge1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBwYWRkaW5nOiAzcHg7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG59XG5cbi5iZ3QtYnRuIHtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBwYWRkaW5nOiAxMnB4IDEwcHg7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIG1pbi13aWR0aDogMjgwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcblxuICAmOmFjdGl2ZSxcbiAgJjpmb2N1cyB7XG4gICAgYm94LXNoYWRvdzogMCAwIDEwcHggMCAkYnRuR2xvd0NvbG9yLCAwIDAgMTBweCAwICNmZmY7XG4gIH1cbn1cblxuLmJndC1idG4tLWxpbmsgLyog5pen44K744Os44Kv44K/ICovXG4sXG5bZGF0YS1iZ3QtYnV0dG9uLWtpbmQ9J2xpbmsnXSAuYmd0LWJ0biAvKiDmlrDjgrvjg6zjgq/jgr8gKi9cbntcbiAgJGNvbG9yOiAjMzMzO1xuICAkYkNvbG9yOiAjY2NjO1xuICAkYmdDb2xvcjogI2ZmZjtcbiAgJGJnQ29sb3JIb3ZlcjogI2U5ZTllOTtcbiAgY29sb3I6ICRjb2xvcjtcbiAgYm9yZGVyLWNvbG9yOiAkYkNvbG9yO1xuICBiYWNrZ3JvdW5kOiAkYmdDb2xvcjtcblxuICAmOmhvdmVyLFxuICAmOmFjdGl2ZSxcbiAgJjpmb2N1cyB7XG4gICAgYmFja2dyb3VuZDogJGJnQ29sb3JIb3ZlcjtcbiAgfVxufVxuXG4uYmd0LWJ0bi0tZW0gLyog5pen44K744Os44Kv44K/ICovXG4sXG5bZGF0YS1iZ3QtYnV0dG9uLWtpbmQ9J2VtJ10gLmJndC1idG4gLyog5paw44K744Os44Kv44K/ICovXG57XG4gICRjb2xvcjogI2ZmZjtcbiAgJGJDb2xvcjogIzMzMztcbiAgJGJnQ29sb3I6ICMzMzM7XG4gICRiZ0NvbG9ySG92ZXI6ICM1NTU7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogJGNvbG9yO1xuICBib3JkZXItY29sb3I6ICRiQ29sb3I7XG4gIGJhY2tncm91bmQ6ICRiZ0NvbG9yO1xuXG4gICY6aG92ZXIsXG4gICY6YWN0aXZlLFxuICAmOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmdDb2xvckhvdmVyO1xuICB9XG59XG5cbi5iZ3QtYnRuLS1leHRlcm5hbCAvKiDml6fjgrvjg6zjgq/jgr8gKi9cbixcbltkYXRhLWJndC1idXR0b24ta2luZD0nZXh0ZXJuYWwnXSAuYmd0LWJ0biAvKiDmlrDjgrvjg6zjgq/jgr8gKi9cbntcbiAgJGNvbG9yOiAjMzMzO1xuICAkYkNvbG9yOiAjY2NjO1xuICAkYmdDb2xvcjogI2ZmZjtcbiAgJGJnQ29sb3JIb3ZlcjogI2U5ZTllOTtcbiAgY29sb3I6ICRjb2xvcjtcbiAgYm9yZGVyLWNvbG9yOiAkYkNvbG9yO1xuICBiYWNrZ3JvdW5kOiAkYmdDb2xvcjtcblxuICAmOmhvdmVyLFxuICAmOmFjdGl2ZSxcbiAgJjpmb2N1cyB7XG4gICAgYmFja2dyb3VuZDogJGJnQ29sb3JIb3ZlcjtcbiAgfVxuXG4gICY6OmFmdGVyIHtcbiAgICBAaW5jbHVkZSBiZ2UtaWNvbjtcbiAgICBjb250ZW50OiAnXFxmMDhlJztcbiAgICBmb250LXNpemU6IDFlbTtcbiAgICBjb2xvcjogIzk5OTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG59XG5cbi5iZ3QtYnRuLS1iYWNrIC8qIOaXp+OCu+ODrOOCr+OCvyAqL1xuLFxuW2RhdGEtYmd0LWJ1dHRvbi1raW5kPSdiYWNrJ10gLmJndC1idG4gLyog5paw44K744Os44Kv44K/ICovXG57XG4gICRjb2xvcjogIzMzMztcbiAgJGJDb2xvcjogI2RkZDtcbiAgJGJnQ29sb3I6ICNkZGQ7XG4gICRiZ0NvbG9ySG92ZXI6ICNlOWU5ZTk7XG4gIGNvbG9yOiAkY29sb3I7XG4gIGJvcmRlci1jb2xvcjogJGJDb2xvcjtcbiAgYmFja2dyb3VuZDogJGJnQ29sb3I7XG5cbiAgJjpob3ZlcixcbiAgJjphY3RpdmUsXG4gICY6Zm9jdXMge1xuICAgIGJhY2tncm91bmQ6ICRiZ0NvbG9ySG92ZXI7XG4gIH1cblxuICBzcGFuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuXG4gICY6OmJlZm9yZSB7XG4gICAgQGluY2x1ZGUgYmdlLWljb247XG4gICAgY29udGVudDogJ1xcZjA1Myc7XG4gICAgZm9udC1zaXplOiAxZW07XG4gICAgbWFyZ2luLXRvcDogLTJweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxufVxuXG4uYmd0LWhyIHtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG5cbltkYXRhLWJndC1oci1raW5kPSdkYXNoZWQnXSAuYmd0LWhyIHtcbiAgaGVpZ2h0OiAwO1xuICBib3JkZXI6IG5vbmU7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGJvcmRlci1ib3R0b206IDJweCBkYXNoZWQgY3VycmVudENvbG9yO1xufVxuXG4uYmd0LWhyLS1ib2xkIC8qIOaXp+OCu+ODrOOCr+OCvyAqL1xuLFxuW2RhdGEtYmd0LWhyLWtpbmQ9J2JvbGQnXSAuYmd0LWhyIC8qIOaWsOOCu+ODrOOCr+OCvyAqL1xue1xuICBoZWlnaHQ6IDVweDtcbn1cblxuLmJndC1oci0tbmFycm93IC8qIOaXp+OCu+ODrOOCr+OCvyAqL1xuLFxuW2RhdGEtYmd0LWhyLWtpbmQ9J25hcnJvdyddIC5iZ3QtaHIgLyog5paw44K744Os44Kv44K/ICovXG57XG4gIGhlaWdodDogMXB4O1xufVxuXG4uYmd0LWhyLS1zaG9ydCAvKiDml6fjgrvjg6zjgq/jgr8gKi9cbixcbltkYXRhLWJndC1oci1raW5kPSdzaG9ydCddIC5iZ3QtaHIgLyog5paw44K744Os44Kv44K/ICovXG57XG4gIHdpZHRoOiA2MCU7XG4gIGhlaWdodDogMXB4O1xufVxuXG4uYmd0LWRvd25sb2FkLWZpbGVfX2xpbmsge1xuICBjb2xvcjogIzMzMztcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgZm9udC1zaXplOiAxLjA4ZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDAuN2VtIDFlbTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBsaW5lLWhlaWdodDogMTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7XG4gIH1cblxuICAmOmFjdGl2ZSxcbiAgJjpmb2N1cyB7XG4gICAgYm94LXNoYWRvdzogMCAwIDVweCAxcHggJGJ0bkdsb3dDb2xvcjtcbiAgICBvdXRsaW5lOiBub25lO1xuICB9XG59XG5cbi5iZ3QtbGlua19fc2l6ZSB7XG4gIGNvbG9yOiAjODA4MDgwO1xuICBmb250LXNpemU6IDAuOGVtO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xufVxuXG4uYmd0LWdvb2dsZS1tYXBzLWxpbmsge1xuICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgcGFkZGluZzogMWVtO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBjb2xvcjogIzMzMztcbiAgICBib3JkZXI6IHNvbGlkIDFweCAjOTk5O1xuICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICBzcGFuIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgQGluY2x1ZGUgYmdlLWljb247XG4gICAgICBjb250ZW50OiAnXFxmMDhlJztcbiAgICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG4gIH1cbn1cblxuW2RhdGEtYmd0PSdnYWxsZXJ5J10ge1xuICAkdGh1bWItc2l6ZTogNjBweDtcblxuICAuYmd0LWdhbGxlcnkge1xuICAgIHBhZGRpbmctdG9wOiA1NCU7XG5cbiAgICAmOmhvdmVyICYtY3RybCB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cblxuICAgICZfX2ltZyB7XG4gICAgICBpbWcge1xuICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19jYXB0aW9uIHtcbiAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjYpO1xuICAgICAgcGFkZGluZzogMC43ZW0gMWVtO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cblxuICAgICYtY3RybCB7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDIwMG1zIGVhc2UtaW47XG5cbiAgICAgICZfX3ByZXYsXG4gICAgICAmX19uZXh0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICAgIG1hcmdpbjogLTIwcHggMCAwO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7XG5cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgICB9XG5cbiAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNwYW4ge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgd2lkdGg6IDA7XG4gICAgICAgICAgaGVpZ2h0OiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIHdpZHRoOiA0MHB4O1xuICAgICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgICAgICBib3JkZXI6IHNvbGlkICNmZmY7XG4gICAgICAgICAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDAgMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX19wcmV2IHtcbiAgICAgICAgbGVmdDogMjBweDtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTEzNWRlZyk7XG4gICAgICB9XG5cbiAgICAgICZfX25leHQge1xuICAgICAgICByaWdodDogMjBweDtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFtkYXRhLWdhbGxlcnktbWFya2VyPSd0aHVtYnMnXSB7XG4gICAgKyAuYmd0LWdhbGxlcnktbWFya2VyIHtcbiAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG5cbiAgICAgIGxpIHtcbiAgICAgICAgbWFyZ2luOiAwIDVweDtcbiAgICAgICAgd2lkdGg6ICR0aHVtYi1zaXplO1xuICAgICAgICBoZWlnaHQ6ICR0aHVtYi1zaXplO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFtkYXRhLWdhbGxlcnktbWFya2VyPSdkb3QnXSB7XG4gICAgKyAuYmd0LWdhbGxlcnktbWFya2VyIHtcbiAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG5cbiAgICAgIGxpIHtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgd2lkdGg6IDEwcHg7XG4gICAgICAgIGhlaWdodDogMTBweDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzk5OTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTtcblxuICAgICAgICAmLmN1cnJlbnQge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiDjg4fjg5DjgqTjgrnkvp3lrZjmsY7nlKjjgq/jg6njgrkgKi9cbi5wYy1vbmx5IHtcbiAgZGlzcGxheTogYmxvY2s7XG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi5zcC1vbmx5IHtcbiAgZGlzcGxheTogbm9uZTtcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG5cbiJdfQ== */
\ No newline at end of file
+/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNzcy9iZ2Vfc3R5bGUuY3NzIiwiY3NzL2JnZV9zdHlsZS5zY3NzIiwiY3NzL2NvbW1vbi9fZWRpdG9yLnNjc3MiLCJjc3MvY29tbW9uL19iZ2Vfc2V0dGluZy5zY3NzIiwiY3NzL2NvbW1vbi9fYmdlLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCO0FDQ2hCOzs7Ozs7OztFQUFBO0FBVUE7OztFQUFBO0FDWEE7O0VBQUE7QUFNQTtFQUNFLGFBQUE7QUZZRjtBRVRBO2lEQUFBO0FBR0E7OztFQUdFLCtGQUFBO0VBQ0EsV0FBQTtBRldGO0FFVEU7OztFQUNFLGVBQUE7RUFDQSxtQkFBQTtFQUNBLGlCQUFBO0FGYUo7QUVWRTs7O0VBQ0Usd0xBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBQ0EsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxnQkFBQTtBRmNKO0FFYkk7OztFQUNFLGFBQUE7QUZpQk47QUViRTs7O0VBQ0UscUJBQUE7RUFDQSx1QkFBQTtFQUNBLGVBQUE7RUFDQSxnQkFBQTtFQUNBLG1CQUFBO0VBQ0EsbUJBQUE7RUFDQSxtQkFBQTtFQUNBLGdCQUFBO0FGaUJKO0FFZkk7OztFQUNFLGFBQUE7QUZtQk47QUVmRTs7O0VBQ0UsOEJBQUE7RUFDQSxlQUFBO0VBQ0Esb0JBQUE7RUFDQSxpQkFBQTtFQUNBLGVBQUE7RUFDQSxxQkFBQTtFQUNBLGdCQUFBO0VBQ0Esa0JBQUE7QUZtQko7QUVqQkk7OztFQUNFLGFBQUE7QUZxQk47QUVqQkU7OztFQUNFLGdCQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtFQUNBLGFBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0FGcUJKO0FFbkJJOzs7RUFDRSxhQUFBO0FGdUJOO0FFbkJFOzs7RUFDRSxjQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtFQUNBLGFBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxn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QUpnc0JSO0FJOXJCUTtFQUNFLHNCQUFBO0FKZ3NCVjtBSXhyQkEsZ0JBQUE7QUFDQTtFQUNFLGNBQUE7QUoyckJGO0FJenJCRTtFQUhGO0lBSUksYUFBQTtFSjRyQkY7QUFDRjtBSXpyQkE7RUFDRSxhQUFBO0FKNHJCRjtBSTFyQkU7RUFIRjtJQUlJLGNBQUE7RUo2ckJGO0FBQ0YiLCJmaWxlIjoiY3NzL2JnZV9zdHlsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIGJhc2VyQ01TIDogIEJhc2VkIFdlYnNpdGUgRGV2ZWxvcG1lbnQgUHJvamVjdCA8aHR0cHM6Ly9iYXNlcmNtcy5uZXQ+XG4gKiBDb3B5cmlnaHQgKGMpIE5QTyBiYXNlciBmb3VuZGF0aW9uIDxodHRwczovL2Jhc2VyZm91bmRhdGlvbi5vcmcvPlxuICpcbiAqIEBjb3B5cmlnaHQgICAgIENvcHlyaWdodCAoYykgTlBPIGJhc2VyIGZvdW5kYXRpb25cbiAqIEBsaW5rICAgICAgICAgIGh0dHBzOi8vYmFzZXJjbXMubmV0IGJhc2VyQ01TIFByb2plY3RcbiAqIEBzaW5jZSAgICAgICAgIDUuMC4wXG4gKiBAbGljZW5zZSAgICAgICBodHRwczovL2Jhc2VyY21zLm5ldC9saWNlbnNlL2luZGV4Lmh0bWwgTUlUIExpY2Vuc2VcbiAqL1xuLyoqXG4gKiDjg5Djg7zjgqzjg7zjgqjjg4fjgqPjgr/jg7zjgrnjgr/jgqTjg6tcbiAqIOeuoeeQhueUu+mdouOBp+OCguWRvOOBs+WHuuOBleOCjOOCi1xuICovXG4vKipcbiAqIOOCqOODh+OCo+OCv+ODvOeUqENTU1xuICovXG4uY2tlX2VkaXRhYmxlIHtcbiAgcGFkZGluZzogMTVweDtcbn1cblxuLyogRWRpdG9yIFBhcnRzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLmJzLW1haW4tY29udGVudHMsXG4uYmdlLWNvbnRlbnRzLFxuLmNrZV9lZGl0YWJsZSB7XG4gIGZvbnQtZmFtaWx5OiBBcmlhbCwgVmVyZGFuYSwgXCLmuLjjgrTjgrfjg4Pjgq9cIiwgWXVHb3RoaWMsIFwiSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvTlwiLCBNZWlyeW8sIHNhbnMtc2VyaWY7XG4gIGNvbG9yOiAjMDAwO1xufVxuLmJzLW1haW4tY29udGVudHMgaDEsXG4uYmdlLWNvbnRlbnRzIGgxLFxuLmNrZV9lZGl0YWJsZSBoMSB7XG4gIGZvbnQtc2l6ZTogNDBweDtcbiAgbWFyZ2luLWJvdHRvbTogNDBweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4uYnMtbWFpbi1jb250ZW50cyBoMixcbi5iZ2UtY29udGVudHMgaDIsXG4uY2tlX2VkaXRhYmxlIGgyIHtcbiAgZm9udC1mYW1pbHk6IFwiU0YgUHJvIEpQXCIsIFwiU0YgUHJvIFRleHRcIiwgXCJTRiBQcm8gSWNvbnNcIiwgXCJIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm9cIiwgXCLjg5Ljg6njgq7jg47op5LjgrQgUHJvIFczXCIsIFwi44Oh44Kk44Oq44KqXCIsIFwiTWVpcnlvXCIsIFwi77yt77yzIO+8sOOCtOOCt+ODg+OCr1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIFwiSGVsdmV0aWNhXCIsIFwiQXJpYWxcIiwgXCJzYW5zLXNlcmlmXCI7XG4gIGxldHRlci1zcGFjaW5nOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBmb250LXNpemU6IDIuMmVtO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgbWFyZ2luOiAwLjZlbSAwO1xuICBwYWRkaW5nOiAwLjNlbSAwO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBiYWNrZ3JvdW5kOiBub25lO1xufVxuLmJzLW1haW4tY29udGVudHMgaDI6Zmlyc3QtY2hpbGQsXG4uYmdlLWNvbnRlbnRzIGgyOmZpcnN0LWNoaWxkLFxuLmNrZV9lZGl0YWJsZSBoMjpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4uYnMtbWFpbi1jb250ZW50cyBoMyxcbi5iZ2UtY29udGVudHMgaDMsXG4uY2tlX2VkaXRhYmxlIGgzIHtcbiAgbWFyZ2luOiA1NnB4IDAgMjBweCAwO1xuICBwYWRkaW5nOiAxM3B4IDI4cHggMTJweDtcbiAgZm9udC1zaXplOiAyMXB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICBsaW5lLWhlaWdodDogNDguM3B4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmJzLW1haW4tY29udGVudHMgaDM6Zmlyc3QtY2hpbGQsXG4uYmdlLWNvbnRlbnRzIGgzOmZpcnN0LWNoaWxkLFxuLmNrZV9lZGl0YWJsZSBoMzpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4uYnMtbWFpbi1jb250ZW50cyBoNCxcbi5iZ2UtY29udGVudHMgaDQsXG4uY2tlX2VkaXRhYmxlIGg0IHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4ICNDQ0MgZG90dGVkO1xuICBmb250LXNpemU6IDIycHg7XG4gIHBhZGRpbmctYm90dG9tOiAxMnB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBtYXJnaW46IDUwcHggMCAxN3B4IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGg0OmZpcnN0LWNoaWxkLFxuLmJnZS1jb250ZW50cyBoNDpmaXJzdC1jaGlsZCxcbi5ja2VfZWRpdGFibGUgaDQ6Zmlyc3QtY2hpbGQge1xuICBtYXJnaW4tdG9wOiAwO1xufVxuLmJzLW1haW4tY29udGVudHMgaDUsXG4uYmdlLWNvbnRlbnRzIGg1LFxuLmNrZV9lZGl0YWJsZSBoNSB7XG4gIGZvbnQtc2l6ZTogMS4yZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBsaW5lLWhlaWdodDogMS4yO1xuICBtYXJnaW46IDFlbSAwO1xuICBwYWRkaW5nOiAwLjNlbSAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmJzLW1haW4tY29udGVudHMgaDU6Zmlyc3QtY2hpbGQsXG4uYmdlLWNvbnRlbnRzIGg1OmZpcnN0LWNoaWxkLFxuLmNrZV9lZGl0YWJsZSBoNTpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4uYnMtbWFpbi1jb250ZW50cyBoNixcbi5iZ2UtY29udGVudHMgaDYsXG4uY2tlX2VkaXRhYmxlIGg2IHtcbiAgZm9udC1zaXplOiAxZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBsaW5lLWhlaWdodDogMS4yO1xuICBtYXJnaW46IDFlbSAwO1xuICBib3JkZXI6IG5vbmU7XG4gIHBhZGRpbmc6IDAuM2VtIDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uYnMtbWFpbi1jb250ZW50cyBoNjpmaXJzdC1jaGlsZCxcbi5iZ2UtY29udGVudHMgaDY6Zmlyc3QtY2hpbGQsXG4uY2tlX2VkaXRhYmxlIGg2OmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHN0cm9uZyxcbi5iZ2UtY29udGVudHMgc3Ryb25nLFxuLmNrZV9lZGl0YWJsZSBzdHJvbmcge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4uYnMtbWFpbi1jb250ZW50cyB1LFxuLmJnZS1jb250ZW50cyB1LFxuLmNrZV9lZGl0YWJsZSB1IHtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHMsXG4uYmdlLWNvbnRlbnRzIHMsXG4uY2tlX2VkaXRhYmxlIHMge1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO1xufVxuLmJzLW1haW4tY29udGVudHMgZW0sXG4uYmdlLWNvbnRlbnRzIGVtLFxuLmNrZV9lZGl0YWJsZSBlbSB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cbi5icy1tYWluLWNvbnRlbnRzIGhyLFxuLmJnZS1jb250ZW50cyBocixcbi5ja2VfZWRpdGFibGUgaHIge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxcHg7XG4gIGNvbG9yOiAjZGRkO1xuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgbWFyZ2luOiA1MHB4IGF1dG87XG59XG4uYnMtbWFpbi1jb250ZW50cyBocjpmaXJzdC1jaGlsZCxcbi5iZ2UtY29udGVudHMgaHI6Zmlyc3QtY2hpbGQsXG4uY2tlX2VkaXRhYmxlIGhyOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHVsLFxuLmJnZS1jb250ZW50cyB1bCxcbi5ja2VfZWRpdGFibGUgdWwge1xuICBtYXJnaW46IDIwcHggMCAzNnB4IDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjY7XG4gIGxldHRlci1zcGFjaW5nOiAwLjA1cmVtO1xufVxuLmJzLW1haW4tY29udGVudHMgdWw6Zmlyc3QtY2hpbGQsXG4uYmdlLWNvbnRlbnRzIHVsOmZpcnN0LWNoaWxkLFxuLmNrZV9lZGl0YWJsZSB1bDpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4uYnMtbWFpbi1jb250ZW50cyB1bCBsaSxcbi5iZ2UtY29udGVudHMgdWwgbGksXG4uY2tlX2VkaXRhYmxlIHVsIGxpIHtcbiAgbGlzdC1zdHlsZS1wb3NpdGlvbjogaW5zaWRlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6IDAgMCAwIDI1cHg7XG4gIG1hcmdpbjogMC41ZW0gMCAwLjVlbSAwO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG59XG4uYnMtbWFpbi1jb250ZW50cyB1bCBsaSBhLFxuLmJnZS1jb250ZW50cyB1bCBsaSBhLFxuLmNrZV9lZGl0YWJsZSB1bCBsaSBhIHtcbiAgem9vbTogMTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHVsIGxpOmJlZm9yZSxcbi5iZ2UtY29udGVudHMgdWwgbGk6YmVmb3JlLFxuLmNrZV9lZGl0YWJsZSB1bCBsaTpiZWZvcmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDlweDtcbiAgbGVmdDogMXB4O1xuICB3aWR0aDogNnB4O1xuICBoZWlnaHQ6IDZweDtcbiAgYmFja2dyb3VuZDogIzE4MTgxODtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xufVxuLmJzLW1haW4tY29udGVudHMgdWwgdWwsXG4uYmdlLWNvbnRlbnRzIHVsIHVsLFxuLmNrZV9lZGl0YWJsZSB1bCB1bCB7XG4gIG1hcmdpbjogMCAwIDAgMS44ZW07XG59XG4uYnMtbWFpbi1jb250ZW50cyB1bCB1bDpmaXJzdC1jaGlsZCxcbi5iZ2UtY29udGVudHMgdWwgdWw6Zmlyc3QtY2hpbGQsXG4uY2tlX2VkaXRhYmxlIHVsIHVsOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5icy1tYWluLWNvbnRlbnRzIG9sLFxuLmJnZS1jb250ZW50cyBvbCxcbi5ja2VfZWRpdGFibGUgb2wge1xuICBtYXJnaW46IDIwcHggMCAzNnB4IDEuOGVtO1xuICBsaW5lLWhlaWdodDogMS42O1xuICBsZXR0ZXItc3BhY2luZzogMC4wNXJlbTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIG9sIG9sLFxuLmJnZS1jb250ZW50cyBvbCBvbCxcbi5ja2VfZWRpdGFibGUgb2wgb2wge1xuICBtYXJnaW46IDIwcHg7XG59XG4uYnMtbWFpbi1jb250ZW50cyBvbCBsaSxcbi5iZ2UtY29udGVudHMgb2wgbGksXG4uY2tlX2VkaXRhYmxlIG9sIGxpIHtcbiAgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsLWxlYWRpbmctemVybztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAwIDAgMCAwO1xuICBtYXJnaW46IDAuNWVtIDAgMC41ZW0gMDtcbiAgbGluZS1oZWlnaHQ6IDEuNjtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHAsXG4uYmdlLWNvbnRlbnRzIHAsXG4uY2tlX2VkaXRhYmxlIHAge1xuICBtYXJnaW46IDFlbSAwO1xuICBsZXR0ZXItc3BhY2luZzogMC4wNXJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgbGluZS1oZWlnaHQ6IDIuMztcbn1cbi5icy1tYWluLWNvbnRlbnRzIHRhYmxlLFxuLmJnZS1jb250ZW50cyB0YWJsZSxcbi5ja2VfZWRpdGFibGUgdGFibGUge1xuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICBib3JkZXItc3BhY2luZzogMDtcbiAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2UxZTFlMTtcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2UxZTFlMTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlMWUxZTE7XG4gIG1hcmdpbjogMjBweCAwIDIwcHggMDtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIC5icy1tYWluLWNvbnRlbnRzIHRhYmxlLFxuICAuYmdlLWNvbnRlbnRzIHRhYmxlLFxuICAuY2tlX2VkaXRhYmxlIHRhYmxlIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuLmJzLW1haW4tY29udGVudHMgdGFibGU6Zmlyc3QtY2hpbGQsXG4uYmdlLWNvbnRlbnRzIHRhYmxlOmZpcnN0LWNoaWxkLFxuLmNrZV9lZGl0YWJsZSB0YWJsZTpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4uYnMtbWFpbi1jb250ZW50cyB0YWJsZSBjYXB0aW9uLFxuLmJnZS1jb250ZW50cyB0YWJsZSBjYXB0aW9uLFxuLmNrZV9lZGl0YWJsZSB0YWJsZSBjYXB0aW9uIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkge1xuICAuYnMtbWFpbi1jb250ZW50cyB0YWJsZSBjYXB0aW9uLFxuICAuYmdlLWNvbnRlbnRzIHRhYmxlIGNhcHRpb24sXG4gIC5ja2VfZWRpdGFibGUgdGFibGUgY2FwdGlvbiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIC5icy1tYWluLWNvbnRlbnRzIHRhYmxlIHRib2R5LFxuICAuYnMtbWFpbi1jb250ZW50cyB0YWJsZSB0Zm9vdCxcbiAgLmJnZS1jb250ZW50cyB0YWJsZSB0Ym9keSxcbiAgLmJnZS1jb250ZW50cyB0YWJsZSB0Zm9vdCxcbiAgLmNrZV9lZGl0YWJsZSB0YWJsZSB0Ym9keSxcbiAgLmNrZV9lZGl0YWJsZSB0YWJsZSB0Zm9vdCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cbi5icy1tYWluLWNvbnRlbnRzIHRhYmxlIHRyLFxuLmJnZS1jb250ZW50cyB0YWJsZSB0cixcbi5ja2VfZWRpdGFibGUgdGFibGUgdHIge1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2UxZTFlMTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIC5icy1tYWluLWNvbnRlbnRzIHRhYmxlIHRyLFxuICAuYmdlLWNvbnRlbnRzIHRhYmxlIHRyLFxuICAuY2tlX2VkaXRhYmxlIHRhYmxlIHRyIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tdG9wOiAtMXB4O1xuICB9XG59XG4uYnMtbWFpbi1jb250ZW50cyB0YWJsZSB0cjpudGgtY2hpbGQob2RkKSB0ZCxcbi5iZ2UtY29udGVudHMgdGFibGUgdHI6bnRoLWNoaWxkKG9kZCkgdGQsXG4uY2tlX2VkaXRhYmxlIHRhYmxlIHRyOm50aC1jaGlsZChvZGQpIHRkIHtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHRhYmxlIHRyIHRoLFxuLmJzLW1haW4tY29udGVudHMgdGFibGUgdHIgdGQsXG4uYmdlLWNvbnRlbnRzIHRhYmxlIHRyIHRoLFxuLmJnZS1jb250ZW50cyB0YWJsZSB0ciB0ZCxcbi5ja2VfZWRpdGFibGUgdGFibGUgdHIgdGgsXG4uY2tlX2VkaXRhYmxlIHRhYmxlIHRyIHRkIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgcGFkZGluZzogMjZweCAyNHB4O1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNlMWUxZTE7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkge1xuICAuYnMtbWFpbi1jb250ZW50cyB0YWJsZSB0ciB0aCxcbiAgLmJzLW1haW4tY29udGVudHMgdGFibGUgdHIgdGQsXG4gIC5iZ2UtY29udGVudHMgdGFibGUgdHIgdGgsXG4gIC5iZ2UtY29udGVudHMgdGFibGUgdHIgdGQsXG4gIC5ja2VfZWRpdGFibGUgdGFibGUgdHIgdGgsXG4gIC5ja2VfZWRpdGFibGUgdGFibGUgdHIgdGQge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG4uYnMtbWFpbi1jb250ZW50cyB0YWJsZSB0ciB0aCxcbi5iZ2UtY29udGVudHMgdGFibGUgdHIgdGgsXG4uY2tlX2VkaXRhYmxlIHRhYmxlIHRyIHRoIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGZvbnQtZmFtaWx5OiBcIlNGIFBybyBKUFwiLCBcIlNGIFBybyBUZXh0XCIsIFwiU0YgUHJvIEljb25zXCIsIFwiSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvXCIsIFwi44OS44Op44Ku44OO6KeS44K0IFBybyBXM1wiLCBcIuODoeOCpOODquOCqlwiLCBcIk1laXJ5b1wiLCBcIu+8re+8syDvvLDjgrTjgrfjg4Pjgq9cIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBcIkhlbHZldGljYVwiLCBcIkFyaWFsXCIsIFwic2Fucy1zZXJpZlwiO1xuICBiYWNrZ3JvdW5kOiAjZjNmM2YzO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLmJzLW1haW4tY29udGVudHMgdGFibGUgdHIgdGgsXG4gIC5iZ2UtY29udGVudHMgdGFibGUgdHIgdGgsXG4gIC5ja2VfZWRpdGFibGUgdGFibGUgdHIgdGgge1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gIH1cbn1cbi5icy1tYWluLWNvbnRlbnRzIHRhYmxlIHRyIHRkLFxuLmJnZS1jb250ZW50cyB0YWJsZSB0ciB0ZCxcbi5ja2VfZWRpdGFibGUgdGFibGUgdHIgdGQge1xuICBmb250LXdlaWdodDogbm9ybWFsO1xufVxuLmJzLW1haW4tY29udGVudHMgdGFibGUgdHIgdGQgdWwsXG4uYmdlLWNvbnRlbnRzIHRhYmxlIHRyIHRkIHVsLFxuLmNrZV9lZGl0YWJsZSB0YWJsZSB0ciB0ZCB1bCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGZpZWxkc2V0LFxuLmJnZS1jb250ZW50cyBmaWVsZHNldCxcbi5ja2VfZWRpdGFibGUgZmllbGRzZXQge1xuICBib3JkZXI6IDA7XG59XG4uYnMtbWFpbi1jb250ZW50cyBpbWcsXG4uYmdlLWNvbnRlbnRzIGltZyxcbi5ja2VfZWRpdGFibGUgaW1nIHtcbiAgYm9yZGVyOiAwO1xuICBtYXJnaW46IGF1dG87XG59XG4uYnMtbWFpbi1jb250ZW50cyBhZGRyZXNzLCAuYnMtbWFpbi1jb250ZW50cyBidXR0b24sIC5icy1tYWluLWNvbnRlbnRzIGNhcHRpb24sIC5icy1tYWluLWNvbnRlbnRzIGNpdGUsIC5icy1tYWluLWNvbnRlbnRzIGNvZGUsIC5icy1tYWluLWNvbnRlbnRzIGRmbiwgLmJzLW1haW4tY29udGVudHMgZW0sIC5icy1tYWluLWNvbnRlbnRzIGlucHV0LCAuYnMtbWFpbi1jb250ZW50cyBvcHRncm91cCwgLmJzLW1haW4tY29udGVudHMgb3B0aW9uLCAuYnMtbWFpbi1jb250ZW50cyBzZWxlY3QsIC5icy1tYWluLWNvbnRlbnRzIHN0cm9uZywgLmJzLW1haW4tY29udGVudHMgdGV4dGFyZWEsIC5icy1tYWluLWNvbnRlbnRzIHRoLCAuYnMtbWFpbi1jb250ZW50cyB2YXIsXG4uYmdlLWNvbnRlbnRzIGFkZHJlc3MsXG4uYmdlLWNvbnRlbnRzIGJ1dHRvbixcbi5iZ2UtY29udGVudHMgY2FwdGlvbixcbi5iZ2UtY29udGVudHMgY2l0ZSxcbi5iZ2UtY29udGVudHMgY29kZSxcbi5iZ2UtY29udGVudHMgZGZuLFxuLmJnZS1jb250ZW50cyBlbSxcbi5iZ2UtY29udGVudHMgaW5wdXQsXG4uYmdlLWNvbnRlbnRzIG9wdGdyb3VwLFxuLmJnZS1jb250ZW50cyBvcHRpb24sXG4uYmdlLWNvbnRlbnRzIHNlbGVjdCxcbi5iZ2UtY29udGVudHMgc3Ryb25nLFxuLmJnZS1jb250ZW50cyB0ZXh0YXJlYSxcbi5iZ2UtY29udGVudHMgdGgsXG4uYmdlLWNvbnRlbnRzIHZhcixcbi5ja2VfZWRpdGFibGUgYWRkcmVzcyxcbi5ja2VfZWRpdGFibGUgYnV0dG9uLFxuLmNrZV9lZGl0YWJsZSBjYXB0aW9uLFxuLmNrZV9lZGl0YWJsZSBjaXRlLFxuLmNrZV9lZGl0YWJsZSBjb2RlLFxuLmNrZV9lZGl0YWJsZSBkZm4sXG4uY2tlX2VkaXRhYmxlIGVtLFxuLmNrZV9lZGl0YWJsZSBpbnB1dCxcbi5ja2VfZWRpdGFibGUgb3B0Z3JvdXAsXG4uY2tlX2VkaXRhYmxlIG9wdGlvbixcbi5ja2VfZWRpdGFibGUgc2VsZWN0LFxuLmNrZV9lZGl0YWJsZSBzdHJvbmcsXG4uY2tlX2VkaXRhYmxlIHRleHRhcmVhLFxuLmNrZV9lZGl0YWJsZSB0aCxcbi5ja2VfZWRpdGFibGUgdmFyIHtcbiAgZm9udDogaW5oZXJpdDtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHNtYWxsLFxuLmJnZS1jb250ZW50cyBzbWFsbCxcbi5ja2VfZWRpdGFibGUgc21hbGwge1xuICBjb2xvcjogIzY2Njtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGRlbCwgLmJzLW1haW4tY29udGVudHMgaW5zLFxuLmJnZS1jb250ZW50cyBkZWwsXG4uYmdlLWNvbnRlbnRzIGlucyxcbi5ja2VfZWRpdGFibGUgZGVsLFxuLmNrZV9lZGl0YWJsZSBpbnMge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4uYnMtbWFpbi1jb250ZW50cyBhOmxpbmssIC5icy1tYWluLWNvbnRlbnRzIGE6dmlzaXRlZCxcbi5iZ2UtY29udGVudHMgYTpsaW5rLFxuLmJnZS1jb250ZW50cyBhOnZpc2l0ZWQsXG4uY2tlX2VkaXRhYmxlIGE6bGluayxcbi5ja2VfZWRpdGFibGUgYTp2aXNpdGVkIHtcbiAgY29sb3I6ICMyYjdiYjk7XG59XG4uYnMtbWFpbi1jb250ZW50cyBhOmhvdmVyLFxuLmJnZS1jb250ZW50cyBhOmhvdmVyLFxuLmNrZV9lZGl0YWJsZSBhOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLmJzLW1haW4tY29udGVudHMgY2FwdGlvbiwgLmJzLW1haW4tY29udGVudHMgdGgsXG4uYmdlLWNvbnRlbnRzIGNhcHRpb24sXG4uYmdlLWNvbnRlbnRzIHRoLFxuLmNrZV9lZGl0YWJsZSBjYXB0aW9uLFxuLmNrZV9lZGl0YWJsZSB0aCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4uYnMtbWFpbi1jb250ZW50cyBxOmJlZm9yZSwgLmJzLW1haW4tY29udGVudHMgcTphZnRlcixcbi5iZ2UtY29udGVudHMgcTpiZWZvcmUsXG4uYmdlLWNvbnRlbnRzIHE6YWZ0ZXIsXG4uY2tlX2VkaXRhYmxlIHE6YmVmb3JlLFxuLmNrZV9lZGl0YWJsZSBxOmFmdGVyIHtcbiAgY29udGVudDogXCJcIjtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGFiYnIsIC5icy1tYWluLWNvbnRlbnRzIGFjcm9ueW0sXG4uYmdlLWNvbnRlbnRzIGFiYnIsXG4uYmdlLWNvbnRlbnRzIGFjcm9ueW0sXG4uY2tlX2VkaXRhYmxlIGFiYnIsXG4uY2tlX2VkaXRhYmxlIGFjcm9ueW0ge1xuICBib3JkZXI6IDA7XG4gIGZvbnQtdmFyaWFudDogbm9ybWFsO1xufVxuLmJzLW1haW4tY29udGVudHMgc3ViLFxuLmJnZS1jb250ZW50cyBzdWIsXG4uY2tlX2VkaXRhYmxlIHN1YiB7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB2ZXJ0aWNhbC1hbGlnbjogc3ViO1xufVxuLmJzLW1haW4tY29udGVudHMgc3VwLFxuLmJnZS1jb250ZW50cyBzdXAsXG4uY2tlX2VkaXRhYmxlIHN1cCB7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB2ZXJ0aWNhbC1hbGlnbjogc3VwZXI7XG59XG4uYnMtbWFpbi1jb250ZW50cyBsZWdlbmQsXG4uYmdlLWNvbnRlbnRzIGxlZ2VuZCxcbi5ja2VfZWRpdGFibGUgbGVnZW5kIHtcbiAgY29sb3I6ICMwMDA7XG59XG4uYnMtbWFpbi1jb250ZW50cyBwcmUsXG4uYmdlLWNvbnRlbnRzIHByZSxcbi5ja2VfZWRpdGFibGUgcHJlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0YzRjNGMztcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgcGFkZGluZzogMTBweCAyMHB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBvdmVyZmxvdzogYXV0bztcbiAgYm9yZGVyOiAxcHggc29saWQgI0UyRTJFMjtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGJsb2NrcXVvdGUsXG4uYmdlLWNvbnRlbnRzIGJsb2NrcXVvdGUsXG4uY2tlX2VkaXRhYmxlIGJsb2NrcXVvdGUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbjogMWVtIDA7XG4gIHBhZGRpbmc6IDFweCAyLjVlbTtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBib3JkZXI6IDJweCBzb2xpZCAjY2NjO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjb2xvcjogIzg4ODtcbiAgZm9udC1zaXplOiAwLjllbTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGJsb2NrcXVvdGU6Zmlyc3QtY2hpbGQsXG4uYmdlLWNvbnRlbnRzIGJsb2NrcXVvdGU6Zmlyc3QtY2hpbGQsXG4uY2tlX2VkaXRhYmxlIGJsb2NrcXVvdGU6Zmlyc3QtY2hpbGQge1xuICBtYXJnaW4tdG9wOiAwO1xufVxuLmJzLW1haW4tY29udGVudHMgYmxvY2txdW90ZTo6YmVmb3JlLFxuLmJnZS1jb250ZW50cyBibG9ja3F1b3RlOjpiZWZvcmUsXG4uY2tlX2VkaXRhYmxlIGJsb2NrcXVvdGU6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi4oCcXCI7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LWZhbWlseTogc2VyaWY7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwLjNlbTtcbiAgbGVmdDogMC4yNWVtO1xuICB6LWluZGV4OiAwO1xuICBjb2xvcjogI2NjYztcbiAgZm9udC1zaXplOiAzZW07XG59XG4uYnMtbWFpbi1jb250ZW50cyBibG9ja3F1b3RlOjphZnRlcixcbi5iZ2UtY29udGVudHMgYmxvY2txdW90ZTo6YWZ0ZXIsXG4uY2tlX2VkaXRhYmxlIGJsb2NrcXVvdGU6OmFmdGVyIHtcbiAgY29udGVudDogXCLigJ1cIjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtZmFtaWx5OiBzZXJpZjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IC0wLjNlbTtcbiAgcmlnaHQ6IDAuMjVlbTtcbiAgei1pbmRleDogMDtcbiAgY29sb3I6ICNjY2M7XG4gIGZvbnQtc2l6ZTogM2VtO1xufVxuXG4vKiBGb3JtIFBhcnRzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLmJzLW1haW4tY29udGVudHMgZm9ybSxcbi5iZ2UtY29udGVudHMgZm9ybSxcbi5ja2VfZWRpdGFibGUgZm9ybSxcbi5icy1zdWItY29udGVudHMgZm9ybSB7XG4gIGRpc3BsYXk6IGlubGluZTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGlucHV0LCAuYnMtbWFpbi1jb250ZW50cyB0ZXh0YXJlYSwgLmJzLW1haW4tY29udGVudHMgc2VsZWN0LCAuYnMtbWFpbi1jb250ZW50cyBvcHRpb24sXG4uYmdlLWNvbnRlbnRzIGlucHV0LFxuLmJnZS1jb250ZW50cyB0ZXh0YXJlYSxcbi5iZ2UtY29udGVudHMgc2VsZWN0LFxuLmJnZS1jb250ZW50cyBvcHRpb24sXG4uY2tlX2VkaXRhYmxlIGlucHV0LFxuLmNrZV9lZGl0YWJsZSB0ZXh0YXJlYSxcbi5ja2VfZWRpdGFibGUgc2VsZWN0LFxuLmNrZV9lZGl0YWJsZSBvcHRpb24sXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0LFxuLmJzLXN1Yi1jb250ZW50cyB0ZXh0YXJlYSxcbi5icy1zdWItY29udGVudHMgc2VsZWN0LFxuLmJzLXN1Yi1jb250ZW50cyBvcHRpb24ge1xuICBmb250LWZhbWlseTogXCJTRiBQcm8gSlBcIiwgXCJTRiBQcm8gVGV4dFwiLCBcIlNGIFBybyBJY29uc1wiLCBcIkhpcmFnaW5vIEtha3UgR290aGljIFByb1wiLCBcIuODkuODqeOCruODjuinkuOCtCBQcm8gVzNcIiwgXCLjg6HjgqTjg6rjgqpcIiwgXCJNZWlyeW9cIiwgXCLvvK3vvLMg77yw44K044K344OD44KvXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgXCJIZWx2ZXRpY2FcIiwgXCJBcmlhbFwiLCBcInNhbnMtc2VyaWZcIjtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdLFxuLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT10ZXh0XSxcbi5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9ZW1haWxdLFxuLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT10ZWxdLFxuLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT1udW1iZXJdLFxuLmJzLW1haW4tY29udGVudHMgdGV4dGFyZWEsXG4uYnMtbWFpbi1jb250ZW50cyBzZWxlY3QsXG4uYmdlLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPXRleHRdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPWVtYWlsXSxcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT10ZWxdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPW51bWJlcl0sXG4uYmdlLWNvbnRlbnRzIHRleHRhcmVhLFxuLmJnZS1jb250ZW50cyBzZWxlY3QsXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9cGFzc3dvcmRdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPXRleHRdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPWVtYWlsXSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT10ZWxdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPW51bWJlcl0sXG4uY2tlX2VkaXRhYmxlIHRleHRhcmVhLFxuLmNrZV9lZGl0YWJsZSBzZWxlY3QsXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPXRleHRdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPWVtYWlsXSxcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT10ZWxdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPW51bWJlcl0sXG4uYnMtc3ViLWNvbnRlbnRzIHRleHRhcmVhLFxuLmJzLXN1Yi1jb250ZW50cyBzZWxlY3Qge1xuICBtYXJnaW46IDNweCAycHg7XG4gIHBhZGRpbmc6IDhweCAxMHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDtcbiAgLW1vei1ib3JkZXItcmFkaXVzOiAzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9Y2hlY2tib3hdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPWNoZWNrYm94XSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT1jaGVja2JveF0sXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0W3R5cGU9Y2hlY2tib3hdIHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9cmFkaW9dLCAuYnMtbWFpbi1jb250ZW50cyBpbnB1dFt0eXBlPWNoZWNrYm94XSxcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT1yYWRpb10sXG4uYmdlLWNvbnRlbnRzIGlucHV0W3R5cGU9Y2hlY2tib3hdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPXJhZGlvXSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT1jaGVja2JveF0sXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0W3R5cGU9cmFkaW9dLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPWNoZWNrYm94XSB7XG4gIG1hcmdpbi1sZWZ0OiA1cHg7XG4gIG1hcmdpbi1yaWdodDogNXB4O1xufVxuLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT1zdWJtaXRdLCAuYnMtbWFpbi1jb250ZW50cyBpbnB1dFt0eXBlPXJlc2V0XSwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT1idXR0b25dLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPXN1Ym1pdF0sXG4uYmdlLWNvbnRlbnRzIGlucHV0W3R5cGU9cmVzZXRdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPWJ1dHRvbl0sXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9c3VibWl0XSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT1yZXNldF0sXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9YnV0dG9uXSxcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT1zdWJtaXRdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPXJlc2V0XSxcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT1idXR0b25dIHtcbiAgbWFyZ2luOiAzcHggMnB4O1xuICBmb250LWZhbWlseTogXCJTRiBQcm8gSlBcIiwgXCJTRiBQcm8gVGV4dFwiLCBcIlNGIFBybyBJY29uc1wiLCBcIkhpcmFnaW5vIEtha3UgR290aGljIFByb1wiLCBcIuODkuODqeOCruODjuinkuOCtCBQcm8gVzNcIiwgXCLjg6HjgqTjg6rjgqpcIiwgXCJNZWlyeW9cIiwgXCLvvK3vvLMg77yw44K044K344OD44KvXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgXCJIZWx2ZXRpY2FcIiwgXCJBcmlhbFwiLCBcInNhbnMtc2VyaWZcIjtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdLCAuYnMtbWFpbi1jb250ZW50cyBpbnB1dFt0eXBlPXRleHRdLCAuYnMtbWFpbi1jb250ZW50cyBpbnB1dFt0eXBlPWVtYWlsXSwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT10ZWxdLCAuYnMtbWFpbi1jb250ZW50cyBpbnB1dFt0eXBlPW51bWJlcl0sXG4uYmdlLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPXRleHRdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPWVtYWlsXSxcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT10ZWxdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPW51bWJlcl0sXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9cGFzc3dvcmRdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPXRleHRdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPWVtYWlsXSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT10ZWxdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPW51bWJlcl0sXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPXRleHRdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPWVtYWlsXSxcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT10ZWxdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPW51bWJlcl0ge1xuICBmb250LXNpemU6IDFlbTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdOjpwbGFjZWhvbGRlciwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT10ZXh0XTo6cGxhY2Vob2xkZXIsIC5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9ZW1haWxdOjpwbGFjZWhvbGRlciwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT10ZWxdOjpwbGFjZWhvbGRlciwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT1udW1iZXJdOjpwbGFjZWhvbGRlcixcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT1wYXNzd29yZF06OnBsYWNlaG9sZGVyLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPXRleHRdOjpwbGFjZWhvbGRlcixcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT1lbWFpbF06OnBsYWNlaG9sZGVyLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPXRlbF06OnBsYWNlaG9sZGVyLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPW51bWJlcl06OnBsYWNlaG9sZGVyLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPXBhc3N3b3JkXTo6cGxhY2Vob2xkZXIsXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9dGV4dF06OnBsYWNlaG9sZGVyLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPWVtYWlsXTo6cGxhY2Vob2xkZXIsXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9dGVsXTo6cGxhY2Vob2xkZXIsXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9bnVtYmVyXTo6cGxhY2Vob2xkZXIsXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0W3R5cGU9cGFzc3dvcmRdOjpwbGFjZWhvbGRlcixcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT10ZXh0XTo6cGxhY2Vob2xkZXIsXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0W3R5cGU9ZW1haWxdOjpwbGFjZWhvbGRlcixcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT10ZWxdOjpwbGFjZWhvbGRlcixcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT1udW1iZXJdOjpwbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjY2NjO1xufVxuLmJzLW1haW4tY29udGVudHMgaW5wdXQ6YWN0aXZlLCAuYnMtbWFpbi1jb250ZW50cyBpbnB1dDpmb2N1cyxcbi5iZ2UtY29udGVudHMgaW5wdXQ6YWN0aXZlLFxuLmJnZS1jb250ZW50cyBpbnB1dDpmb2N1cyxcbi5ja2VfZWRpdGFibGUgaW5wdXQ6YWN0aXZlLFxuLmNrZV9lZGl0YWJsZSBpbnB1dDpmb2N1cyxcbi5icy1zdWItY29udGVudHMgaW5wdXQ6YWN0aXZlLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dDpmb2N1cyB7XG4gIGJveC1zaGFkb3c6IDAgMCA1cHggMXB4ICNmYTk2OTY7XG4gIG91dGxpbmU6IG5vbmU7XG59XG4uYnMtbWFpbi1jb250ZW50cyB0ZXh0YXJlYSxcbi5iZ2UtY29udGVudHMgdGV4dGFyZWEsXG4uY2tlX2VkaXRhYmxlIHRleHRhcmVhLFxuLmJzLXN1Yi1jb250ZW50cyB0ZXh0YXJlYSB7XG4gIHdpZHRoOiA5NSU7XG4gIGZvbnQtc2l6ZTogMWVtO1xuICBwYWRkaW5nOiAzcHggM3B4O1xufVxuLmJzLW1haW4tY29udGVudHMgdGV4dGFyZWE6YWN0aXZlLCAuYnMtbWFpbi1jb250ZW50cyB0ZXh0YXJlYTpmb2N1cyxcbi5iZ2UtY29udGVudHMgdGV4dGFyZWE6YWN0aXZlLFxuLmJnZS1jb250ZW50cyB0ZXh0YXJlYTpmb2N1cyxcbi5ja2VfZWRpdGFibGUgdGV4dGFyZWE6YWN0aXZlLFxuLmNrZV9lZGl0YWJsZSB0ZXh0YXJlYTpmb2N1cyxcbi5icy1zdWItY29udGVudHMgdGV4dGFyZWE6YWN0aXZlLFxuLmJzLXN1Yi1jb250ZW50cyB0ZXh0YXJlYTpmb2N1cyB7XG4gIGJveC1zaGFkb3c6IDAgMCA1cHggMXB4ICNmYTk2OTY7XG4gIG91dGxpbmU6IG5vbmU7XG59XG4uYnMtbWFpbi1jb250ZW50cyBpbnB1dFt0eXBlPXBhc3N3b3JkXSwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT10ZXh0XSwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT1lbWFpbF0sIC5icy1tYWluLWNvbnRlbnRzIGlucHV0W3R5cGU9dGVsXSwgLmJzLW1haW4tY29udGVudHMgaW5wdXRbdHlwZT1udW1iZXJdLFxuLmJnZS1jb250ZW50cyBpbnB1dFt0eXBlPXBhc3N3b3JkXSxcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT10ZXh0XSxcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT1lbWFpbF0sXG4uYmdlLWNvbnRlbnRzIGlucHV0W3R5cGU9dGVsXSxcbi5iZ2UtY29udGVudHMgaW5wdXRbdHlwZT1udW1iZXJdLFxuLmNrZV9lZGl0YWJsZSBpbnB1dFt0eXBlPXBhc3N3b3JkXSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT10ZXh0XSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT1lbWFpbF0sXG4uY2tlX2VkaXRhYmxlIGlucHV0W3R5cGU9dGVsXSxcbi5ja2VfZWRpdGFibGUgaW5wdXRbdHlwZT1udW1iZXJdLFxuLmJzLXN1Yi1jb250ZW50cyBpbnB1dFt0eXBlPXBhc3N3b3JkXSxcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT10ZXh0XSxcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT1lbWFpbF0sXG4uYnMtc3ViLWNvbnRlbnRzIGlucHV0W3R5cGU9dGVsXSxcbi5icy1zdWItY29udGVudHMgaW5wdXRbdHlwZT1udW1iZXJdIHtcbiAgbGluZS1oZWlnaHQ6IDFlbTtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHNlbGVjdCxcbi5iZ2UtY29udGVudHMgc2VsZWN0LFxuLmNrZV9lZGl0YWJsZSBzZWxlY3QsXG4uYnMtc3ViLWNvbnRlbnRzIHNlbGVjdCB7XG4gIGZvbnQtc2l6ZTogMWVtO1xuICBoZWlnaHQ6IDIuNmVtO1xuICBwYWRkaW5nOiAxMHB4IDhweDtcbn1cbi5icy1tYWluLWNvbnRlbnRzIHNlbGVjdDphY3RpdmUsIC5icy1tYWluLWNvbnRlbnRzIHNlbGVjdDpmb2N1cyxcbi5iZ2UtY29udGVudHMgc2VsZWN0OmFjdGl2ZSxcbi5iZ2UtY29udGVudHMgc2VsZWN0OmZvY3VzLFxuLmNrZV9lZGl0YWJsZSBzZWxlY3Q6YWN0aXZlLFxuLmNrZV9lZGl0YWJsZSBzZWxlY3Q6Zm9jdXMsXG4uYnMtc3ViLWNvbnRlbnRzIHNlbGVjdDphY3RpdmUsXG4uYnMtc3ViLWNvbnRlbnRzIHNlbGVjdDpmb2N1cyB7XG4gIGJveC1zaGFkb3c6IDAgMCA1cHggMXB4ICNmYTk2OTY7XG4gIG91dGxpbmU6IG5vbmU7XG59XG4uYnMtbWFpbi1jb250ZW50cyBvcHRncm91cCBvcHRpb24sXG4uYmdlLWNvbnRlbnRzIG9wdGdyb3VwIG9wdGlvbixcbi5ja2VfZWRpdGFibGUgb3B0Z3JvdXAgb3B0aW9uLFxuLmJzLXN1Yi1jb250ZW50cyBvcHRncm91cCBvcHRpb24ge1xuICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG59XG5cbi8qKlxuICog5aSJ5pWwXG4gKi9cbi8qKiAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAqXG4gKlxuICog44OV44Kp44Oz44OI44Gu5a6a576pXG4gKiBGb250IEF3ZXNvbWUgNC42LjMgYnkgQGRhdmVnYW5keSAtIGh0dHA6Ly9mb250YXdlc29tZS5pbyAtIEBmb250YXdlc29tZVxuICogTGljZW5zZSAtIGh0dHA6Ly9mb250YXdlc29tZS5pby9saWNlbnNlIChGb250OiBTSUwgT0ZMIDEuMSwgQ1NTOiBNSVQgTGljZW5zZSlcbiAqXG4gKiAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAqKi9cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogRm9udEF3ZXNvbWU7XG4gIHNyYzogdXJsKFwiLi4vZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC5lb3Q/dj00LjYuM1wiKTtcbiAgc3JjOiB1cmwoXCIuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LmVvdD8jaWVmaXgmdj00LjYuM1wiKSBmb3JtYXQoXCJlbWJlZGRlZC1vcGVudHlwZVwiKSwgdXJsKFwiLi4vZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC53b2ZmMj92PTQuNi4zXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCIuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LndvZmY/dj00LjYuM1wiKSBmb3JtYXQoXCJ3b2ZmXCIpLCB1cmwoXCIuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LnR0Zj92PTQuNi4zXCIpIGZvcm1hdChcInRydWV0eXBlXCIpLCB1cmwoXCIuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LnN2Zz92PTQuNi4zI2ZvbnRhd2Vzb21lcmVndWxhclwiKSBmb3JtYXQoXCJzdmdcIik7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbn1cbi8qKiAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAqXG4gKlxuICog44Oe44Or44OB44Kr44Op44Og44OW44Ot44OD44Kv44Gu44Os44Kk44Ki44Km44OIXG4gKlxuICogLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gKiovXG4vKipcbiAqIEJ1cmdlckVkaXRvciBTdHlsZVNoZWV0IFN0eWxlXG4gKlxuICogYmMtZnJvbnQg44OG44O844Oe5YG044Gn44Kz44Oz44OR44Kk44Or44GX44Gf6Zqb44Gv44CBYmdlX3N0eWxlLmNzcyDjgpJcbiAqIEJjVGhlbWVTYW1wbGUg44OG44O844Oe5YG044Gr44Kz44OU44O844GZ44KL5b+F6KaB44GM44GC44KLXG4gKi9cbi5iZ3QtYm94X19jYXB0aW9uIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgcGFkZGluZzogM3B4O1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBmb250LXNpemU6IDAuOGVtO1xufVxuXG4uYmd0LWJ0biB7XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgcGFkZGluZzogMTJweCAxMHB4O1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBtaW4td2lkdGg6IDI4MHB4O1xuICBib3JkZXItcmFkaXVzOiAycHg7XG59XG4uYmd0LWJ0bjphY3RpdmUsIC5iZ3QtYnRuOmZvY3VzIHtcbiAgYm94LXNoYWRvdzogMCAwIDEwcHggMCAjMDU3MGM3LCAwIDAgMTBweCAwICNmZmY7XG59XG5cbi5iZ3QtYnRuLS1saW5rLFxuW2RhdGEtYmd0LWJ1dHRvbi1raW5kPWxpbmtdIC5iZ3QtYnRuIHtcbiAgY29sb3I6ICMzMzM7XG4gIGJvcmRlci1jb2xvcjogI2NjYztcbiAgYmFja2dyb3VuZDogI2ZmZjtcbn1cbi5iZ3QtYnRuLS1saW5rOmhvdmVyLCAuYmd0LWJ0bi0tbGluazphY3RpdmUsIC5iZ3QtYnRuLS1saW5rOmZvY3VzLFxuW2RhdGEtYmd0LWJ1dHRvbi1raW5kPWxpbmtdIC5iZ3QtYnRuOmhvdmVyLFxuW2RhdGEtYmd0LWJ1dHRvbi1raW5kPWxpbmtdIC5iZ3QtYnRuOmFjdGl2ZSxcbltkYXRhLWJndC1idXR0b24ta2luZD1saW5rXSAuYmd0LWJ0bjpmb2N1cyB7XG4gIGJhY2tncm91bmQ6ICNlOWU5ZTk7XG59XG5cbi5iZ3QtYnRuLS1lbSxcbltkYXRhLWJndC1idXR0b24ta2luZD1lbV0gLmJndC1idG4ge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZDogIzMzMztcbn1cbi5iZ3QtYnRuLS1lbTpob3ZlciwgLmJndC1idG4tLWVtOmFjdGl2ZSwgLmJndC1idG4tLWVtOmZvY3VzLFxuW2RhdGEtYmd0LWJ1dHRvbi1raW5kPWVtXSAuYmd0LWJ0bjpob3ZlcixcbltkYXRhLWJndC1idXR0b24ta2luZD1lbV0gLmJndC1idG46YWN0aXZlLFxuW2RhdGEtYmd0LWJ1dHRvbi1raW5kPWVtXSAuYmd0LWJ0bjpmb2N1cyB7XG4gIGJhY2tncm91bmQ6ICM1NTU7XG59XG5cbi5iZ3QtYnRuLS1leHRlcm5hbCxcbltkYXRhLWJndC1idXR0b24ta2luZD1leHRlcm5hbF0gLmJndC1idG4ge1xuICBjb2xvcjogIzMzMztcbiAgYm9yZGVyLWNvbG9yOiAjY2NjO1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xufVxuLmJndC1idG4tLWV4dGVybmFsOmhvdmVyLCAuYmd0LWJ0bi0tZXh0ZXJuYWw6YWN0aXZlLCAuYmd0LWJ0bi0tZXh0ZXJuYWw6Zm9jdXMsXG5bZGF0YS1iZ3QtYnV0dG9uLWtpbmQ9ZXh0ZXJuYWxdIC5iZ3QtYnRuOmhvdmVyLFxuW2RhdGEtYmd0LWJ1dHRvbi1raW5kPWV4dGVybmFsXSAuYmd0LWJ0bjphY3RpdmUsXG5bZGF0YS1iZ3QtYnV0dG9uLWtpbmQ9ZXh0ZXJuYWxdIC5iZ3QtYnRuOmZvY3VzIHtcbiAgYmFja2dyb3VuZDogI2U5ZTllOTtcbn1cbi5iZ3QtYnRuLS1leHRlcm5hbDo6YWZ0ZXIsXG5bZGF0YS1iZ3QtYnV0dG9uLWtpbmQ9ZXh0ZXJuYWxdIC5iZ3QtYnRuOjphZnRlciB7XG4gIGZvbnQtZmFtaWx5OiBGb250QXdlc29tZSwgc2VyaWY7XG4gIHNwZWFrOiBub25lO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtdmFyaWFudDogbm9ybWFsO1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgdGV4dC1yZW5kZXJpbmc6IGF1dG87XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgY29udGVudDogXCJcXGYwOGVcIjtcbiAgZm9udC1zaXplOiAxZW07XG4gIGNvbG9yOiAjOTk5O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYmd0LWJ0bi0tYmFjayxcbltkYXRhLWJndC1idXR0b24ta2luZD1iYWNrXSAuYmd0LWJ0biB7XG4gIGNvbG9yOiAjMzMzO1xuICBib3JkZXItY29sb3I6ICNkZGQ7XG4gIGJhY2tncm91bmQ6ICNkZGQ7XG59XG4uYmd0LWJ0bi0tYmFjazpob3ZlciwgLmJndC1idG4tLWJhY2s6YWN0aXZlLCAuYmd0LWJ0bi0tYmFjazpmb2N1cyxcbltkYXRhLWJndC1idXR0b24ta2luZD1iYWNrXSAuYmd0LWJ0bjpob3ZlcixcbltkYXRhLWJndC1idXR0b24ta2luZD1iYWNrXSAuYmd0LWJ0bjphY3RpdmUsXG5bZGF0YS1iZ3QtYnV0dG9uLWtpbmQ9YmFja10gLmJndC1idG46Zm9jdXMge1xuICBiYWNrZ3JvdW5kOiAjZTllOWU5O1xufVxuLmJndC1idG4tLWJhY2sgc3BhbixcbltkYXRhLWJndC1idXR0b24ta2luZD1iYWNrXSAuYmd0LWJ0biBzcGFuIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJndC1idG4tLWJhY2s6OmJlZm9yZSxcbltkYXRhLWJndC1idXR0b24ta2luZD1iYWNrXSAuYmd0LWJ0bjo6YmVmb3JlIHtcbiAgZm9udC1mYW1pbHk6IEZvbnRBd2Vzb21lLCBzZXJpZjtcbiAgc3BlYWs6IG5vbmU7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC12YXJpYW50OiBub3JtYWw7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICB0ZXh0LXJlbmRlcmluZzogYXV0bztcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICBjb250ZW50OiBcIlxcZjA1M1wiO1xuICBmb250LXNpemU6IDFlbTtcbiAgbWFyZ2luLXRvcDogLTJweDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYmd0LWhyIHtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG5cbltkYXRhLWJndC1oci1raW5kPWRhc2hlZF0gLmJndC1ociB7XG4gIGhlaWdodDogMDtcbiAgYm9yZGVyOiBub25lO1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBib3JkZXItYm90dG9tOiAycHggZGFzaGVkIGN1cnJlbnRDb2xvcjtcbn1cblxuLmJndC1oci0tYm9sZCxcbltkYXRhLWJndC1oci1raW5kPWJvbGRdIC5iZ3QtaHIge1xuICBoZWlnaHQ6IDVweDtcbn1cblxuLmJndC1oci0tbmFycm93LFxuW2RhdGEtYmd0LWhyLWtpbmQ9bmFycm93XSAuYmd0LWhyIHtcbiAgaGVpZ2h0OiAxcHg7XG59XG5cbi5iZ3QtaHItLXNob3J0LFxuW2RhdGEtYmd0LWhyLWtpbmQ9c2hvcnRdIC5iZ3QtaHIge1xuICB3aWR0aDogNjAlO1xuICBoZWlnaHQ6IDFweDtcbn1cblxuLmJndC1kb3dubG9hZC1maWxlX19saW5rIHtcbiAgY29sb3I6ICMzMzM7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGZvbnQtc2l6ZTogMS4wOGVtO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAwLjdlbSAxZW07XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5iZ3QtZG93bmxvYWQtZmlsZV9fbGluazpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWU7XG59XG4uYmd0LWRvd25sb2FkLWZpbGVfX2xpbms6YWN0aXZlLCAuYmd0LWRvd25sb2FkLWZpbGVfX2xpbms6Zm9jdXMge1xuICBib3gtc2hhZG93OiAwIDAgNXB4IDFweCAjMDU3MGM3O1xuICBvdXRsaW5lOiBub25lO1xufVxuXG4uYmd0LWxpbmtfX3NpemUge1xuICBjb2xvcjogIzgwODA4MDtcbiAgZm9udC1zaXplOiAwLjhlbTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLmJndC1nb29nbGUtbWFwcy1saW5rIHtcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgIHBhZGRpbmc6IDFlbTtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgY29sb3I6ICMzMzM7XG4gICAgYm9yZGVyOiBzb2xpZCAxcHggIzk5OTtcbiAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG4gIC5iZ3QtZ29vZ2xlLW1hcHMtbGluayBzcGFuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAuYmd0LWdvb2dsZS1tYXBzLWxpbms6OmFmdGVyIHtcbiAgICBmb250LWZhbWlseTogRm9udEF3ZXNvbWUsIHNlcmlmO1xuICAgIHNwZWFrOiBub25lO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtdmFyaWFudDogbm9ybWFsO1xuICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgIHRleHQtcmVuZGVyaW5nOiBhdXRvO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gICAgY29udGVudDogXCJcXGYwOGVcIjtcbiAgICBmb250LXNpemU6IDFlbTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG59XG5cbltkYXRhLWJndD1nYWxsZXJ5XSAuYmd0LWdhbGxlcnkge1xuICBwYWRkaW5nLXRvcDogNTQlO1xufVxuW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeTpob3ZlciBbZGF0YS1iZ3Q9Z2FsbGVyeV0gLmJndC1nYWxsZXJ5LWN0cmwge1xuICBvcGFjaXR5OiAxO1xufVxuW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeV9faW1nIGltZyB7XG4gIG9iamVjdC1maXQ6IGNvdmVyO1xufVxuW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeV9fY2FwdGlvbiB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNik7XG4gIHBhZGRpbmc6IDAuN2VtIDFlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeS1jdHJsIHtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXMgZWFzZS1pbjtcbn1cbltkYXRhLWJndD1nYWxsZXJ5XSAuYmd0LWdhbGxlcnktY3RybF9fcHJldiwgW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeS1jdHJsX19uZXh0IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG4gIG1hcmdpbjogLTIwcHggMCAwO1xuICBwYWRkaW5nOiAwO1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBib3JkZXI6IG5vbmU7XG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7XG59XG5bZGF0YS1iZ3Q9Z2FsbGVyeV0gLmJndC1nYWxsZXJ5LWN0cmxfX3ByZXY6aG92ZXIsIFtkYXRhLWJndD1nYWxsZXJ5XSAuYmd0LWdhbGxlcnktY3RybF9fbmV4dDpob3ZlciB7XG4gIG9wYWNpdHk6IDAuNTtcbn1cbltkYXRhLWJndD1nYWxsZXJ5XSAuYmd0LWdhbGxlcnktY3RybF9fcHJldjpmb2N1cywgW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeS1jdHJsX19uZXh0OmZvY3VzIHtcbiAgb3V0bGluZTogbm9uZTtcbn1cbltkYXRhLWJndD1nYWxsZXJ5XSAuYmd0LWdhbGxlcnktY3RybF9fcHJldiBzcGFuLCBbZGF0YS1iZ3Q9Z2FsbGVyeV0gLmJndC1nYWxsZXJ5LWN0cmxfX25leHQgc3BhbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xufVxuW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeS1jdHJsX19wcmV2OjphZnRlciwgW2RhdGEtYmd0PWdhbGxlcnldIC5iZ3QtZ2FsbGVyeS1jdHJsX19uZXh0OjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXI6IHNvbGlkICNmZmY7XG4gIGJvcmRlci13aWR0aDogNXB4IDVweCAwIDA7XG59XG5bZGF0YS1iZ3Q9Z2FsbGVyeV0gLmJndC1nYWxsZXJ5LWN0cmxfX3ByZXYge1xuICBsZWZ0OiAyMHB4O1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTM1ZGVnKTtcbn1cbltkYXRhLWJndD1nYWxsZXJ5XSAuYmd0LWdhbGxlcnktY3RybF9fbmV4dCB7XG4gIHJpZ2h0OiAyMHB4O1xuICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG59XG5bZGF0YS1iZ3Q9Z2FsbGVyeV0gW2RhdGEtZ2FsbGVyeS1tYXJrZXI9dGh1bWJzXSArIC5iZ3QtZ2FsbGVyeS1tYXJrZXIge1xuICBtYXJnaW4tdG9wOiAxMHB4O1xufVxuW2RhdGEtYmd0PWdhbGxlcnldIFtkYXRhLWdhbGxlcnktbWFya2VyPXRodW1ic10gKyAuYmd0LWdhbGxlcnktbWFya2VyIGxpIHtcbiAgbWFyZ2luOiAwIDVweDtcbiAgd2lkdGg6IDYwcHg7XG4gIGhlaWdodDogNjBweDtcbn1cbltkYXRhLWJndD1nYWxsZXJ5XSBbZGF0YS1nYWxsZXJ5LW1hcmtlcj10aHVtYnNdICsgLmJndC1nYWxsZXJ5LW1hcmtlciBsaTo6YmVmb3JlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbltkYXRhLWJndD1nYWxsZXJ5XSBbZGF0YS1nYWxsZXJ5LW1hcmtlcj1kb3RdICsgLmJndC1nYWxsZXJ5LW1hcmtlciB7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG59XG5bZGF0YS1iZ3Q9Z2FsbGVyeV0gW2RhdGEtZ2FsbGVyeS1tYXJrZXI9ZG90XSArIC5iZ3QtZ2FsbGVyeS1tYXJrZXIgbGkge1xuICBtYXJnaW46IDAgMnB4O1xuICB3aWR0aDogMTBweDtcbiAgaGVpZ2h0OiAxMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTk5O1xuICBib3JkZXItcmFkaXVzOiAxMDAlO1xufVxuW2RhdGEtYmd0PWdhbGxlcnldIFtkYXRhLWdhbGxlcnktbWFya2VyPWRvdF0gKyAuYmd0LWdhbGxlcnktbWFya2VyIGxpLmN1cnJlbnQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xufVxuXG4vKiDjg4fjg5DjgqTjgrnkvp3lrZjmsY7nlKjjgq/jg6njgrkgKi9cbi5wYy1vbmx5IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkge1xuICAucGMtb25seSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4uc3Atb25seSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkge1xuICAuc3Atb25seSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn0iLCJAY2hhcnNldCBcInV0Zi04XCI7XG4vKipcbiAqIGJhc2VyQ01TIDogIEJhc2VkIFdlYnNpdGUgRGV2ZWxvcG1lbnQgUHJvamVjdCA8aHR0cHM6Ly9iYXNlcmNtcy5uZXQ+XG4gKiBDb3B5cmlnaHQgKGMpIE5QTyBiYXNlciBmb3VuZGF0aW9uIDxodHRwczovL2Jhc2VyZm91bmRhdGlvbi5vcmcvPlxuICpcbiAqIEBjb3B5cmlnaHQgICAgIENvcHlyaWdodCAoYykgTlBPIGJhc2VyIGZvdW5kYXRpb25cbiAqIEBsaW5rICAgICAgICAgIGh0dHBzOi8vYmFzZXJjbXMubmV0IGJhc2VyQ01TIFByb2plY3RcbiAqIEBzaW5jZSAgICAgICAgIDUuMC4wXG4gKiBAbGljZW5zZSAgICAgICBodHRwczovL2Jhc2VyY21zLm5ldC9saWNlbnNlL2luZGV4Lmh0bWwgTUlUIExpY2Vuc2VcbiAqL1xuXG4vKipcbiAqIOODkOODvOOCrOODvOOCqOODh+OCo+OCv+ODvOOCueOCv+OCpOODq1xuICog566h55CG55S76Z2i44Gn44KC5ZG844Gz5Ye644GV44KM44KLXG4gKi9cblxuQGltcG9ydCBcImNvbW1vbi9lZGl0b3JcIjtcbkBpbXBvcnQgXCJjb21tb24vYmdlX3NldHRpbmdcIjtcbkBpbXBvcnQgXCJjb21tb24vYmdlXCI7XG5cbiIsIi8qKlxuICog44Ko44OH44Kj44K/44O855SoQ1NTXG4gKi9cblxuJGJyZWFrUG9pbnQ6IDc2OHB4O1xuXG4uY2tlX2VkaXRhYmxlIHtcbiAgcGFkZGluZzogMTVweDtcbn1cblxuLyogRWRpdG9yIFBhcnRzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4uYnMtbWFpbi1jb250ZW50cyxcbi5iZ2UtY29udGVudHMsXG4uY2tlX2VkaXRhYmxlIHtcbiAgZm9udC1mYW1pbHk6IEFyaWFsLCBWZXJkYW5hLCBcIua4uOOCtOOCt+ODg+OCr1wiLCBZdUdvdGhpYywgXCJIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm9OXCIsIE1laXJ5bywgc2Fucy1zZXJpZjtcbiAgY29sb3I6ICMwMDA7XG5cbiAgaDEge1xuICAgIGZvbnQtc2l6ZTogNDBweDtcbiAgICBtYXJnaW4tYm90dG9tOiA0MHB4O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgaDIge1xuICAgIGZvbnQtZmFtaWx5OiBcIlNGIFBybyBKUFwiLCBcIlNGIFBybyBUZXh0XCIsIFwiU0YgUHJvIEljb25zXCIsIFwiSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvXCIsIFwi44OS44Op44Ku44OO6KeS44K0IFBybyBXM1wiLCBcIuODoeOCpOODquOCqlwiLCBcIk1laXJ5b1wiLCBcIu+8re+8syDvvLDjgrTjgrfjg4Pjgq9cIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBcIkhlbHZldGljYVwiLCBcIkFyaWFsXCIsIFwic2Fucy1zZXJpZlwiO1xuICAgIGxldHRlci1zcGFjaW5nOiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgZm9udC1zaXplOiAyLjJlbTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBsaW5lLWhlaWdodDogMS4yO1xuICAgIG1hcmdpbjogMC42ZW0gMDtcbiAgICBwYWRkaW5nOiAwLjNlbSAwO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgfVxuICB9XG5cbiAgaDMge1xuICAgIG1hcmdpbjogNTZweCAwIDIwcHggMDtcbiAgICBwYWRkaW5nOiAxM3B4IDI4cHggMTJweDtcbiAgICBmb250LXNpemU6IDIxcHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgbGluZS1oZWlnaHQ6IDQ4LjNweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgIH1cbiAgfVxuXG4gIGg0IHtcbiAgICBib3JkZXItYm90dG9tOiAxcHggI0NDQyBkb3R0ZWQ7XG4gICAgZm9udC1zaXplOiAyMnB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxMnB4O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBtYXJnaW46IDUwcHggMCAxN3B4IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgfVxuICB9XG5cbiAgaDUge1xuICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgICBtYXJnaW46IDFlbSAwO1xuICAgIHBhZGRpbmc6IDAuM2VtIDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG4gIH1cblxuICBoNiB7XG4gICAgZm9udC1zaXplOiAxZW07XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgICBtYXJnaW46IDFlbSAwO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBwYWRkaW5nOiAwLjNlbSAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgfVxuICB9XG5cbiAgc3Ryb25nIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB9XG5cbiAgdSB7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIH1cblxuICBzIHtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcbiAgfVxuXG4gIGVtIHtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIH1cblxuICBociB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxcHg7XG4gICAgY29sb3I6ICNkZGQ7XG4gICAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgICBtYXJnaW46IDUwcHggYXV0bztcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG4gIH1cblxuICB1bCB7XG4gICAgbWFyZ2luOiAyMHB4IDAgMzZweCAwO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjY7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC4wNXJlbTtcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG5cbiAgICBsaSB7XG4gICAgICBsaXN0LXN0eWxlLXBvc2l0aW9uOiBpbnNpZGU7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBwYWRkaW5nOiAwIDAgMCAyNXB4O1xuICAgICAgbWFyZ2luOiAwLjVlbSAwIDAuNWVtIDA7XG4gICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDtcblxuICAgICAgYSB7XG4gICAgICAgIHpvb206IDE7XG4gICAgICB9XG5cbiAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogOXB4O1xuICAgICAgICBsZWZ0OiAxcHg7XG4gICAgICAgIHdpZHRoOiA2cHg7XG4gICAgICAgIGhlaWdodDogNnB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMTgxODE4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdWwge1xuICAgICAgbWFyZ2luOiAwIDAgMCAxLjhlbTtcblxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb2wge1xuICAgIG1hcmdpbjogMjBweCAwIDM2cHggMS44ZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgICBsZXR0ZXItc3BhY2luZzogLjA1cmVtO1xuXG4gICAgb2wge1xuICAgICAgbWFyZ2luOiAyMHB4O1xuICAgIH1cblxuICAgIGxpIHtcbiAgICAgIGxpc3Qtc3R5bGUtdHlwZTogZGVjaW1hbC1sZWFkaW5nLXplcm87XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBwYWRkaW5nOiAwIDAgMCAwO1xuICAgICAgbWFyZ2luOiAwLjVlbSAwIDAuNWVtIDA7XG4gICAgICBsaW5lLWhlaWdodDogMS42O1xuICAgIH1cbiAgfVxuXG4gIHAge1xuICAgIG1hcmdpbjogMWVtIDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC4wNXJlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyLjM7XG4gIH1cblxuICB0YWJsZSB7XG4gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICBib3JkZXItc3BhY2luZzogMDtcbiAgICB0YWJsZS1sYXlvdXQ6IGZpeGVkO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2UxZTFlMTtcbiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZTFlMWUxO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTFlMWUxO1xuICAgIG1hcmdpbjogMjBweCAwIDIwcHggMDtcblxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRicmVha1BvaW50KSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG5cbiAgICBjYXB0aW9uIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcblxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGJvZHksXG4gICAgdGZvb3Qge1xuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHIge1xuICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlMWUxZTE7XG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWFyZ2luLXRvcDogLTFweDtcbiAgICAgIH1cblxuICAgICAgJjpudGgtY2hpbGQob2RkKSB0ZCB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XG4gICAgICB9XG5cbiAgICAgIHRoLFxuICAgICAgdGQge1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICBwYWRkaW5nOiAyNnB4IDI0cHg7XG4gICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2UxZTFlMTtcblxuICAgICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIlNGIFBybyBKUFwiLCBcIlNGIFBybyBUZXh0XCIsIFwiU0YgUHJvIEljb25zXCIsIFwiSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvXCIsIFwi44OS44Op44Ku44OO6KeS44K0IFBybyBXM1wiLCBcIuODoeOCpOODquOCqlwiLCBcIk1laXJ5b1wiLCBcIu+8re+8syDvvLDjgrTjgrfjg4Pjgq9cIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBcIkhlbHZldGljYVwiLCBcIkFyaWFsXCIsIFwic2Fucy1zZXJpZlwiO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZjNmM2YzO1xuICAgICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGQge1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuXG4gICAgICAgIHVsIHtcbiAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpZWxkc2V0IHtcbiAgICBib3JkZXI6IDA7XG4gIH1cblxuICBpbWcge1xuICAgIGJvcmRlcjogMDtcbiAgICBtYXJnaW46IGF1dG87XG4gIH1cblxuICBhZGRyZXNzLCBidXR0b24sIGNhcHRpb24sIGNpdGUsIGNvZGUsIGRmbiwgZW0sIGlucHV0LCBvcHRncm91cCwgb3B0aW9uLCBzZWxlY3QsIHN0cm9uZywgdGV4dGFyZWEsIHRoLCB2YXIge1xuICAgIGZvbnQ6IGluaGVyaXQ7XG4gIH1cblxuICBzbWFsbCB7XG4gICAgY29sb3I6ICM2NjY7XG4gIH1cblxuICBkZWwsIGlucyB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB9XG5cbiAgYSB7XG4gICAgJjpsaW5rLCAmOnZpc2l0ZWQge1xuICAgICAgY29sb3I6ICMyYjdiYjk7XG4gICAgfVxuXG4gICAgJjpob3ZlciB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgY2FwdGlvbiwgdGgge1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gIH1cblxuICBxIHtcbiAgICAmOmJlZm9yZSwgJjphZnRlciB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICB9XG4gIH1cblxuICBhYmJyLCBhY3JvbnltIHtcbiAgICBib3JkZXI6IDA7XG4gICAgZm9udC12YXJpYW50OiBub3JtYWw7XG4gIH1cblxuICBzdWIge1xuICAgIGZvbnQtc2l6ZTogMC44ZW07XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIHZlcnRpY2FsLWFsaWduOiBzdWI7XG4gIH1cblxuICBzdXAge1xuICAgIGZvbnQtc2l6ZTogMC44ZW07XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIHZlcnRpY2FsLWFsaWduOiBzdXBlcjtcbiAgfVxuXG4gIGxlZ2VuZCB7XG4gICAgY29sb3I6ICMwMDA7XG4gIH1cblxuICBwcmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNGM0YzRjM7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjRTJFMkUyO1xuICB9XG5cbiAgYmxvY2txdW90ZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogMWVtIDA7XG4gICAgcGFkZGluZzogMXB4IDIuNWVtO1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICNjY2M7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBjb2xvcjogIzg4ODtcbiAgICBmb250LXNpemU6IDAuOWVtO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgIH1cblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAn4oCcJztcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgZm9udC1mYW1pbHk6IHNlcmlmO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwLjNlbTtcbiAgICAgIGxlZnQ6IDAuMjVlbTtcbiAgICAgIHotaW5kZXg6IDA7XG4gICAgICBjb2xvcjogI2NjYztcbiAgICAgIGZvbnQtc2l6ZTogM2VtO1xuICAgIH1cblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICfigJ0nO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBmb250LWZhbWlseTogc2VyaWY7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206IC0wLjNlbTtcbiAgICAgIHJpZ2h0OiAwLjI1ZW07XG4gICAgICB6LWluZGV4OiAwO1xuICAgICAgY29sb3I6ICNjY2M7XG4gICAgICBmb250LXNpemU6IDNlbTtcbiAgICB9XG4gIH1cblxufVxuXG4vKiBGb3JtIFBhcnRzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4uYnMtbWFpbi1jb250ZW50cyxcbi5iZ2UtY29udGVudHMsXG4uY2tlX2VkaXRhYmxlLFxuLmJzLXN1Yi1jb250ZW50cyB7XG4gIGZvcm0ge1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgfVxuXG4gIGlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBvcHRpb24ge1xuICAgIGZvbnQtZmFtaWx5OiBcIlNGIFBybyBKUFwiLCBcIlNGIFBybyBUZXh0XCIsIFwiU0YgUHJvIEljb25zXCIsIFwiSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvXCIsIFwi44OS44Op44Ku44OO6KeS44K0IFBybyBXM1wiLCBcIuODoeOCpOODquOCqlwiLCBcIk1laXJ5b1wiLCBcIu+8re+8syDvvLDjgrTjgrfjg4Pjgq9cIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBcIkhlbHZldGljYVwiLCBcIkFyaWFsXCIsIFwic2Fucy1zZXJpZlwiO1xuICB9XG5cbiAgaW5wdXRbdHlwZT1wYXNzd29yZF0sXG4gIGlucHV0W3R5cGU9dGV4dF0sXG4gIGlucHV0W3R5cGU9ZW1haWxdLFxuICBpbnB1dFt0eXBlPXRlbF0sXG4gIGlucHV0W3R5cGU9bnVtYmVyXSxcbiAgdGV4dGFyZWEsXG4gIHNlbGVjdCB7XG4gICAgbWFyZ2luOiAzcHggMnB4O1xuICAgIHBhZGRpbmc6IDhweCAxMHB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgLW1vei1ib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICB9XG5cbiAgaW5wdXQge1xuICAgICZbdHlwZT1jaGVja2JveF0ge1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG5cbiAgICAmW3R5cGU9cmFkaW9dLCAmW3R5cGU9Y2hlY2tib3hdIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgICB9XG5cbiAgICAmW3R5cGU9c3VibWl0XSwgJlt0eXBlPXJlc2V0XSwgJlt0eXBlPWJ1dHRvbl0ge1xuICAgICAgbWFyZ2luOiAzcHggMnB4O1xuICAgICAgZm9udC1mYW1pbHk6IFwiU0YgUHJvIEpQXCIsIFwiU0YgUHJvIFRleHRcIiwgXCJTRiBQcm8gSWNvbnNcIiwgXCJIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm9cIiwgXCLjg5Ljg6njgq7jg47op5LjgrQgUHJvIFczXCIsIFwi44Oh44Kk44Oq44KqXCIsIFwiTWVpcnlvXCIsIFwi77yt77yzIO+8sOOCtOOCt+ODg+OCr1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIFwiSGVsdmV0aWNhXCIsIFwiQXJpYWxcIiwgXCJzYW5zLXNlcmlmXCI7XG4gICAgfVxuXG4gICAgJlt0eXBlPXBhc3N3b3JkXSxcbiAgICAmW3R5cGU9dGV4dF0sXG4gICAgJlt0eXBlPWVtYWlsXSxcbiAgICAmW3R5cGU9dGVsXSxcbiAgICAmW3R5cGU9bnVtYmVyXVxuICAgIHtcbiAgICAgIGZvbnQtc2l6ZTogMWVtO1xuXG4gICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgIGNvbG9yOiAjY2NjO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6YWN0aXZlLFxuICAgICY6Zm9jdXMge1xuICAgICAgYm94LXNoYWRvdzogMCAwIDVweCAxcHggI2ZhOTY5NjtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgdGV4dGFyZWEge1xuICAgIHdpZHRoOiA5NSU7XG4gICAgZm9udC1zaXplOiAxZW07XG4gICAgcGFkZGluZzogM3B4IDNweDtcblxuICAgICY6YWN0aXZlLFxuICAgICY6Zm9jdXMge1xuICAgICAgYm94LXNoYWRvdzogMCAwIDVweCAxcHggI2ZhOTY5NjtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgaW5wdXQge1xuICAgICZbdHlwZT1wYXNzd29yZF0sXG4gICAgJlt0eXBlPXRleHRdLFxuICAgICZbdHlwZT1lbWFpbF0sXG4gICAgJlt0eXBlPXRlbF0sXG4gICAgJlt0eXBlPW51bWJlcl1cbiAgICB7XG4gICAgICBsaW5lLWhlaWdodDogMWVtO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdCB7XG4gICAgZm9udC1zaXplOiAxZW07XG4gICAgaGVpZ2h0OiAyLjZlbTtcbiAgICBwYWRkaW5nOiAxMHB4IDhweDtcblxuICAgICY6YWN0aXZlLFxuICAgICY6Zm9jdXMge1xuICAgICAgYm94LXNoYWRvdzogMCAwIDVweCAxcHggI2ZhOTY5NjtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgb3B0Z3JvdXAgb3B0aW9uIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gIH1cbn1cbiIsIi8qKlxuICog5aSJ5pWwXG4gKi9cbkB1c2UgXCJzYXNzOm1hdGhcIjtcblxuLy8gUldE44Gu44OW44Os44O844Kv44Od44Kk44Oz44OIXG4kYnJlYWtQb2ludDogNzY4cHg7XG5cbi8vIOOCq+ODqeODoOmWk+OBruODnuODvOOCuOODs1xuJG11bHRpQ29sdW1uR3JpZE1hcmdpbjogMjBweDtcblxuLy8gUldE44Gn44Kr44Op44Og44GM6JC944Gh44Gf5pmC44Gu5LiL44Oe44O844K444OzXG4kbXVsdGlDb2x1bW5HcmlkTWFyZ2luQm90dG9tV2hlbkNsZWFyZWRGbG9hdDogMjBweDtcblxuLy8g44Oc44K/44Oz44Gu44OV44Kp44O844Kr44K55pmC44Gu44Kr44Op44O8XG4kYnRuR2xvd0NvbG9yOiAjMDU3MGM3O1xuXG4vLyDjg4jjg6rjg6DnlLvlg4/jg5bjg63jg4Pjgq/jga7nuKbmqKrmr5RcbiR0cmltSW1hZ2VBc3BlY3RSYXRpbzogMTsgLy8gNDoz44Gu5aC05ZCI44GvMy80XG5cbi8qKiAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAqXG4gKlxuICog44OV44Kp44Oz44OI44Gu5a6a576pXG4gKiBGb250IEF3ZXNvbWUgNC42LjMgYnkgQGRhdmVnYW5keSAtIGh0dHA6Ly9mb250YXdlc29tZS5pbyAtIEBmb250YXdlc29tZVxuICogTGljZW5zZSAtIGh0dHA6Ly9mb250YXdlc29tZS5pby9saWNlbnNlIChGb250OiBTSUwgT0ZMIDEuMSwgQ1NTOiBNSVQgTGljZW5zZSlcbiAqXG4gKiAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAqKi9cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogRm9udEF3ZXNvbWU7XG4gIHNyYzogdXJsKCcuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LmVvdD92PTQuNi4zJyk7XG4gIHNyYzogdXJsKCcuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LmVvdD8jaWVmaXgmdj00LjYuMycpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSxcbiAgdXJsKCcuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LndvZmYyP3Y9NC42LjMnKSBmb3JtYXQoJ3dvZmYyJyksXG4gIHVybCgnLi4vZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC53b2ZmP3Y9NC42LjMnKSBmb3JtYXQoJ3dvZmYnKSxcbiAgdXJsKCcuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LnR0Zj92PTQuNi4zJykgZm9ybWF0KCd0cnVldHlwZScpLFxuICB1cmwoJy4uL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQuc3ZnP3Y9NC42LjMjZm9udGF3ZXNvbWVyZWd1bGFyJykgZm9ybWF0KCdzdmcnKTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuXG4vLyAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAvXG4vLyDjgrDjg6rjg4Pjg4njgrfjgrnjg4bjg6Bcbi8vXG4vLyDnt6jpm4bpnZ7mjqjlpahcbi8vXG4vLyAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAvXG4kc3BhbjE6IDguMzMzMyU7XG4kc3BhbjI6IDE2LjY2NjYlO1xuJHNwYW4zOiAyNSU7XG4kc3BhbjQ6IDMzLjMzMzMlO1xuJHNwYW41OiA0MS42NjY2JTtcbiRzcGFuNjogNTAlO1xuJHNwYW43OiA1OC4zMzMzJTtcbiRzcGFuODogNjYuNjY2NiU7XG4kc3Bhbjk6IDc1JTtcbiRzcGFuMTA6IDgzLjMzMzMlO1xuJHNwYW4xMTogOTEuNjY2NiU7XG4kc3BhbjEyOiAxMDAlO1xuJGRpdmlkZTU6IDIwJTsgLy8gMTLjgrDjg6rjg4Pjg4njgrfjgrnjg4bjg6Djgafjga/lho3nj77jgafjgY3jgarjgYQ15YiG5YmyXG5cbi8vIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC0tLS0tIC9cbi8vXG4vLyDjg5/jg4Pjgq/jgrnjgqTjg7Ncbi8vXG4vLyAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAvXG5AbWl4aW4gYmdlLWljb24ge1xuICBmb250LWZhbWlseTogRm9udEF3ZXNvbWUsIHNlcmlmO1xuICBzcGVhazogbm9uZTtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXZhcmlhbnQ6IG5vcm1hbDtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gIHRleHQtcmVuZGVyaW5nOiBhdXRvO1xuICBsaW5lLWhlaWdodDogMTtcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG59XG5cbi8qKiAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAtLS0tLSAqXG4gKlxuICog44Oe44Or44OB44Kr44Op44Og44OW44Ot44OD44Kv44Gu44Os44Kk44Ki44Km44OIXG4gKlxuICogLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gLS0tLS0gKiovXG5cbiVjb2x1bW4yLWxheW91dCB7XG4gIC8qIDLliJfjg5bjg63jg4Pjgq8gKi9cbiAgLmJndC1ncmlkIHtcbiAgICAvKiAy5YiX44OW44Ot44OD44Kv5YaFIOODrOOCpOOCouOCpuODiOeUqOOCs+ODs+ODhuODiiAqL1xuICAgIHdpZHRoOiAkc3BhbjY7XG4gICAgZmxvYXQ6IGxlZnQ7XG5cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBmbG9hdDogbm9uZTtcblxuICAgICAgW2RhdGEtYmd0XSA+IDpsYXN0LWNoaWxkIHtcbiAgICAgICAgLyog5LiL44Oe44O844K444Oz44Gv44OW44Ot44OD44Kv5YaF44Gu44K/44Kk44OX44Gu6KaB57Sg44Gr5a++44GX44Gm5oyH5a6a44GZ44KLICjnqbrnlLvlg4/lr77nrZYpICovXG4gICAgICAgIG1hcmdpbi1ib3R0b206ICRtdWx0aUNvbHVtbkdyaWRNYXJnaW5Cb3R0b21XaGVuQ2xlYXJlZEZsb2F0O1xuXG4gICAgICAgICZbZGF0YS1iZ2UtZW1wdHk9JzEnXSB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQsXG4gICAgICAmW2NsYXNzKj0nYmd0LXNwLWdyaWQnXSB7XG4gICAgICAgIFtkYXRhLWJndF0gPiA6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICY6bnRoLWNoaWxkKDEpIHtcbiAgICAgIC8qIDLliJfjg5bjg63jg4Pjgq/lhoUg44Os44Kk44Ki44Km44OI55So5pyA5Yid44Gu44Kz44Oz44OG44OKICovXG4gICAgICBwYWRkaW5nLXJpZ2h0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luLCAyKTtcblxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm50aC1jaGlsZCgyKSB7XG4gICAgICAvKiAy5YiX44OW44Ot44OD44Kv5YaFIOODrOOCpOOCouOCpuODiOeUqOacgOW+jOOBruOCs+ODs+ODhuODiiAqL1xuICAgICAgcGFkZGluZy1sZWZ0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luLCAyKTtcblxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4lY29sdW1uMy1sYXlvdXQge1xuICAvKiAz5YiX44OW44Ot44OD44KvICovXG4gIC5iZ3QtZ3JpZCB7XG4gICAgLyogM+WIl+ODluODreODg+OCr+WGhSDjg6zjgqTjgqLjgqbjg4jnlKjjgrPjg7Pjg4bjg4ogKi9cbiAgICB3aWR0aDogJHNwYW40O1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIHBhZGRpbmctbGVmdDogbWF0aC5kaXYoJG11bHRpQ29sdW1uR3JpZE1hcmdpbiAqIDEsIDMpO1xuICAgIHBhZGRpbmctcmlnaHQ6IG1hdGguZGl2KCRtdWx0aUNvbHVtbkdyaWRNYXJnaW4gKiAxLCAzKTtcblxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRicmVha1BvaW50KSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGZsb2F0OiBub25lO1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcblxuICAgICAgW2RhdGEtYmd0XSA+IDpsYXN0LWNoaWxkIHtcbiAgICAgICAgLyog5LiL44Oe44O844K444Oz44Gv44OW44Ot44OD44Kv5YaF44Gu44K/44Kk44OX44Gu6KaB57Sg44Gr5a++44GX44Gm5oyH5a6a44GZ44KLICjnqbrnlLvlg4/lr77nrZYpICovXG4gICAgICAgIG1hcmdpbi1ib3R0b206ICRtdWx0aUNvbHVtbkdyaWRNYXJnaW5Cb3R0b21XaGVuQ2xlYXJlZEZsb2F0O1xuXG4gICAgICAgICZbZGF0YS1iZ2UtZW1wdHk9JzEnXSB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQsXG4gICAgICAmW2NsYXNzKj0nYmd0LXNwLWdyaWQnXSB7XG4gICAgICAgIFtkYXRhLWJndF0gPiA6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICY6bnRoLWNoaWxkKDEpIHtcbiAgICAgIC8qIDPliJfjg5bjg63jg4Pjgq/lhoUg44Os44Kk44Ki44Km44OI55So5pyA5Yid44Gu44Kz44Oz44OG44OKICovXG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luICogMiwgMyk7XG5cbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRicmVha1BvaW50KSB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpudGgtY2hpbGQoMykge1xuICAgICAgLyogM+WIl+ODluODreODg+OCr+WGhSDjg6zjgqTjgqLjgqbjg4jnlKjmnIDliJ3jga7jgrPjg7Pjg4bjg4ogKi9cbiAgICAgIHBhZGRpbmctbGVmdDogbWF0aC5kaXYoJG11bHRpQ29sdW1uR3JpZE1hcmdpbiAqIDIsIDMpO1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcblxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4lY29sdW1uNC1sYXlvdXQge1xuICAvKiA05YiX44OW44Ot44OD44KvICovXG4gIC5iZ3QtZ3JpZCB7XG4gICAgLyogNOWIl+ODluODreODg+OCr+WGhSDjg6zjgqTjgqLjgqbjg4jnlKjjgrPjg7Pjg4bjg4ogKi9cbiAgICB3aWR0aDogJHNwYW4zO1xuICAgIGZsb2F0OiBsZWZ0O1xuXG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgZmxvYXQ6IG5vbmU7XG5cbiAgICAgIFtkYXRhLWJndF0gPiA6bGFzdC1jaGlsZCB7XG4gICAgICAgIC8qIOS4i+ODnuODvOOCuOODs+OBr+ODluODreODg+OCr+WGheOBruOCv+OCpOODl+OBruimgee0oOOBq+WvvuOBl+OBpuaMh+WumuOBmeOCiyAo56m655S75YOP5a++562WKSAqL1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAkbXVsdGlDb2x1bW5HcmlkTWFyZ2luQm90dG9tV2hlbkNsZWFyZWRGbG9hdDtcblxuICAgICAgICAmW2RhdGEtYmdlLWVtcHR5PScxJ10ge1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkLFxuICAgICAgJltjbGFzcyo9J2JndC1zcC1ncmlkJ10ge1xuICAgICAgICBbZGF0YS1iZ3RdID4gOmxhc3QtY2hpbGQge1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm50aC1jaGlsZCgxKSB7XG4gICAgICAvKiA05YiX44OW44Ot44OD44Kv5YaF44Gu44Kz44Oz44OG44OKICovXG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luICogMywgNCk7XG5cbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRicmVha1BvaW50KSB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm50aC1jaGlsZCgyKSB7XG4gICAgICAvKiA05YiX44OW44Ot44OD44Kv5YaF44Gu44Kz44Oz44OG44OKICovXG4gICAgICBwYWRkaW5nLWxlZnQ6IG1hdGguZGl2KCRtdWx0aUNvbHVtbkdyaWRNYXJnaW4gKiAxLCA0KTtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IG1hdGguZGl2KCRtdWx0aUNvbHVtbkdyaWRNYXJnaW4gKiAyLCA0KTtcblxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6bnRoLWNoaWxkKDMpIHtcbiAgICAgIC8qIDTliJfjg5bjg63jg4Pjgq/lhoXjga7jgrPjg7Pjg4bjg4ogKi9cbiAgICAgIHBhZGRpbmctbGVmdDogbWF0aC5kaXYoJG11bHRpQ29sdW1uR3JpZE1hcmdpbiAqIDIsIDQpO1xuICAgICAgcGFkZGluZy1yaWdodDogbWF0aC5kaXYoJG11bHRpQ29sdW1uR3JpZE1hcmdpbiAqIDEsIDQpO1xuXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpudGgtY2hpbGQoNCkge1xuICAgICAgLyogNOWIl+ODluODreODg+OCr+WGheOBruOCs+ODs+ODhuODiiAqL1xuICAgICAgcGFkZGluZy1sZWZ0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luICogMywgNCk7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbiVjb2x1bW41LWxheW91dCB7XG4gIC8qIDXliJfjg5bjg63jg4Pjgq8gKi9cbiAgLmJndC1ncmlkIHtcbiAgICAvKiA15YiX44OW44Ot44OD44Kv5YaFIOODrOOCpOOCouOCpuODiOeUqOOCs+ODs+ODhuODiiAqL1xuICAgIHdpZHRoOiAkZGl2aWRlNTtcbiAgICBmbG9hdDogbGVmdDtcblxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRicmVha1BvaW50KSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGZsb2F0OiBub25lO1xuXG4gICAgICBbZGF0YS1iZ3RdID4gOmxhc3QtY2hpbGQge1xuICAgICAgICAvKiDkuIvjg57jg7zjgrjjg7Pjga/jg5bjg63jg4Pjgq/lhoXjga7jgr/jgqTjg5fjga7opoHntKDjgavlr77jgZfjgabmjIflrprjgZnjgosgKOepuueUu+WDj+WvvuetlikgKi9cbiAgICAgICAgbWFyZ2luLWJvdHRvbTogJG11bHRpQ29sdW1uR3JpZE1hcmdpbkJvdHRvbVdoZW5DbGVhcmVkRmxvYXQ7XG5cbiAgICAgICAgJltkYXRhLWJnZS1lbXB0eT0nMSddIHtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCxcbiAgICAgICZbY2xhc3MqPSdiZ3Qtc3AtZ3JpZCddIHtcbiAgICAgICAgW2RhdGEtYmd0XSA+IDpsYXN0LWNoaWxkIHtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpudGgtY2hpbGQoMSkge1xuICAgICAgLyogNOWIl+ODluODreODg+OCr+WGheOBruOCs+ODs+ODhuODiiAqL1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgcGFkZGluZy1yaWdodDogbWF0aC5kaXYoJG11bHRpQ29sdW1uR3JpZE1hcmdpbiAqIDQsIDUpO1xuXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpudGgtY2hpbGQoMikge1xuICAgICAgLyogNOWIl+ODluODreODg+OCr+WGheOBruOCs+ODs+ODhuODiiAqL1xuICAgICAgcGFkZGluZy1sZWZ0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luICogMSwgNSk7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luICogMywgNSk7XG5cbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRicmVha1BvaW50KSB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOm50aC1jaGlsZCgzKSB7XG4gICAgICAvKiA05YiX44OW44Ot44OD44Kv5YaF44Gu44Kz44Oz44OG44OKICovXG4gICAgICBwYWRkaW5nLWxlZnQ6IG1hdGguZGl2KCRtdWx0aUNvbHVtbkdyaWRNYXJnaW4gKiAyLCA1KTtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IG1hdGguZGl2KCRtdWx0aUNvbHVtbkdyaWRNYXJnaW4gKiAyLCA1KTtcblxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6bnRoLWNoaWxkKDQpIHtcbiAgICAgIC8qIDTliJfjg5bjg63jg4Pjgq/lhoXjga7jgrPjg7Pjg4bjg4ogKi9cbiAgICAgIHBhZGRpbmctbGVmdDogbWF0aC5kaXYoJG11bHRpQ29sdW1uR3JpZE1hcmdpbiAqIDMsIDUpO1xuICAgICAgcGFkZGluZy1yaWdodDogbWF0aC5kaXYoJG11bHRpQ29sdW1uR3JpZE1hcmdpbiAqIDEsIDUpO1xuXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpudGgtY2hpbGQoNSkge1xuICAgICAgLyogNOWIl+ODluODreODg+OCr+WGheOBruOCs+ODs+ODhuODiiAqL1xuICAgICAgcGFkZGluZy1sZWZ0OiBtYXRoLmRpdigkbXVsdGlDb2x1bW5HcmlkTWFyZ2luICogNCwgNSk7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIEJ1cmdlckVkaXRvciBTdHlsZVNoZWV0IFN0eWxlXG4gKlxuICogYmMtZnJvbnQg44OG44O844Oe5YG044Gn44Kz44Oz44OR44Kk44Or44GX44Gf6Zqb44Gv44CBYmdlX3N0eWxlLmNzcyDjgpJcbiAqIEJjVGhlbWVTYW1wbGUg44OG44O844Oe5YG044Gr44Kz44OU44O844GZ44KL5b+F6KaB44GM44GC44KLXG4gKi9cblxuLmJndC1ib3hfX2NhcHRpb24ge1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBwYWRkaW5nOiAzcHg7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG59XG5cbi5iZ3QtYnRuIHtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBwYWRkaW5nOiAxMnB4IDEwcHg7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIG1pbi13aWR0aDogMjgwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcblxuICAmOmFjdGl2ZSxcbiAgJjpmb2N1cyB7XG4gICAgYm94LXNoYWRvdzogMCAwIDEwcHggMCAkYnRuR2xvd0NvbG9yLCAwIDAgMTBweCAwICNmZmY7XG4gIH1cbn1cblxuLmJndC1idG4tLWxpbmsgLyog5pen44K744Os44Kv44K/ICovXG4sXG5bZGF0YS1iZ3QtYnV0dG9uLWtpbmQ9J2xpbmsnXSAuYmd0LWJ0biAvKiDmlrDjgrvjg6zjgq/jgr8gKi9cbntcbiAgJGNvbG9yOiAjMzMzO1xuICAkYkNvbG9yOiAjY2NjO1xuICAkYmdDb2xvcjogI2ZmZjtcbiAgJGJnQ29sb3JIb3ZlcjogI2U5ZTllOTtcbiAgY29sb3I6ICRjb2xvcjtcbiAgYm9yZGVyLWNvbG9yOiAkYkNvbG9yO1xuICBiYWNrZ3JvdW5kOiAkYmdDb2xvcjtcblxuICAmOmhvdmVyLFxuICAmOmFjdGl2ZSxcbiAgJjpmb2N1cyB7XG4gICAgYmFja2dyb3VuZDogJGJnQ29sb3JIb3ZlcjtcbiAgfVxufVxuXG4uYmd0LWJ0bi0tZW0gLyog5pen44K744Os44Kv44K/ICovXG4sXG5bZGF0YS1iZ3QtYnV0dG9uLWtpbmQ9J2VtJ10gLmJndC1idG4gLyog5paw44K744Os44Kv44K/ICovXG57XG4gICRjb2xvcjogI2ZmZjtcbiAgJGJDb2xvcjogIzMzMztcbiAgJGJnQ29sb3I6ICMzMzM7XG4gICRiZ0NvbG9ySG92ZXI6ICM1NTU7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogJGNvbG9yO1xuICBib3JkZXItY29sb3I6ICRiQ29sb3I7XG4gIGJhY2tncm91bmQ6ICRiZ0NvbG9yO1xuXG4gICY6aG92ZXIsXG4gICY6YWN0aXZlLFxuICAmOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmdDb2xvckhvdmVyO1xuICB9XG59XG5cbi5iZ3QtYnRuLS1leHRlcm5hbCAvKiDml6fjgrvjg6zjgq/jgr8gKi9cbixcbltkYXRhLWJndC1idXR0b24ta2luZD0nZXh0ZXJuYWwnXSAuYmd0LWJ0biAvKiDmlrDjgrvjg6zjgq/jgr8gKi9cbntcbiAgJGNvbG9yOiAjMzMzO1xuICAkYkNvbG9yOiAjY2NjO1xuICAkYmdDb2xvcjogI2ZmZjtcbiAgJGJnQ29sb3JIb3ZlcjogI2U5ZTllOTtcbiAgY29sb3I6ICRjb2xvcjtcbiAgYm9yZGVyLWNvbG9yOiAkYkNvbG9yO1xuICBiYWNrZ3JvdW5kOiAkYmdDb2xvcjtcblxuICAmOmhvdmVyLFxuICAmOmFjdGl2ZSxcbiAgJjpmb2N1cyB7XG4gICAgYmFja2dyb3VuZDogJGJnQ29sb3JIb3ZlcjtcbiAgfVxuXG4gICY6OmFmdGVyIHtcbiAgICBAaW5jbHVkZSBiZ2UtaWNvbjtcbiAgICBjb250ZW50OiAnXFxmMDhlJztcbiAgICBmb250LXNpemU6IDFlbTtcbiAgICBjb2xvcjogIzk5OTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG59XG5cbi5iZ3QtYnRuLS1iYWNrIC8qIOaXp+OCu+ODrOOCr+OCvyAqL1xuLFxuW2RhdGEtYmd0LWJ1dHRvbi1raW5kPSdiYWNrJ10gLmJndC1idG4gLyog5paw44K744Os44Kv44K/ICovXG57XG4gICRjb2xvcjogIzMzMztcbiAgJGJDb2xvcjogI2RkZDtcbiAgJGJnQ29sb3I6ICNkZGQ7XG4gICRiZ0NvbG9ySG92ZXI6ICNlOWU5ZTk7XG4gIGNvbG9yOiAkY29sb3I7XG4gIGJvcmRlci1jb2xvcjogJGJDb2xvcjtcbiAgYmFja2dyb3VuZDogJGJnQ29sb3I7XG5cbiAgJjpob3ZlcixcbiAgJjphY3RpdmUsXG4gICY6Zm9jdXMge1xuICAgIGJhY2tncm91bmQ6ICRiZ0NvbG9ySG92ZXI7XG4gIH1cblxuICBzcGFuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuXG4gICY6OmJlZm9yZSB7XG4gICAgQGluY2x1ZGUgYmdlLWljb247XG4gICAgY29udGVudDogJ1xcZjA1Myc7XG4gICAgZm9udC1zaXplOiAxZW07XG4gICAgbWFyZ2luLXRvcDogLTJweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxufVxuXG4uYmd0LWhyIHtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG5cbltkYXRhLWJndC1oci1raW5kPSdkYXNoZWQnXSAuYmd0LWhyIHtcbiAgaGVpZ2h0OiAwO1xuICBib3JkZXI6IG5vbmU7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGJvcmRlci1ib3R0b206IDJweCBkYXNoZWQgY3VycmVudENvbG9yO1xufVxuXG4uYmd0LWhyLS1ib2xkIC8qIOaXp+OCu+ODrOOCr+OCvyAqL1xuLFxuW2RhdGEtYmd0LWhyLWtpbmQ9J2JvbGQnXSAuYmd0LWhyIC8qIOaWsOOCu+ODrOOCr+OCvyAqL1xue1xuICBoZWlnaHQ6IDVweDtcbn1cblxuLmJndC1oci0tbmFycm93IC8qIOaXp+OCu+ODrOOCr+OCvyAqL1xuLFxuW2RhdGEtYmd0LWhyLWtpbmQ9J25hcnJvdyddIC5iZ3QtaHIgLyog5paw44K744Os44Kv44K/ICovXG57XG4gIGhlaWdodDogMXB4O1xufVxuXG4uYmd0LWhyLS1zaG9ydCAvKiDml6fjgrvjg6zjgq/jgr8gKi9cbixcbltkYXRhLWJndC1oci1raW5kPSdzaG9ydCddIC5iZ3QtaHIgLyog5paw44K744Os44Kv44K/ICovXG57XG4gIHdpZHRoOiA2MCU7XG4gIGhlaWdodDogMXB4O1xufVxuXG4uYmd0LWRvd25sb2FkLWZpbGVfX2xpbmsge1xuICBjb2xvcjogIzMzMztcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgZm9udC1zaXplOiAxLjA4ZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDAuN2VtIDFlbTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBsaW5lLWhlaWdodDogMTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7XG4gIH1cblxuICAmOmFjdGl2ZSxcbiAgJjpmb2N1cyB7XG4gICAgYm94LXNoYWRvdzogMCAwIDVweCAxcHggJGJ0bkdsb3dDb2xvcjtcbiAgICBvdXRsaW5lOiBub25lO1xuICB9XG59XG5cbi5iZ3QtbGlua19fc2l6ZSB7XG4gIGNvbG9yOiAjODA4MDgwO1xuICBmb250LXNpemU6IDAuOGVtO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xufVxuXG4uYmd0LWdvb2dsZS1tYXBzLWxpbmsge1xuICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgcGFkZGluZzogMWVtO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBjb2xvcjogIzMzMztcbiAgICBib3JkZXI6IHNvbGlkIDFweCAjOTk5O1xuICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICBzcGFuIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgQGluY2x1ZGUgYmdlLWljb247XG4gICAgICBjb250ZW50OiAnXFxmMDhlJztcbiAgICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG4gIH1cbn1cblxuW2RhdGEtYmd0PSdnYWxsZXJ5J10ge1xuICAkdGh1bWItc2l6ZTogNjBweDtcblxuICAuYmd0LWdhbGxlcnkge1xuICAgIHBhZGRpbmctdG9wOiA1NCU7XG5cbiAgICAmOmhvdmVyICYtY3RybCB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cblxuICAgICZfX2ltZyB7XG4gICAgICBpbWcge1xuICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19jYXB0aW9uIHtcbiAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjYpO1xuICAgICAgcGFkZGluZzogMC43ZW0gMWVtO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cblxuICAgICYtY3RybCB7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXMgZWFzZS1pbjtcblxuICAgICAgJl9fcHJldixcbiAgICAgICZfX25leHQge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgbWFyZ2luOiAtMjBweCAwIDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICAgIH1cblxuICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgc3BhbiB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICB3aWR0aDogMDtcbiAgICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgd2lkdGg6IDQwcHg7XG4gICAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICAgIGJvcmRlcjogc29saWQgI2ZmZjtcbiAgICAgICAgICBib3JkZXItd2lkdGg6IDVweCA1cHggMCAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICZfX3ByZXYge1xuICAgICAgICBsZWZ0OiAyMHB4O1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTM1ZGVnKTtcbiAgICAgIH1cblxuICAgICAgJl9fbmV4dCB7XG4gICAgICAgIHJpZ2h0OiAyMHB4O1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgW2RhdGEtZ2FsbGVyeS1tYXJrZXI9J3RodW1icyddIHtcbiAgICArIC5iZ3QtZ2FsbGVyeS1tYXJrZXIge1xuICAgICAgbWFyZ2luLXRvcDogMTBweDtcblxuICAgICAgbGkge1xuICAgICAgICBtYXJnaW46IDAgNXB4O1xuICAgICAgICB3aWR0aDogJHRodW1iLXNpemU7XG4gICAgICAgIGhlaWdodDogJHRodW1iLXNpemU7XG5cdFx0XHRcdCY6OmJlZm9yZSB7XG5cdFx0XHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHRcdFx0fVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFtkYXRhLWdhbGxlcnktbWFya2VyPSdkb3QnXSB7XG4gICAgKyAuYmd0LWdhbGxlcnktbWFya2VyIHtcbiAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG5cbiAgICAgIGxpIHtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgd2lkdGg6IDEwcHg7XG4gICAgICAgIGhlaWdodDogMTBweDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzk5OTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTtcblxuICAgICAgICAmLmN1cnJlbnQge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiDjg4fjg5DjgqTjgrnkvp3lrZjmsY7nlKjjgq/jg6njgrkgKi9cbi5wYy1vbmx5IHtcbiAgZGlzcGxheTogYmxvY2s7XG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrUG9pbnQpIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi5zcC1vbmx5IHtcbiAgZGlzcGxheTogbm9uZTtcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkYnJlYWtQb2ludCkge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG5cbiJdfQ== */
\ No newline at end of file
diff --git a/plugins/bc-installer/config/setting.php b/plugins/bc-installer/config/setting.php
index e28e275927..12405d5902 100644
--- a/plugins/bc-installer/config/setting.php
+++ b/plugins/bc-installer/config/setting.php
@@ -4,7 +4,7 @@
* システム要件
*/
'BcRequire' => [
- 'phpVersion' => "8.0.0",
+ 'phpVersion' => "8.1.0",
'phpMemory' => "128",
'MySQLVersion' => "5.0.0",
'winSQLiteVersion' => "3.7.16",
diff --git a/plugins/bc-installer/src/BcInstallerPlugin.php b/plugins/bc-installer/src/BcInstallerPlugin.php
index 70c4fafa76..0e6d1f8cb4 100644
--- a/plugins/bc-installer/src/BcInstallerPlugin.php
+++ b/plugins/bc-installer/src/BcInstallerPlugin.php
@@ -34,6 +34,7 @@ class BcInstallerPlugin extends BcPlugin
* @param ContainerInterface $container
* @noTodo
* @checked
+ * @unitTest
*/
public function services(ContainerInterface $container): void
{
@@ -67,6 +68,7 @@ public function routes($routes): void
* @return CommandCollection
* @checked
* @noTodo
+ * @unitTest
*/
public function console(CommandCollection $commands): CommandCollection
{
diff --git a/plugins/bc-installer/src/Service/InstallationsService.php b/plugins/bc-installer/src/Service/InstallationsService.php
index d6fd3f175d..75aca95d61 100644
--- a/plugins/bc-installer/src/Service/InstallationsService.php
+++ b/plugins/bc-installer/src/Service/InstallationsService.php
@@ -81,6 +81,7 @@ public function __construct()
* @return array
* @checked
* @noTodo
+ * @unitTest
*/
public function checkEnv(): array
{
diff --git a/plugins/bc-installer/tests/TestCase/BcInstallerPluginTest.php b/plugins/bc-installer/tests/TestCase/BcInstallerPluginTest.php
new file mode 100644
index 0000000000..50714a0455
--- /dev/null
+++ b/plugins/bc-installer/tests/TestCase/BcInstallerPluginTest.php
@@ -0,0 +1,57 @@
+BcInstallerPlugin = new BcInstallerPlugin();
+ }
+
+ public function tearDown(): void
+ {
+ parent::tearDown();
+ }
+
+ /**
+ * test services
+ */
+ public function test_services()
+ {
+ $container = new Container();
+ $this->BcInstallerPlugin->services($container);
+ $this->assertTrue($container->has(InstallationsServiceInterface::class));
+ $this->assertTrue($container->has(InstallationsAdminServiceInterface::class));
+ }
+
+ /**
+ * test routes
+ */
+ public function test_routes()
+ {
+ $this->markTestIncomplete('Not implemented yet.');
+ }
+
+ /**
+ * test commands
+ */
+ public function test_commands()
+ {
+ $commands = new CommandCollection();
+ $result = $this->BcInstallerPlugin->console($commands);
+
+ $this->assertEquals(InstallCommand::class, $result->get('install'));
+ $this->assertEquals(InstallCheckCommand::class, $result->get('install check'));
+ }
+}
diff --git a/plugins/bc-installer/tests/TestCase/Service/InstallationsServiceTest.php b/plugins/bc-installer/tests/TestCase/Service/InstallationsServiceTest.php
index fc4531953b..37e42dfe58 100644
--- a/plugins/bc-installer/tests/TestCase/Service/InstallationsServiceTest.php
+++ b/plugins/bc-installer/tests/TestCase/Service/InstallationsServiceTest.php
@@ -59,14 +59,49 @@ public function test__construct()
/**
* 環境チェック
+ * test checkEnv
*
- * @return array
*/
public function testCheckEnv()
{
- $this->markTestIncomplete('このテストは未実装です。BcManagerComponentから移植中です。');
- $result = $this->BcManager->checkEnv();
- $this->assertNotEmpty($result, '環境情報を取得できません');
+ Configure::write([
+ 'BcRequire' => [
+ 'phpVersion' => "8.0.0",
+ 'phpMemory' => "128",
+ ]
+ ]
+ );
+ $result = $this->Installations->checkEnv();
+ $this->assertEquals('/var/www/html/config',$result['configDir']);
+ $this->assertEquals('/var/www/html/webroot/files',$result['filesDir']);
+ $this->assertEquals('/var/www/html/plugins',$result['pluginDir']);
+ $this->assertEquals('/var/www/html/tmp/',$result['tmpDir']);
+ $this->assertEquals('/var/www/html/db',$result['dbDir']);
+ $this->assertEquals('8.0.0',$result['requirePhpVersion']);
+ $this->assertEquals('128',$result['requirePhpMemory']);
+ $this->assertEquals('UTF-8',$result['encoding']);
+ $this->assertEquals('8.1.5',$result['phpVersion']);
+ $this->assertEquals('-1',$result['phpMemory']);
+ $this->assertTrue($result['safeModeOff']);
+ $this->assertTrue($result['configDirWritable']);
+ $this->assertTrue($result['pluginDirWritable']);
+ $this->assertTrue($result['filesDirWritable']);
+ $this->assertTrue($result['tmpDirWritable']);
+ $this->assertTrue($result['dbDirWritable']);
+ $this->assertEquals('8.1.5',$result['phpActualVersion']);
+ $this->assertTrue($result['phpGd']);
+ $this->assertTrue($result['phpPdo']);
+ $this->assertTrue($result['phpXml']);
+ $this->assertTrue($result['phpZip']);
+ $this->assertEquals('-1',$result['apacheRewrite']);
+ $this->assertTrue($result['encodingOk']);
+ $this->assertTrue($result['gdOk']);
+ $this->assertTrue($result['pdoOk']);
+ $this->assertTrue($result['xmlOk']);
+ $this->assertTrue($result['zipOk']);
+ $this->assertTrue($result['phpVersionOk']);
+ $this->assertTrue($result['phpMemoryOk']);
+ $this->assertTrue($result['blRequirementsMet']);
}
/**
diff --git a/plugins/bc-mail/src/Controller/Admin/MailMessagesController.php b/plugins/bc-mail/src/Controller/Admin/MailMessagesController.php
index 9cee3a2b31..3f0abc12b8 100644
--- a/plugins/bc-mail/src/Controller/Admin/MailMessagesController.php
+++ b/plugins/bc-mail/src/Controller/Admin/MailMessagesController.php
@@ -38,6 +38,7 @@ class MailMessagesController extends MailAdminAppController
* @return void
* @checked
* @noTodo
+ * @unitTest
*/
public function initialize(): void
{
diff --git a/plugins/bc-mail/src/Model/Table/MailMessagesTable.php b/plugins/bc-mail/src/Model/Table/MailMessagesTable.php
index cb6e3f212e..09f9943b0b 100755
--- a/plugins/bc-mail/src/Model/Table/MailMessagesTable.php
+++ b/plugins/bc-mail/src/Model/Table/MailMessagesTable.php
@@ -144,18 +144,15 @@ public function setUseTable($mailContentId)
/**
* テーブル名を生成する
* int型でなかったら強制終了
- * @param $mailContentId
- * @return string
+ * @param int $mailContentId
+ * @return string The table name
* @checked
* @noTodo
+ * @unitTest
*/
- public function createTableName($mailContentId)
+ public function createTableName(int $mailContentId): string
{
- $mailContentId = (int)$mailContentId;
- if (!is_int($mailContentId)) {
- throw new BcException(__d('baser_core', 'MailMessageService::createTableName() の引数 $mailContentId は int 型しか受けつけていません。'));
- }
- return $this->addPrefix('mail_message_' . $mailContentId);
+ return $this->addPrefix("mail_message_{$mailContentId}");
}
/**
@@ -551,6 +548,9 @@ public function convertDatasToMail($data, $options)
*
* @param $mailContentId
* @return string
+ * @checked
+ * @noTodo
+ * @unitTest
*/
public function createFullTableName($mailContentId)
{
diff --git a/plugins/bc-mail/src/Service/Front/MailFrontService.php b/plugins/bc-mail/src/Service/Front/MailFrontService.php
index 681bee26e3..d06f23dea6 100644
--- a/plugins/bc-mail/src/Service/Front/MailFrontService.php
+++ b/plugins/bc-mail/src/Service/Front/MailFrontService.php
@@ -37,6 +37,7 @@
use BaserCore\Annotation\UnitTest;
use BaserCore\Annotation\NoTodo;
use BaserCore\Annotation\Checked;
+use Laminas\Diactoros\UploadedFile;
/**
* MailFrontService
@@ -425,7 +426,7 @@ private function _checkDirectoryRraversal(int $mailContentId, array $postData)
}
foreach($mailFields as $mailField) {
if ($mailField->type !== 'file') continue;
- $tmp_name = Hash::get($postData, $mailField->field_name . '.tmp_name');
+ $tmp_name = Hash::get($_FILES, $mailField->field_name . '.tmp_name');
if ($tmp_name && !is_uploaded_file($tmp_name)) {
return false;
}
diff --git a/plugins/bc-mail/src/Service/MailMessagesService.php b/plugins/bc-mail/src/Service/MailMessagesService.php
index 760a2cba08..5fb8a1b6fa 100644
--- a/plugins/bc-mail/src/Service/MailMessagesService.php
+++ b/plugins/bc-mail/src/Service/MailMessagesService.php
@@ -479,11 +479,11 @@ public function autoConvert(int $mailContentId, array $data): array
$value = mb_convert_kana($value, 'AK');
}
// サニタイズ
- if (!is_array($value)) {
+ if (!is_array($value) && !is_object($value)) {
$value = str_replace('