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 @@ Software License - Build Status + Build Status

@@ -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('